8.0.0beta1: Ownership of implicit sequences after dump/restore - Mailing list pgsql-bugs

From Michael Fuhr
Subject 8.0.0beta1: Ownership of implicit sequences after dump/restore
Date
Msg-id 20040812025627.GA60230@winnie.fuhr.org
Whole thread Raw
Responses Re: 8.0.0beta1: Ownership of implicit sequences after dump/restore  (Michael Fuhr <mike@fuhr.org>)
Re: 8.0.0beta1: Ownership of implicit sequences after dump/restore  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: 8.0.0beta1: Ownership of implicit sequences after dump/restore  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-bugs
PostgreSQL version: 8.0.0beta1
Operating system  : Solaris 9

Backups created by pg_dump/pg_dumpall don't set the ownership of
implicitly-created sequences.  When backups are restored, users who
created sequences may not be able to use them.

How to repeat:

1. Create a test user and a test database.

  createuser -P -Upostgres testuser
  Enter password for new user: ********
  Enter it again: ********
  Shall the new user be allowed to create databases? (y/n) n
  Shall the new user be allowed to create more new users? (y/n) n

  createdb -Upostgres testdb

2. Connect to the test database as the test user, create explicit
and implicit sequences, then list the sequences.

  psql -Utestuser testdb
  CREATE SEQUENCE test_seq;
  CREATE TABLE stuff (id SERIAL PRIMARY KEY, name TEXT NOT NULL);
  \ds
                List of relations
   Schema |     Name     |   Type   |  Owner
  --------+--------------+----------+----------
   public | stuff_id_seq | sequence | testuser
   public | test_seq     | sequence | testuser
  (2 rows)

3. Make a backup of the test database.

  pg_dump -Upostgres testdb > backup.sql

4. Drop the test database.

  dropdb -Upostgres testdb

5. Recreate the test database and restore it.

  createdb -Upostgres testdb
  psql -Upostgres -f backup.sql testdb

6. Connect to the test database as the test user, show the sequences,
and try to use the implicitly-created one.

  psql -Utestuser testdb
  \ds
                List of relations
   Schema |     Name     |   Type   |  Owner
  --------+--------------+----------+----------
   public | stuff_id_seq | sequence | postgres
   public | test_seq     | sequence | testuser
  (2 rows)

  SELECT nextval('stuff_id_seq');
  ERROR:  permission denied for sequence stuff_id_seq

pg_dump sets the ownership of the explicitly-created sequence via
an ALTER TABLE statement (I see ALTER SEQUENCE ... OWNER TO on the
TODO list):

  ALTER TABLE public.test_seq OWNER TO testuser;

No such statement is issued for the implicitly-created sequence,
resulting in the sequence being owned by the user who restored the
database.  This would typically be a database superuser.

Is this a bug in pg_dump/pg_dumpall, or is it a bug in the ALTER
TABLE ... OWNER TO statement that set the ownership of the table
that implicitly created the sequence?  It seems reasonable that
changing a table's ownership should also change the ownership of
any implicitly-created sequences, or has that already been discussed
and rejected?

Thanks.

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

pgsql-bugs by date:

Previous
From: "PostgreSQL Bugs List"
Date:
Subject: BUG #1215: Call sql function from plpgsql results vary.
Next
From: Tom Lane
Date:
Subject: Re: BUG #1215: Call sql function from plpgsql results vary.