BUG #3854: pg_dump dumps renamed primary key constraints by their old name - Mailing list pgsql-bugs

From Milen A. Radev
Subject BUG #3854: pg_dump dumps renamed primary key constraints by their old name
Date
Msg-id 200801071856.m07IuILf017412@wwwmaster.postgresql.org
Whole thread Raw
List pgsql-bugs
The following bug has been logged online:

Bug reference:      3854
Logged by:          Milen A. Radev
Email address:      milen@radev.net
PostgreSQL version: 8.2.6
Operating system:   Debian Etch
Description:        pg_dump dumps renamed primary key constraints by their
old name
Details:

After a table and the implicit index related to its primary key are renamed,
pg_dump still creates a statement for the primary key using its old name.

Most of the time that's probably harmless but not when there are clustered
tables.


Steps to reproduce the problem:

===================================================

dev:~# /usr/local/postgresql-8.2.6/bin/psql -U postgres -p 6543
Welcome to psql 8.2.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# create table x (x_id integer primary key, foo integer);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "x_pkey" for
table "x"
CREATE TABLE
postgres=# \d x
       Table "public.x"
 Column |  Type   | Modifiers
--------+---------+-----------
 x_id   | integer | not null
 foo    | integer |
Indexes:
    "x_pkey" PRIMARY KEY, btree (x_id)

postgres=# CLUSTER x_pkey ON x;
CLUSTER
postgres=# \d x
       Table "public.x"
 Column |  Type   | Modifiers
--------+---------+-----------
 x_id   | integer | not null
 foo    | integer |
Indexes:
    "x_pkey" PRIMARY KEY, btree (x_id) CLUSTER

postgres=# alter table x rename to a;
ALTER TABLE
postgres=# alter index x_pkey rename to a_pkey;
ALTER INDEX
postgres=# \d a
       Table "public.a"
 Column |  Type   | Modifiers
--------+---------+-----------
 x_id   | integer | not null
 foo    | integer |
Indexes:
    "a_pkey" PRIMARY KEY, btree (x_id) CLUSTER

postgres=# \q
dev:~# /usr/local/postgresql-8.2.6/bin/pg_dump -U postgres -p 6543 postgres
--
-- PostgreSQL database dump
--

SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres
--

COMMENT ON SCHEMA public IS 'Standard public schema';


SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

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

CREATE TABLE a (
    x_id integer NOT NULL,
    foo integer
);


ALTER TABLE public.a OWNER TO postgres;

--
-- Data for Name: a; Type: TABLE DATA; Schema: public; Owner: postgres
--

COPY a (x_id, foo) FROM stdin;
\.


--
-- Name: x_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres;
Tablespace:
--

ALTER TABLE ONLY a
    ADD CONSTRAINT x_pkey PRIMARY KEY (x_id);

ALTER TABLE a CLUSTER ON a_pkey;


--
-- 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
--

dev:~#

===================================================




The problematic statements are:

ALTER TABLE ONLY a
    ADD CONSTRAINT x_pkey PRIMARY KEY (x_id);

ALTER TABLE a CLUSTER ON a_pkey;

pgsql-bugs by date:

Previous
From: Daniel Migowski
Date:
Subject: Re: BUG #3808: Connections stays open in stateCLOSE_WAIT
Next
From: Stefan Kaltenbrunner
Date:
Subject: ALTER INDEX/ALTER TABLE on indexes can cause unrestorable dumps