> transform_null_equals only catches the exact syntax "something = NULL". It > does not touch "something <> NULL". The latter is always going to yield > NULL, by definition.
Yes, I saw this in parser_expr.c and the documentation. 1)In code "dtpagto IS NULL" is not the same thing that !(dtpagto IS NULL), or either, a condition bolean. 2) if "dtpagto <> NULL" is not a valid codification and not checked, he would not be correct that a message of error while creating constraint. The fact not to occur the error message, can delude the programmer of the SGBD with in sample of test. CONSTRAINT ttt CHECK (valorpg > 0::numeric AND dtpagto <> NULL::date OR valorpg = 0::numeric AND dtpagto IS NULL) ) WITH OIDS; ALTER TABLE cntpagit1 OWNER postgres; -- Result of sql. insert into cntpagit1 values(1, NULL); Query returned successfully: one row 20545 with OID inserted, 70 ms execution times. insert into cntpagit1 values(0, '20050115 '); ERROR: new row will be relation "cntpagit1" violates check constraint "ttt" regards, Luiz Gonzaga da Mata. Brasil. ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster