This works in 9.1, but not in HEAD:
CREATE TABLE parent(id INTEGER, CONSTRAINT id_check CHECK(id>1));
CREATE TABLE child() INHERITS(parent);
ALTER TABLE ONLY parent DROP CONSTRAINT id_check;
I'm getting:
ERROR: relation 16456 has non-inherited constraint "id_check"
where 16456 is the oid of the child table.
It seems that the pg_constraint scan at ATExecDropConstraint (tablecmds.c:6751) is re-reading those tuples that were updated in the previous iterations of this scan, at least that's what I've observed in gdb. I'm not sure how to fix this yet.
--
Alexey Klyukin http://www.commandprompt.com
The PostgreSQL Company – Command Prompt, Inc.