Обсуждение: BUG #6712: PostgreSQL 9.2 beta2: alter table drop constraint does not work on inherited master table

Поиск
Список
Период
Сортировка

BUG #6712: PostgreSQL 9.2 beta2: alter table drop constraint does not work on inherited master table

От
miroslav.sulc@fordfrog.com
Дата:
The following bug has been logged on the website:

Bug reference:      6712
Logged by:          Miroslav =C5=A0ulc
Email address:      miroslav.sulc@fordfrog.com
PostgreSQL version: Unsupported/Unknown
Operating system:   Gentoo Linux
Description:=20=20=20=20=20=20=20=20

here is the test case:

test=3D# create table test_constraints (id int, val1 varchar, val2 int, uni=
que
(val1, val2));
NOTICE:  CREATE TABLE / UNIQUE will create implicit index
"test_constraints_val1_val2_key" for table "test_constraints"
CREATE TABLE
test=3D# create table test_constraints_inh () inherits (test_constraints);
CREATE TABLE
test=3D# alter table only test_constraints drop constraint
test_constraints_val1_val2_key;
ERROR:  constraint "test_constraints_val1_val2_key" of relation
"test_constraints_inh" does not exist


postgresql tries to drop the constraint even from descendant table though
"only" is specified.
> From: pgsql-bugs-owner@postgresql.org [mailto:pgsql-bugs-owner@postgresql=
.org] On Behalf Of miroslav.sulc@fordfrog.com
> Sent: Saturday, June 30, 2012 4:28 PM
> The following bug has been logged on the website:

> Bug reference:      6712
> Logged by:          Miroslav =C5=A0ulc
> Email address:      miroslav.sulc@fordfrog.com
> PostgreSQL version: Unsupported/Unknown
> Operating system:   Gentoo Linux
> Description:=20=20=20=20=20=20=20=20

> here is the test case:

> test=3D# create table test_constraints (id int, val1 varchar, val2 int, u=
nique
> (val1, val2));
> NOTICE:  CREATE TABLE / UNIQUE will create implicit index
> "test_constraints_val1_val2_key" for table "test_constraints"
> CREATE TABLE
> test=3D# create table test_constraints_inh () inherits (test_constraints);
> CREATE TABLE
> test=3D# alter table only test_constraints drop constraint
> test_constraints_val1_val2_key;
> ERROR:  constraint "test_constraints_val1_val2_key" of relation
> "test_constraints_inh" does not exist


> postgresql tries to drop the constraint even from descendant table though
> "only" is specified.


In function ATExecDropConstraint(), for the constarint "test_constraints_va=
l1_val2_key" con->connoinherit is false,=20
due to which it tries to drop the constrint from child table as well.=20
I have checked that from function index_constraint_create() when it calls f=
unction CreateConstraintEntry(), the flag for noinherit passed is false.=20
I think this is the reason of failure for the same.

With Regards,
Amit Kapila.

Re: BUG #6712: PostgreSQL 9.2 beta2: alter table drop constraint does not work on inherited master table

От
Bruce Momjian
Дата:
On Mon, Jul  2, 2012 at 04:16:31PM +0530, Amit Kapila wrote:
> > From: pgsql-bugs-owner@postgresql.org [mailto:pgsql-bugs-owner@postgresql.org] On Behalf Of
miroslav.sulc@fordfrog.com
> > Sent: Saturday, June 30, 2012 4:28 PM
> > The following bug has been logged on the website:
>
> > Bug reference:      6712
> > Logged by:          Miroslav Å ulc
> > Email address:      miroslav.sulc@fordfrog.com
> > PostgreSQL version: Unsupported/Unknown
> > Operating system:   Gentoo Linux
> > Description:
>
> > here is the test case:
>
> > test=# create table test_constraints (id int, val1 varchar, val2 int, unique
> > (val1, val2));
> > NOTICE:  CREATE TABLE / UNIQUE will create implicit index
> > "test_constraints_val1_val2_key" for table "test_constraints"
> > CREATE TABLE
> > test=# create table test_constraints_inh () inherits (test_constraints);
> > CREATE TABLE
> > test=# alter table only test_constraints drop constraint
> > test_constraints_val1_val2_key;
> > ERROR:  constraint "test_constraints_val1_val2_key" of relation
> > "test_constraints_inh" does not exist
>
>
> > postgresql tries to drop the constraint even from descendant table though
> > "only" is specified.
>
>
> In function ATExecDropConstraint(), for the constarint "test_constraints_val1_val2_key" con->connoinherit is false,
> due to which it tries to drop the constrint from child table as well.
> I have checked that from function index_constraint_create() when it calls function CreateConstraintEntry(), the flag
fornoinherit passed is false.  
> I think this is the reason of failure for the same.

I believe this if fixed in all current versions of Postgres.  I tested
9.1, 9.2rc1, and 9.3.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +