Re: [BUGS] BUG #2704: pg_class.relchecks overflow problem
От | Toru SHIMOGAKI |
---|---|
Тема | Re: [BUGS] BUG #2704: pg_class.relchecks overflow problem |
Дата | |
Msg-id | 453EAFC9.5090203@oss.ntt.co.jp обсуждение исходный текст |
Ответы |
Re: [BUGS] BUG #2704: pg_class.relchecks overflow problem
|
Список | pgsql-patches |
How about this patch? Of course, it might be a rare case that such check is necessary... Toru SHIMOGAKI wrote: > The following bug has been logged online: > > Bug reference: 2704 > Logged by: Toru SHIMOGAKI > Email address: shimogaki.toru@oss.ntt.co.jp > PostgreSQL version: 8.1.4 > Operating system: Red Hat Enterprise Linux AS 4 > Description: pg_class.relchecks overflow problem > Details: > > Hi, > > pg_class.relchecks is defined as int2. But the upper bound of this value is > not checked and it overflows. > > > I found it at the following case: > > 1. I tried to add check constraints: > > "alter table test_a add check (aaa > i);" (0 <= i <= 32767) > > > 2. When I added the 32768th check constraint, the value of pg_class.relchecs > became -32768. > > postgres=# alter table test_a add check ( aaa > 32768 ); > ALTER TABLE > postgres=# select relname, relchecks from pg_class where relname = > 'test_a'; > relname | relchecks > ---------+----------- > test_a | -32768 > (1 row) > > > 3. The following error message was found when I added the next one: > > postgres=# alter table test_a add check ( aaa > 32769 ); > ERROR: unexpected constraint record found for rel test_a > postgres=# select relname, relchecks from pg_class where relname = > 'test_a'; > relname | relchecks > ---------+----------- > test_a | -32768 > (1 row) > > > Best regards, > > ---------------------------(end of broadcast)--------------------------- > TIP 1: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > > -- Toru SHIMOGAKI<shimogaki.toru@oss.ntt.co.jp> diff -cpr postgresql-8.1.5-orig/src/backend/catalog/heap.c postgresql-8.1.5/src/backend/catalog/heap.c *** postgresql-8.1.5-orig/src/backend/catalog/heap.c 2006-04-24 10:40:39.000000000 +0900 --- postgresql-8.1.5/src/backend/catalog/heap.c 2006-10-23 16:50:22.000000000 +0900 *************** AddRelationRawConstraints(Relation rel, *** 1525,1530 **** --- 1525,1535 ---- continue; Assert(cdef->cooked_expr == NULL); + if (numchecks == 0x7FFF) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("cannot have more than 2^15-1 checks in a table"))); + /* * Transform raw parsetree to executable expression. */
В списке pgsql-patches по дате отправления: