Supondo que suas tabelas de interesse tenham (ou possam ser aumentadas com) uma chave sequencial, indexada e exclusiva, você obterá um valor muito melhor simplesmente emitindo
SELECT ... FROM table ... WHERE key > :last_max_key
com saída para um arquivo, onde last_max_key
é o último valor de chave da última extração (0 se for a primeira extração.) Essa abordagem incremental e desacoplada evita introduzindo latência de gatilho no caminho de dados de inserção (seja gatilhos personalizados ou Slony modificado) e, dependendo da sua configuração, pode ser melhor dimensionado com o número de CPUs etc. (No entanto, se você também precisar rastrear UPDATE
s , e a chave sequencial foi adicionada por você, então seu UPDATE
instruções devem SET
a coluna de chave para NULL
então ele recebe um novo valor e é escolhido pela próxima extração. Você não poderá acompanhar DELETE
s sem um gatilho.) É isso que você tinha em mente quando mencionou Talend? Eu não usaria o recurso de registro, a menos que você não possa implementar a solução acima; o registro provavelmente envolve bloqueio de sobrecarga para garantir que as linhas de log sejam gravadas sequencialmente e não se sobreponham/substituam quando vários back-ends gravarem no log (verifique a fonte do Postgres.) A sobrecarga de bloqueio pode não ser catastrófica, mas você pode ficar sem ela se puder usar o incremental
SELECT
alternativo. Além disso, o registro de declarações abafaria qualquer mensagem de AVISO ou ERRO útil, e a análise em si não será instantânea . A menos que você esteja disposto a analisar WALs (incluindo rastreamento de estado de transação e estar pronto para reescrever o código toda vez que atualizar o Postgres), eu não usaria necessariamente os WALs - isto é, a menos que você tenha o hardware extra disponível , caso em que você pode enviar WALs para outra máquina para extração (na segunda máquina você pode usar gatilhos descaradamente -- ou mesmo registro de declaração -- já que o que quer que aconteça não afeta
INSERT
/UPDATE
/DELETE
desempenho na máquina primária). para uma máquina diferente a partir da execução do SELECT
incremental .