Обсуждение: 1600 column limit per table

Поиск
Список
Период
Сортировка

1600 column limit per table

От
Mike Weber
Дата:
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

Re: 1600 column limit per table

От
Tom Lane
Дата:
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