Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables - Mailing list pgsql-bugs

From Дмитрий Дегтярёв
Subject Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables
Date
Msg-id CAFcrtwGu0+aOx4QbWE5iAtOfUZH6BGoX6+-5O4FhKzNPU+GfGg@mail.gmail.com
Whole thread Raw
In response to Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
I'm sorry I made a mistake in the first case (# case 1)

Should be so:
test_inherits=> create table t1(a integer not null, b integer);
CREATE TABLE
test_inherits=> create table t2(a integer, b integer) inherits (t1);
NOTICE:  merging column "a" with inherited definition
NOTICE:  merging column "b" with inherited definition
CREATE TABLE
test_inherits=> insert into t1(a,b) values(null,1);
ERROR:  null value in column "a" violates not-null constraint
DETAIL:  Failing row contains (null, 1).
test_inherits=> insert into t2(a,b) values(null,1);
ERROR:  null value in column "a" violates not-null constraint
DETAIL:  Failing row contains (null, 1).

The problem with case 2 and case 3.

However, in accordance with the documentation http://www.postgresql.org/docs/9.4/static/ddl-inherit.html(quote: "It must also include check constraints with the same names and check expressions as those of the parent."),
alter table t2 alter column a drop not null;
the result must be a error.

2015-04-02 18:49 GMT+05:00 Tom Lane <tgl@sss.pgh.pa.us>:
degtyaryov@gmail.com writes:
> $ psql -U test -d test_inherits
> test_inherits=> create table t1(a integer not null, b integer);
> CREATE TABLE
> test_inherits=> create table t2(a integer, b integer) inherits (t1);
> CREATE TABLE
> test_inherits=> insert into t1(a,b) values(null,1);
> ERROR:  null value in column "a" violates not-null constraint
> DETAIL:  Failing row contains (null, 1).
> test_inherits=> insert into t2(a,b) values(null,1);
> INSERT 0 1
> test_inherits=> \q

[ scratches head... ]  When I do that, it refuses to insert into t2
either:

regression=# create table t1(a integer not null, b integer);
CREATE TABLE
regression=# create table t2(a integer, b integer) inherits (t1);
NOTICE:  merging column "a" with inherited definition
NOTICE:  merging column "b" with inherited definition
CREATE TABLE
regression=# insert into t1(a,b) values(null,1);
ERROR:  null value in column "a" violates not-null constraint
DETAIL:  Failing row contains (null, 1).
regression=# insert into t2(a,b) values(null,1);
ERROR:  null value in column "a" violates not-null constraint
DETAIL:  Failing row contains (null, 1).

This is the behavior I would expect, and I see it in all active
branches.  Have you modified the code around column inheritance?

                        regards, tom lane

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables
Next
From: Tom Lane
Date:
Subject: Re: BUG #12946: pg_dump/pg_restore not restore data for inherit tables