BUG #16386: drop contraint in inherited table is missing in pg_dump backup

Started by PG Bug reporting formalmost 6 years ago4 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16386
Logged by: klement szabolcs
Email address: szittya314@gmail.com
PostgreSQL version: 10.12
Operating system: centos 7
Description:

create table b (aaa int primary key,bb date );
create table A (id int primary key) inherits (B);
alter table a alter column aaa drop not null;

after i made pg_dump and pg_restore the not null contraint isexist on table
a;

#2Euler Taveira
euler.taveira@2ndquadrant.com
In reply to: PG Bug reporting form (#1)
Re: BUG #16386: drop contraint in inherited table is missing in pg_dump backup

On Fri, 24 Apr 2020 at 07:09, PG Bug reporting form <noreply@postgresql.org>
wrote:

create table b (aaa int primary key,bb date );
create table A (id int primary key) inherits (B);
alter table a alter column aaa drop not null;

after i made pg_dump and pg_restore the not null contraint isexist on table
a;

It does not make sense to exclude a not null constraint on an inherited

table because column "aaa" can be null in table "a" but a SELECT in table
"b" will return a NULL for a primary key (ugh). It is just one of the ways
to shoot yourself in the foot. If you check CREATE TABLE synopsis, there
isn't NO INHERIT for not null constraints. Maybe it is worth adding a note
in CREATE TABLE.

--
Euler Taveira http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Euler Taveira (#2)
Re: BUG #16386: drop contraint in inherited table is missing in pg_dump backup

On 2020-Apr-24, Euler Taveira wrote:

On Fri, 24 Apr 2020 at 07:09, PG Bug reporting form <noreply@postgresql.org>
wrote:

create table b (aaa int primary key,bb date );
create table A (id int primary key) inherits (B);
alter table a alter column aaa drop not null;

after i made pg_dump and pg_restore the not null contraint isexist on table
a;

It does not make sense to exclude a not null constraint on an inherited
table because column "aaa" can be null in table "a" but a SELECT in table
"b" will return a NULL for a primary key (ugh). It is just one of the ways
to shoot yourself in the foot. If you check CREATE TABLE synopsis, there
isn't NO INHERIT for not null constraints. Maybe it is worth adding a note
in CREATE TABLE.

I agree with your analysis, but in that case we should make the DROP NOT
NULL throw an error instead of proceeding.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#3)
Re: BUG #16386: drop contraint in inherited table is missing in pg_dump backup

Alvaro Herrera <alvherre@2ndquadrant.com> writes:

On 2020-Apr-24, Euler Taveira wrote:

On Fri, 24 Apr 2020 at 07:09, PG Bug reporting form <noreply@postgresql.org>
wrote:

create table b (aaa int primary key,bb date );
create table A (id int primary key) inherits (B);
alter table a alter column aaa drop not null;

It does not make sense to exclude a not null constraint on an inherited
table because column "aaa" can be null in table "a" but a SELECT in table
"b" will return a NULL for a primary key (ugh). It is just one of the ways
to shoot yourself in the foot. If you check CREATE TABLE synopsis, there
isn't NO INHERIT for not null constraints. Maybe it is worth adding a note
in CREATE TABLE.

I agree with your analysis, but in that case we should make the DROP NOT
NULL throw an error instead of proceeding.

Indeed, but we lack the catalog infrastructure to do that reasonably.
If we ever get around to creating pg_constraint entries for NOT NULL
constraints, it'd be simple to do, since those would carry info about
whether or not the constraint is inherited. (Weren't you working on
that awhile ago?)

regards, tom lane