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 по дате отправления: