Re: interesting check constraint behavior

From: Alban Hertroys <dalroi(at)solfertje(dot)student(dot)utwente(dot)nl>
To: "Gauthier, Dave" <dave(dot)gauthier(at)intel(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: interesting check constraint behavior
Date: 2010-01-07 10:49:07
Message-ID: 4117BD37-F9A5-4230-BA3D-83265A4B8EA1@solfertje.student.utwente.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 7 Jan 2010, at 24:12, Gauthier, Dave wrote:

> thedb=# create table foo (col1 text, constraint chk check (col1 in ('a','b','c',null)));
> CREATE TABLE
> thedb=# insert into foo (col1) values ('xxx');
> INSERT 0 1
>
> Hmmmm... I would have thought that this would have violated the constraint because ‘xxx’ is not null and nit one of the allowed values.

As Tom already explained, "value in ('yada', 'yada', null)" evaluates to null. You'll need to make sure your check expression evaluates to either true or false - not null.

I guess you need: check(col1 in ('a', 'b', 'c') or col1 is null)

Alban Hertroys

--
If you can't see the forest for the trees,
cut the trees and you'll see there is no forest.

!DSPAM:737,4b45bc2610731598743439!

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Merlin Moncure 2010-01-07 13:18:18 Re: How psql source code can be protected?
Previous Message Konrad Garus 2010-01-07 10:45:22 Re: Rows missing from table despite FK constraint