1600 column limit per table

Lists: pgsql-admin
From: Mike Weber <j_weber(at)tcdi(dot)com>
To: pgsql-admin(at)postgresql(dot)org
Subject: 1600 column limit per table
Date: 2008-05-23 19:35:38
Message-ID: 48371C8A.7000206@tcdi.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

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


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Mike Weber <j_weber(at)tcdi(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: 1600 column limit per table
Date: 2008-05-23 20:31:16
Message-ID: 20374.1211574676@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

Mike Weber <j_weber(at)tcdi(dot)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