>>>>> "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

Responder a