BUG #9820: Parentheses removed in chech constraint
The following bug has been logged on the website:
Bug reference: 9820
Logged by: Isabelle Lussier
Email address: ilussier@accovia.com
PostgreSQL version: 9.3.2
Operating system: Windows (PgAdmin)
Description:
Hi, I'am want to add a check constraint that checks if the first condition
is true OR the second condition is true. If one of the two conditions is
true, then the check is true.
Example:
alter table table_name add constraint c1 CHECK ( (type = 0 AND field1 IS NOT
NULL AND field2 IS NOT NULL AND field3 IS NOT NULL) OR (type_id = 1 AND
field1 IS NULL AND field2 IS NULL AND field3 IS NULL) )
At the execution of the query, the parentheses that defines condition 1 and
condition 2 are removed. By removing the parentheses, the expression does
not means the same thing. Why postgresql removes the parentheses or how can
I do the constraint differently?
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
ilussier@accovia.com writes:
alter table table_name add constraint c1 CHECK ( (type = 0 AND field1 IS NOT
NULL AND field2 IS NOT NULL AND field3 IS NOT NULL) OR (type_id = 1 AND
field1 IS NULL AND field2 IS NULL AND field3 IS NULL) )
At the execution of the query, the parentheses that defines condition 1 and
condition 2 are removed. By removing the parentheses, the expression does
not means the same thing.
Sure it does. AND binds more tightly than OR.
You did not state what your actual problem is, but whether or not the
constraint-printer adds logically redundant parentheses isn't it...
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs