BUG #9820: Parentheses removed in chech constraint

Started by Nonameabout 12 years ago2 messagesbugs
Jump to latest
#1Noname
ilussier@accovia.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: BUG #9820: Parentheses removed in chech constraint

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