Thread: 1600 column limit per table
I ran into the 1600 column upper bound in a table and I am trying to assess if I can work around the limit or if I am in need of a re-design of my application. All the documentation on the site that I have seen (CREATE TABLE and postgresql.org/about/) says that 1600 is the limit, I looked in htup.h and found: ./src/include/access/htup.h:#define MaxHeapAttributeNumber 1600 /* 8 * 200 */ with documentation to explain the limitation. The one ray of hope I found was a post from 2001(!) suggesting that the maximum number of columns can be increased 4x by increasing one's block size to 32k ( http://archives.postgresql.org/pgsql-admin/2001-01/msg00199.php ) One thought I had was to join two 1600 column tables but ran into the limit of 1664 tuples. I'm currently using 8.1.10 -- are there any easy outs(via upgrade, configuration, or hacking postgres a little) or should I start drawing up a different application design? Thanks, Mike
Mike Weber <j_weber@tcdi.com> writes: > I ran into the 1600 column upper bound in a table and I am trying to > assess if I can work around the limit or if I am in need of a re-design > of my application. You need to redesign. The 1600 limit has some slop (intentionally) but not a lot of slop --- I think the hard maximum without breaking compatibility with 8.1's on-disk format would be 1736. Most people think that rows that wide are a sign of bad SQL design anyway, which is why there's not been any interest in trying to raise the limit. Perhaps you could collapse multiple similar columns into an array column? regards, tom lane