Não tenho certeza se o seu SQL padrão:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
O que estou procurando é: e se tblA e tblB estiverem em diferentes servidores de banco de dados .
O PostgreSql fornece algum utilitário ou possui alguma funcionalidade que ajude a usar INSERT query with PGresult struct
Quero dizer, SELECT id, time FROM tblB ...
vai voltar a PGresult*
usar PQexec
. É possível usar essa estrutura em outra PQexec
para executar um comando INSERT.
Edição:
Se não for possível, então eu iria para extrair os valores de PQresult * e criar uma sintaxe de instrução INSERT múltipla como:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
É possível criar uma declaração preparada com isso !! :(
sql
postgresql
insert
dblink
Mayank
fonte
fonte
Respostas:
Como Henrik escreveu, você pode usar o dblink para conectar o banco de dados remoto e buscar o resultado. Por exemplo:
O PostgreSQL possui pseudo-tipo de registro (apenas para argumento da função ou tipo de resultado), o que permite consultar dados de outra tabela (desconhecida).
Editar:
Você pode fazê-lo como declaração preparada, se quiser, e também funciona:
Editar (sim, outro):
Acabei de ver sua pergunta revisada (fechada como duplicada ou muito parecida com isso).
Se meu entendimento estiver correto (o postgres possui tbla e dbtest tem tblb e você deseja inserir remotamente com seleção local , não selecionar remotamente com inserção local, como acima):
Eu não gosto desse dblink aninhado, mas AFAIK não posso me referir ao tblB no corpo dblink_exec . Use LIMIT para especificar as 20 principais linhas, mas acho que você precisa classificá-las usando a cláusula ORDER BY primeiro.
fonte
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Posso fazer uma declaração preparada com isso?Se você deseja inserir na coluna especificar:
fonte
Você pode usar o dblink para criar uma exibição resolvida em outro banco de dados. Esse banco de dados pode estar em outro servidor.
fonte
INSERT INTO ... (SELECT FROM ...)
vai funcionar usando o dblink. O que eu preciso éINSERT INTO ...
que seja executado na sessão dblink para outro DB Server, mas(SELECT FROM ...)
na minha sessão atual.Essa notação (vista aqui pela primeira vez ) também parece útil:
fonte
fonte
Aqui está uma solução alternativa, sem usar
dblink
.Suponha que B represente o banco de dados de origem e A represente o banco de dados de destino:
Copie a tabela do banco de dados de origem para o banco de dados de destino:
Abra o prompt do psql, conecte-se ao target_db e use um simples
insert
:No final, exclua a cópia da tabela de origem que você criou na tabela de destino .
fonte