8.0.0beta1: Ownership of implicit sequences after dump/restore

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: pgsql-bugs(at)postgresql(dot)org
Subject: 8.0.0beta1: Ownership of implicit sequences after dump/restore
Date: 2004-08-12 02:56:27
Message-ID: 20040812025627.GA60230@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

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/

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2004-08-12 03:06:09 Re: BUG #1215: Call sql function from plpgsql results vary.
Previous Message PostgreSQL Bugs List 2004-08-12 00:08:36 BUG #1215: Call sql function from plpgsql results vary.

Browse pgsql-hackers by date

  From Date Subject
Next Message Philip Warner 2004-08-12 03:00:26 Re: dollar-quoting in psql and in general
Previous Message Tom Lane 2004-08-12 02:56:22 Re: [HACKERS] SAVEPOINT syntax again