Ir para conteúdo
Fórum Script Brasil
  • 0

Copiar dados de uma tabela do banco A para uma tabela do Banco B


mkto

Pergunta

Olá amigos.

Estou com uma dúvida extremamente pertinente. Já consegui resolver no MySQL mas como estou usando postgreSQL, não sei com se faz ainda. Bom, vamos lá.

Eu tenho uma tabela chamada "noticia" em um banco A, preciso pegar os dados dessa tabela e passar para a tabela publicação do Banco B.

Estou usando para execução query o PgAdmin.

no MySQL eu faço assim.

insert into bancoB.publicacao(campo1,campo2,campo3,campo4)
   select campo1,campo2,campo3,"dado fixo" from bancoA.noticia;

No postgreSQL ele não consegue identificar qual o bancoB e qual o BancoA.

Alguém sabe como posso fazer? Isso é uma limitação do PgAdmin? se for, qual ferramenta eu poderia usar para executar esse tipo de SQL?

Abraços. Grato

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Se os 2 bancos forem no Postgresql, você tem de usar o schema para identifica-los

tipo assim:

insert into public.bancoB.publicacao (
select
campo1,
campo3,
campo3
from
public.bancoA.noticia
)

não sei se a sintaxe ta certa, no que se refere aos () mas sei que é assim que eu faço. é q to sem nenhum exemplo aqui agora.

mas você precisa usar o schema para identificar o banco. Se você não criou nenhum schema, você vai usar o padrão que é public.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta Dr. House.

Não era bem assim que funcionava mas ajudou a sair do problema que estava tendo.

Vou resumir um pouco de como eu resolvi o problema.

Eu estava fazendo assim:

insert into public.bancoB.publicacao(campo1,campo2,campo3,campo4)
     select campo1,campo2,campo3,"dado fixo" from public.bancoA.noticia;

Estava saindo o seguinte erro: referências cruzadas entre bancos de dados não estão implementadas.

Pesquisando sobre o erro achei em outro fórum que deveria usar o bdlink para trazer informações de outra tabela de outro banco.

Correndo atrás desse dblink achei o script nesse site

Executei o script que possui as funções do dblink dentro do banco.

Em seguida criei um "referência" com as informações do banco que queria trazer as informações da seguinte maneira:

SELECT dblink_connect('antigo','host=localhost port=5432 user=postgres dbname=antigo');

Usando a referência "antigo" fiz o insert na nova tabela do banco novo, da seguinte maneira:

insert into tabela1(campo1,campo2,campo3)
SELECT *
    FROM dblink('antigo', 'select campo1,campo2,campo3 from tabela02')
      AS nova_tabela( campo1 bigint,
        campo2 character varying,
        campo3 )

Sendo assim, defino este tópico como resolvido. Espero que seja útil para outras pessoas.
Até +

Editado por mkto
Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

Tomando como referência esse sql que funciona. 

insert into tabela1(campo1,campo2,campo3)
SELECT *
    FROM dblink('antigo', 'select campo1,campo2,campo3 from tabela02')
      AS nova_tabela( campo1 bigint,
        campo2 character varying,
        campo3 )

 

Mas tenho um problema, isso funciona se na tabela de destino estiver vazia. Mas vamos supor que eu executei e atualizei a tabela de destino, no caso depois a tabela origem vai continuar sendo atualizada. Se eu for rodar de novo essa query vai dar erro porque além de pegar os novos vai pegar os dados antigos e vai dar erro de primary key.

 

Qual seria a ideia em cima da query citada modificar para apenas inserir os dados que tiverem diferentes?

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Para não ter problema com chave primária, o select q irá buscar os dados q querem inserir, terá q ter um where q os exclua.

Ex: WHERE data >= now() - interval '7 days' assim ele iria trazer dados de 1 semana ou mais recente.

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...