>>>>> "Roberto" == Roberto Mello <[email protected]> writes:
Roberto> A menos que seu banco de dados não tenha nenhuma chave
Roberto> estrangeira ou restrição, e se você não quiser dados
Roberto> repetidos, vai ter que usar um pouco mais de inteligência
Roberto> no seu processo se quiser fazer uma cópia incremental
Roberto> assim. Só com COPY direto não vai dar, a não ser que você
Roberto> apague tudo do de produção a cada nova rodada.
Roberto> Provavelmente um programa que, sabendo dos nomes de todas
Roberto> as tabelas, e sabendo identificar os últimos registros,
Roberto> leiam e enviem para o de produção.
Depende bastante da modelagem, se você fizer uma abordagem temporal, um
COPY serve. Uma forma simples para ilustrar o conceito é associar um
campo representando a data de criação de cada registro, a data passa a
fazer parte da chave primária e você passa a usar sempre usar INSERT
invés de UPDATE no banco de desenvolvimento. Para atualizar o banco de
produção, basta copiar todos os registros criados após a data da última
atualização do banco de produção, que você consegue obter com um
SELECT max(data) FROM tabela_prod;
Isso é claro, vai resultar numa explosão de registros e tabelas bastante
volumosas. Pra resolver isso, você pode particionar a tabela por data,
caso o espaço não seja problema. Outra alternativa é usar uma abordagem
de arquivo morto pra apagar os registros que não sejam os mais recentes
periodicamente, algo como:
DELETE FROM tabela_prod
USING (SELECT MAX(data) AS data,
id
FROM tabela_prod
GROUP BY id) recent
WHERE tabela_prod.id = recent.id
AND tabela_prod.data != recent.data;
Que deve rodar num tempo aceitável sem fazer lock nos registros mais
recentes. Claro que acrescentar um campo data em todas as tabelas tem
implicações de complexidade, a depender da modelagem. Pode ser que fique
complexo demais e valha a pena usar outra abordagem.
--
Eden Cardim Need help with your perl Catalyst or DBIx::Class
project?
Software Engineer http://www.shadowcat.co.uk/catalyst/
Shadowcat Systems Ltd. Want a managed development or deployment
platform?
http://blog.edencardim.com http://www.shadowcat.co.uk/servers/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral