Re: update db doesnt work

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: update db doesnt work
Дата
Msg-id 26927.1022529629@sss.pgh.pa.us
обсуждение исходный текст
Ответ на update db doesnt work  (dirk heitmann <dirk.heitmann@fal.de>)
Список pgsql-general
dirk heitmann <dirk.heitmann@fal.de> writes:
> i have created a table with 1600 comlumns. Now i want
> to update some columns with new values:
> update db set col1=1 where col2=2;
> this generates the error-message:
> heap_formtuple: numberOfAttributes of 1601 > 1600.

I've modified current development sources to allow this case to work.
If you are interested in back-porting the patch into existing releases,
modify src/include/access/htup.h as indicated below and change
heap_formtuple in src/backend/access/common/heaptuple.c to test against
MaxTupleAttributeNumber instead of MaxHeapAttributeNumber.  (AFAICT all
the other uses of MaxHeapAttributeNumber should stay the same.)

            regards, tom lane


/*
 * MaxTupleAttributeNumber limits the number of (user) columns in a tuple.
 * The key limit on this value is that the size of the fixed overhead for
 * a tuple, plus the size of the null-values bitmap (at 1 bit per column),
 * plus MAXALIGN alignment, must fit into t_hoff which is uint8.  On most
 * machines the upper limit without making t_hoff wider would be a little
 * over 1700.  We use round numbers here and for MaxHeapAttributeNumber
 * so that alterations in HeapTupleHeaderData layout won't change the
 * supported max number of columns.
 */
#define MaxTupleAttributeNumber    1664    /* 8 * 208 */

/*----------
 * MaxHeapAttributeNumber limits the number of (user) columns in a table.
 * This should be somewhat less than MaxTupleAttributeNumber.  It must be
 * at least one less, else we will fail to do UPDATEs on a maximal-width
 * table (because UPDATE has to form working tuples that include CTID).
 * In practice we want some additional daylight so that we can gracefully
 * support operations that add hidden "resjunk" columns, for example
 * SELECT * FROM wide_table ORDER BY foo, bar, baz.
 * In any case, depending on column data types you will likely be running
 * into the disk-block-based limit on overall tuple size if you have more
 * than a thousand or so columns.  TOAST won't help.
 *----------
 */
#define MaxHeapAttributeNumber    1600    /* 8 * 200 */

В списке pgsql-general по дате отправления:

Предыдущее
От: Gregory Seidman
Дата:
Сообщение: Re: Mail messages improvement request
Следующее
От: "Marc G. Fournier"
Дата:
Сообщение: Re: [meta] news.postgresql.org still down - who do I