Tenho dois bancos de dados, vou precisar pegar dados mais recentes de uma tabela de banco de dados e colocar em outra tabela que está em outro banco de dados PostgresSQL em uma máquina diferente. A estrutura das tabelas é idêntica. Qual é a melhor maneira de fazer isso?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Usando dblink, você pode copiar registros de um servidor para outro. Eu instalei o dblink, usando este guia de instalação . Os bancos de dados são os mesmos e possuem a mesma tabela chamada sometable. Isso é semelhante a tabelas federadas no MySQL e openquery no SQL Server.
O servidor antigo está escutando na porta 5432 e o novo servidor está escutando na porta 5433. Instalei apenas o dblink no novo servidor. A extensão dblink foi adicionada apenas ao banco de dados de recebimento no novo servidor. No meu exemplo, não incluí o host porque os dois servidores postgresql estão na mesma máquina.
Aqui estão as etapas básicas que segui usando um 9.1 em um servidor CentOS 6
Instalar dblink
-- vá para o diretório postgresl_source. Se você instalou via yum ou apt-get terá que instalar os pacotes postgresql_source
-- instalar os binários do dblink
-- Conecte-se a 9.1 ouvindo em 5433
-- Conecte-se ao banco de dados que receberá os dados
-- Adicione a extensão dblink
-- Verifique se a extensão existe
Copie os dados para o novo servidor
Estou usando uma tabela de armazenamento temporário, porque facilitou o uso de uma instrução EXISTS ao copiar novos registros.
-- trunca a tabela de armazenamento temporário no novo servidor
-- copia os registros para a tabela de armazenamento temporário no novo servidor
Se o seu servidor estiver em um endereço IP diferente, você executaria isso
-- Copiar apenas novos registros para a nova sometable
Se eu executar as mesmas consultas novamente, apenas novos registros serão copiados. Isso ocorre porque a subconsulta correlacionada (selecione * de alguma tabela st onde st.t = st2.t) recupera apenas registros que ainda não existem na tabela " sometable" no novo servidor.