Thread: problem with foreign keys + data-only backup

problem with foreign keys + data-only backup

From
Peter Billen
Date:
Hi all,

I have a problem with foreign keys and data-only (no schema) backup. I
have a simple table node (pseudo-SQL):

node
(
    integer node_id            NOT NULL    PRIMARY KEY;
    integer parent_node_id     NULL;
)

It contains the following two entries:

node(1, NULL)      the rood
node(2, 1)         a child of the root

When I do a data-only backup, the backup file contains following two lines:

INSERT INTO NODE (node_id, parent_node_id) VALUES (2, 1);
INSERT INTO NODE (node_id, parent_node_id) VALUES (1, NULL);

Restoring the backup file into another database ofcourse fails, because
the parent_node_id (1) in the first INSERT statement refers to an
unknown (to be added) node (in the second statement).

How do I make sure my backup orders the insert statements in a logical
order?

This is how I make the backup:

pg_dump.exe -h ... -p 5432 -U ... --column-inserts --ignore-version
--file=dump --format=t --data-only --verbose db

This is how I import the backup:

pg_restore.exe -h .... -p 5432 -U ... --dbname db --format=t --verbose
--table=channel dump

Thanks all. Kind regards,

Peter

Re: problem with foreign keys + data-only backup

From
Richard Huxton
Date:
Peter Billen wrote:
> Hi all,
>
> I have a problem with foreign keys and data-only (no schema) backup. I
> have a simple table node (pseudo-SQL):

> When I do a data-only backup, the backup file contains following two lines:
>
> INSERT INTO NODE (node_id, parent_node_id) VALUES (2, 1);
> INSERT INTO NODE (node_id, parent_node_id) VALUES (1, NULL);
>
> Restoring the backup file into another database ofcourse fails, because
> the parent_node_id (1) in the first INSERT statement refers to an
> unknown (to be added) node (in the second statement).
>
> How do I make sure my backup orders the insert statements in a logical
> order?

You don't. You might find --disable-triggers useful though. See the
pg_restore documentation for details.

--
  Richard Huxton
  Archonet Ltd

Re: problem with foreign keys + data-only backup

From
Markus Mehrwald
Date:
Hi,

I do not think this will work. As far as I know foreign key checks are
not triggers. Postgres is very strict with things concerning referential
integrity so you cannot turn them off.

Maybe it will help to use "--orig-order" for creating the dump.

Markus


Richard Huxton schrieb:
> Peter Billen wrote:
>> Hi all,
>>
>> I have a problem with foreign keys and data-only (no schema) backup. I
>> have a simple table node (pseudo-SQL):
>
>> When I do a data-only backup, the backup file contains following two lines:
>>
>> INSERT INTO NODE (node_id, parent_node_id) VALUES (2, 1);
>> INSERT INTO NODE (node_id, parent_node_id) VALUES (1, NULL);
>>
>> Restoring the backup file into another database ofcourse fails, because
>> the parent_node_id (1) in the first INSERT statement refers to an
>> unknown (to be added) node (in the second statement).
>>
>> How do I make sure my backup orders the insert statements in a logical
>> order?
>
> You don't. You might find --disable-triggers useful though. See the
> pg_restore documentation for details.
>

--
Dipl.-Inform. Med. Markus Mehrwald
Institut für Prozessrechentechnik, Automation und Robotik
Medizin-Gruppe
Universität Karlsruhe (TH)
Gebäude 40.28, Zimmer 110
Engler-Bunte-Ring 8
76131 Karlsruhe

Fon: +49 (721) 608-7113
Fax: +49 (721) 608-7141

Re: problem with foreign keys + data-only backup

From
Alvaro Herrera
Date:
Markus Mehrwald wrote:
> Hi,
>
> I do not think this will work. As far as I know foreign key checks are
> not triggers. Postgres is very strict with things concerning referential
> integrity so you cannot turn them off.

Actually you are mistaken -- FKs are triggers, and you can turn them
off.

There is a reason data-only backups are not recommended.



--
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support