Backup do Postgres

3

Eu tenho um script Bacula que faz um backup automático de um banco de dados Postgres. O script faz dois backups usando (pg_dump) da base de dados:

O esquema apenas e os dados apenas.

/usr/bin/pg_dump --format=c -s $dbname --file=$DUMPDIR/$dbname.schema.dump
/usr/bin/pg_dump --format=c -a $dbname --file=$DUMPDIR/$dbname.data.dump

O problema é que não consigo descobrir como restaurá-lo com o pg_restore.

Preciso criar o banco de dados e os usuários antes de restaurar o esquema e, finalmente, os dados.

Eu fiz o seguinte:

pg_restore  --format=c -s -C -d template1 xxx.schema.dump
pg_restore  --format=c -a -d xxx xxx.data.dump

Esta primeira restauração cria o banco de dados com tabelas emtpy, mas a segunda dá muitos erros como este:

pg_restore: [archiver (db)] COPY failed: ERROR:  insert or update on table "Table1" violates foreign key constraint "fkf6977a478dd41734"
DETAIL:  Key (contentid)=(1474566) is not present in table "Table23".

Alguma idéia?

    
por Abbass 18.03.2011 / 11:29

1 resposta

2

Você precisa de --disable-triggers ao executar restaurações somente de dados com o pg_restore. Normalmente, a restauração do esquema + dados cria os acionadores de integridade referencial depois que os dados são adicionados. Se você acabou de restaurar um esquema, os gatilhos serão criados sem dados na tabela, e o banco de dados espera que os dados adicionados depois disso sejam compatíveis com os gatilhos.

Desativar os acionadores exige que você use uma conta de superusuário do postgres para restaurar os dados.

    
por 18.03.2011 / 15:18

Tags