Thread: ALTER TABLE ONLY ...DROP CONSTRAINT is broken in HEAD.

ALTER TABLE ONLY ...DROP CONSTRAINT is broken in HEAD.

From
Alexey Klyukin
Date:
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
updatedin 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.






Re: ALTER TABLE ONLY ...DROP CONSTRAINT is broken in HEAD.

From
Robert Haas
Date:
On Mon, Sep 12, 2011 at 11:53 AM, Alexey Klyukin
<alexk@commandprompt.com> wrote:
> 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
updatedin 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.

Woops, seems this got overlooked.  It's been fixed, though: see commit
c0f03aae0469e758964faac0fb741685170c39a5.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company