PostgreSQL, atualize as linhas existentes com o pg_restore

1

Eu preciso sincronizar dois bancos de dados PostgreSQL (algumas tabelas do banco de dados de desenvolvimento para o banco de dados de produção) às vezes.

Então eu criei este script:

[...]
pg_dump -a -F tar -t table1 -t table2 -U user1 dbname1 | \
pg_restore -a -U user2 -d dbname2
[...]

O problema é que isso funciona apenas para linhas recém-adicionadas. Quando eu edito a coluna não-PK, recebo um erro de restrição e a linha não é atualizada. Para cada linha despejada, preciso verificar se existe no banco de dados de destino (por PK) e, se for o caso, excluí-lo antes de INSERT / COPY.

Obrigado pelo seu conselho.

(Anteriormente postado em stackoverflow.com, mas IMHO este é o melhor lugar para esta pergunta).

    
por Dennis Williamson 27.11.2009 / 10:40

3 respostas

1

Prossiga para link .

    
por 05.01.2010 / 22:51
0

Em qualquer ambiente que eu tenha visto, isso geralmente não é feito tabela a tabela.

  • Existem várias possibilidades para qualquer linha: SELECT / INSERT / UPDATE / ALTER ... você precisaria cuidar de todas essas possibilidades.

  • As tabelas não são as únicas coisas que vivem dentro de bancos de dados, especialmente bancos de dados PostgreSQL. Seqüências, funções, agregados, visualizações, etc., podem possivelmente precisar ser copiados.

Se eu estivesse em sua situação, despejaria todo o banco de dados e o usaria para restaurar uma versão limpa.

pg_dump --clean --no-owner --no-privileges dbname ## other pg_dump / psql options
    
por 27.11.2009 / 11:04
0

Talvez usando dblink e inserindo apenas o que você precisa de um select?

http://www.postgresonline.com/journal/index.php?/archives/44-Using-DbLink-to-access-other-PostgreeSQL-Databases-and-Servers.html
http://www.postgresql.org/docs/current/static/dblink.html
    
por 02.12.2009 / 11:36