Thread: check contraint allows illegal value?
Is this a bug? create table foo( c char(2) check (c in ('09', '10', '11', '12', 'n/a')) ); CREATE insert into foo values('09'); INSERT insert into foo values('10'); INSERT insert into foo values('08'); ExecAppend: rejected due to CHECK constraint foo_c insert into foo values('n/a'); ExecAppend: rejected due to CHECK constraint foo_c clearly this was a 'whups' on my part, but it would have been nice to know that my constraint was bogus at the time the table was created.
> > Is this a bug? > > create table foo( c char(2) > check (c in ('09', '10', '11', '12', 'n/a')) > ); > CREATE > > insert into foo values('09'); > INSERT > > insert into foo values('10'); > INSERT > > insert into foo values('08'); > ExecAppend: rejected due to CHECK constraint foo_c > > insert into foo values('n/a'); > ExecAppend: rejected due to CHECK constraint foo_c > > > > clearly this was a 'whups' on my part, but it would have > been nice to know that my constraint was bogus at the > time the table was created. That is interesting. You want the check constraint to be a valid value for the column. I can see char() having this issue. Is this something we should check for all types folks? Not sure. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
missive@frontiernet.net (Lee Harr) writes: > Is this a bug? > create table foo( c char(2) > check (c in ('09', '10', '11', '12', 'n/a')) > ); I don't think so; at least, I don't think there's any way in the general case for the system to realize that some part of a check condition can never succeed or never fail. (See "halting problem".) regards, tom lane