BUG #5604: Setting NOT NULL on inherited column turns to real column in dump - Mailing list pgsql-bugs

From Jon Erdman (aka StuckMojo)
Subject BUG #5604: Setting NOT NULL on inherited column turns to real column in dump
Date
Msg-id 201008060431.o764VkPF065479@wwwmaster.postgresql.org
Whole thread Raw
Responses Re: BUG #5604: Setting NOT NULL on inherited column turns to real column in dump
List pgsql-bugs
The following bug has been logged online:

Bug reference:      5604
Logged by:          Jon Erdman (aka StuckMojo)
Email address:      postgresql@thewickedtribe.net
PostgreSQL version: Tested 9.0, 8.3
Operating system:   Ubuntu Lucid 10.04
Description:        Setting NOT NULL on inherited column turns to real
column in dump
Details:

I think the fix here is relatively simple: make NOT NULL on an inherited
column dump as an ALTER TABLE.

If you set NOT NULL on an inherited column in a child table, then drop the
column from the parent, it's gone from both and all is well.

However, if you dump and restore the db, then drop the parent column, the
inherited column remains in the child table. This is a result of the NOT
NULL dumping as a column create in the child, which I assume then shadows
the inherited column after restore.

This example illustrates the issue nicely I think:

jon@stuck-64:~$ cat bug.sh
createdb foo
psql -X foo <<EOF
begin;
create table parent (i int, j int);
create table child_1 (k int) inherits (parent);
create table child_2 (k int) inherits (parent);
alter table child_2 alter column j set not null;
commit;
begin;
alter table parent drop column j;
\d child_1
\d child_2
rollback;
EOF
createdb bar
pg_dump --schema-only foo
pg_dump foo | psql -X bar
psql -X bar <<EOF
begin;
alter table parent drop column j;
commit;
\d child_1
\d child_2
EOF
dropdb foo
dropdb bar


jon@stuck-64:~$ sh bug.sh
BEGIN
CREATE TABLE
CREATE TABLE
CREATE TABLE
ALTER TABLE
COMMIT
BEGIN
ALTER TABLE
    Table "public.child_1"
 Column |  Type   | Modifiers
--------+---------+-----------
 i      | integer |
 k      | integer |
Inherits: parent

    Table "public.child_2"
 Column |  Type   | Modifiers
--------+---------+-----------
 i      | integer |
 k      | integer |
Inherits: parent

ROLLBACK
--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: postgres
--

CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;


ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: parent; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--

CREATE TABLE parent (
    i integer,
    j integer
);


ALTER TABLE public.parent OWNER TO postgres;

--
-- Name: child_1; Type: TABLE; Schema: public; Owner: postgres; Tablespace:

--

CREATE TABLE child_1 (
    k integer
)
INHERITS (parent);


ALTER TABLE public.child_1 OWNER TO postgres;

--
-- Name: child_2; Type: TABLE; Schema: public; Owner: postgres; Tablespace:

--

CREATE TABLE child_2 (
    j integer NOT NULL,
    k integer
)
INHERITS (parent);


ALTER TABLE public.child_2 OWNER TO postgres;

--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

SET
SET
SET
SET
SET
SET
CREATE LANGUAGE
ALTER LANGUAGE
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
BEGIN
ALTER TABLE
COMMIT
    Table "public.child_1"
 Column |  Type   | Modifiers
--------+---------+-----------
 i      | integer |
 k      | integer |
Inherits: parent

    Table "public.child_2"
 Column |  Type   | Modifiers
--------+---------+-----------
 i      | integer |
 j      | integer | not null
 k      | integer |
Inherits: parent

pgsql-bugs by date:

Previous
From: Fujii Masao
Date:
Subject: Re: Re: BUG #5602: Recovering from Hot-Standby file backup leads to the currupted indexes
Next
From: Fujii Masao
Date:
Subject: Re: In 8.2, shutdown wrongly caused automatic restart