problem with pg_dump and restoring sequences - Mailing list pgsql-general

From Martin Hart
Subject problem with pg_dump and restoring sequences
Date
Msg-id 200310101156.36103.martin@zsdfherg.com
Whole thread Raw
List pgsql-general
Hi,

postgresql 7.4beta4 on linux
and postgresql 7.3.4 on linux

We have a database that we routinely backup using "pg_dump -a"
We have to do this (dump the data only) because of various characteristics of
the database (e.g. the dump file tries to create fks to tables that it hasn't
created yet if we export schema + data).

When we come to do a restore, the schema is created by running through our
*.sql files, and then we use psql to import the backed up data.  However,
there is a problem with only 2 of the many sequences that psql tries to
restore:

here is a snippet of the lines that fail in the dump file:

-- start quote--
SET search_path = signal, pg_catalog;

--
-- TOC entry 2 (OID 169712)
-- Name: type_id_seq; Type: SEQUENCE SET; Schema: signal; Owner: martin
--
SELECT pg_catalog.setval('type_id_seq', 1, false);

--
-- TOC entry 3 (OID 169728)
-- Name: auto_id_seq; Type: SEQUENCE SET; Schema: signal; Owner: martin
--

SELECT pg_catalog.setval('auto_id_seq', 19, true);  <------ FAILS


--
-- TOC entry 4 (OID 169745)
-- Name: instance_at_seq; Type: SEQUENCE SET; Schema: signal; Owner: martin
--

SELECT pg_catalog.setval('instance_at_seq', 41, true); <----- FAILS
-- end quote--

the failure messages are:
psql:db.backup:42041: ERROR:  relation "auto_id_seq" does not exist
psql:db.backup:42049: ERROR:  relation "instance_at_seq" does not exist

Now - to make it work all I have to do is edit the dump file and prepend the
schema name to the setval call for these 2 failing cases:

select pg_catalog.setval('signal.auto_id_seq', 19, true); <----- WORKS

I initially thought that the schema name might have been the cause of the
problem, but changing it has no effect - so maybe it's the search path (but
notice that the first sequence [type_id_seq] works).  I do create all tables
"without oids", maybe that's related?

It is most likely that the problem is with my code - but I can't see it.  Here
is a \d of the two tables taken immediately before trying to import the data:

db=# \d signal.instance
                           Table "signal.instance"
 Column  |  Type  |                        Modifiers
---------+--------+----------------------------------------------------------
 at      | bigint | not null default nextval('signal.instance_at_seq'::text)
 type_id | bigint | not null
 f0      | text   |
 f1      | text   |
 f2      | text   |
 f3      | text   |
 f4      | text   |
Indexes:
    "instance_pkey" primary key, btree ("at")
    "instance_f0" btree (f0)
    "instance_type_id" btree (type_id)
Foreign-key constraints:
    "$1" FOREIGN KEY (type_id) REFERENCES signal."type"(id)

db=# \d signal.auto
                            Table "signal.auto"
  Column   |  Type   |                      Modifiers
-----------+---------+------------------------------------------------------
 id        | bigint  | not null default nextval('signal.auto_id_seq'::text)
 type_id   | bigint  | not null
 schema    | text    | not null
 relation  | text    | not null
 fields    | text    |
 criteria  | text    |
 is_insert | boolean | not null default false
 is_update | boolean | not null default false
 is_delete | boolean | not null default false
Indexes:
    "auto_pkey" primary key, btree (id)
Foreign-key constraints:
    "$1" FOREIGN KEY (type_id) REFERENCES signal."type"(id) ON DELETE CASCADE

also, both sequences do actually exist at this point :-)

What I do not understand is why it is only these 2 cases out of lots of
similar sequence setting that fail.  I understand that I am probably not
providing enough information here for a diagnostic - this email is just to
test the water and see if anybody else has experienced similar problems.

I will start work on a test case to see if I can reproduce the behaviour with
a smaller input set.  If so I'll post it - but I would be interested to hear
from anybody with similar experiences.  At the moment this problem is
preventing us offering an "automatic backup and restore" :-(

TIA
Martin Hart


pgsql-general by date:

Previous
From: Martin Marques
Date:
Subject: Re: Humor me: Postgresql vs. MySql (esp. licensing)
Next
From:
Date:
Subject: Re: autoupdate sequences after copy