Обсуждение: Problem using pg_restore with -a option

Поиск
Список
Период
Сортировка

Problem using pg_restore with -a option

От
Luís Sousa
Дата:
Hi all,

I'm using PostgreSQL 7.4.7-6sarge2 (debian)

Using the schema below, doing a pg_dump -Fc, delete all data, and a
pg_restore -a, the sequence of inserting data isn't correct issuing an
error.
Could this be a bug?

Notice that on schema, table periodo depends on tipo, but the sequence
is table periodo, then table  tipo and after table periodo is changed to
reference tipo.

My schema file:
drop table periodo cascade ;
drop table tipo cascade ;

create table periodo (
  "idPeriodo"               serial not null,
  "idTipo"                  int4,
  designacao                varchar(50),
  constraint pk_Periodo primary key ("idPeriodo")
) ;

create table tipo (
  "idTipo"                  serial not null,
  tipo                      varchar(5),
  designacao                varchar(50),
  constraint pk_Tipo primary key ("idTipo")
) ;

alter table periodo add constraint fk_tipo
  foreign key ("idTipo")
  references tipo ("idTipo")  ;

My data on tables:
INSERT INTO tipo (tipo,designacao) VALUES ('T','Type');
INSERT INTO periodo ("idTipo",designacao) VALUES (1,'periodo');

Error:
pg_restore: ERROR:  insert or update on table "periodo" violates foreign
key constraint "fk_tipo"
DETAIL:  Key (idTipo)=(1) is not present in table "tipo".

Best regards,
Luís Sousa



Re: Problem using pg_restore with -a option

От
Alvaro Herrera
Дата:
Luís Sousa wrote:
> Hi all,
>
> I'm using PostgreSQL 7.4.7-6sarge2 (debian)
>
> Using the schema below, doing a pg_dump -Fc, delete all data, and a
> pg_restore -a, the sequence of inserting data isn't correct issuing an
> error.
> Could this be a bug?

Not a bug -- rather a known deficiency.  pg_dump 8.0 and beyond knows
how to sort stuff so that these problems do not occur, but 7.4 doesn't.

The typical workaround was to use pg_restore -l/-L to generate the list
of objects to restore and sort them appropiately, then do the actual
restore.

--
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

Re: Problem using pg_restore with -a option

От
Tom Lane
Дата:
=?ISO-8859-1?Q?Lu=EDs_Sousa?= <llsousa@ualg.pt> writes:
> Using the schema below, doing a pg_dump -Fc, delete all data, and a
> pg_restore -a, the sequence of inserting data isn't correct issuing an
> error.

Data-only restores make no attempt to avoid foreign-key constraint
problems --- in general there is no solution, since you could have
circular constraints.

You could drop and re-add the FK constraints, or if you trust that the
data is valid there's the --disable-triggers option to suppress FK
constraint checking.

            regards, tom lane