with then postgres link into ejemplo data sql postgresql insert

link - postgresql select then insert



postgresql: INSERT INTO...(SELECT*...) (4)

Como escribió Henrik, puede usar dblink para conectar una base de datos remota y obtener resultados. Por ejemplo:

psql dbtest CREATE TABLE tblB (id serial, time integer); INSERT INTO tblB (time) VALUES (5000), (2000); psql postgres CREATE TABLE tblA (id serial, time integer); INSERT INTO tblA SELECT id, time FROM dblink(''dbname=dbtest'', ''SELECT id, time FROM tblB'') AS t(id integer, time integer) WHERE time > 1000; TABLE tblA; id | time ----+------ 1 | 5000 2 | 2000 (2 rows)

PostgreSQL tiene pseudo-tipo de record (solo para el argumento de la función o tipo de resultado), que le permite consultar datos de otra tabla (desconocida).

Editar:

Puede hacerlo como una declaración preparada si lo desea y también funciona:

PREPARE migrate_data (integer) AS INSERT INTO tblA SELECT id, time FROM dblink(''dbname=dbtest'', ''SELECT id, time FROM tblB'') AS t(id integer, time integer) WHERE time > $1; EXECUTE migrate_data(1000); -- DEALLOCATE migrate_data;

Editar (sí, otro):

Acabo de ver su pregunta revisada (cerrada como duplicada, o simplemente muy similar a esto).

Si mi comprensión es correcta (postgres tiene tbla y dbtest tiene tblb y desea inserción remota con selección local , no remota, seleccione con inserción local como arriba):

psql dbtest SELECT dblink_exec ( ''dbname=postgres'', ''INSERT INTO tbla SELECT id, time FROM dblink ( ''''dbname=dbtest'''', ''''SELECT id, time FROM tblb'''' ) AS t(id integer, time integer) WHERE time > 1000;'' );

No me gusta ese nbl nbl, pero AFAIK no puedo hacer referencia a tblB en el cuerpo dblink_exec . Use LIMIT para especificar las 20 filas principales, pero creo que primero debe ordenarlas usando la cláusula ORDER BY.

No estoy seguro si su SQL estándar:

INSERT INTO tblA (SELECT id, time FROM tblB WHERE time > 1000)

Lo que estoy buscando es: ¿qué pasa si tblA y tblB están en diferentes servidores de bases de datos ?

¿PostgreSql ofrece alguna utilidad o tiene alguna funcionalidad que ayude a utilizar la INSERT query with PGresult struct

Me refiero a SELECT id, time FROM tblB ... devolverá un PGresult* al usar PQexec . ¿Es posible usar esta estructura en otro PQexec para ejecutar un comando INSERTAR?

EDITAR:
Si no fuera posible, obtendría los valores de PQresult * y crearía una sintaxis de instrucción INSERT múltiple 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'');

¿Es posible crear una declaración preparada a partir de esto? :(


Esta notación (vista por primera vez here ) también es útil:

insert into postagem ( resumopostagem, textopostagem, dtliberacaopostagem, idmediaimgpostagem, idcatolico, idminisermao, idtipopostagem ) select resumominisermao, textominisermao, diaminisermao, idmediaimgminisermao, idcatolico , idminisermao, 1 from minisermao


Puede usar dblink para crear una vista que se resuelva en otra base de datos. Esta base de datos puede estar en otro servidor.


Si desea insertarlo en la columna de especificar:

INSERT INTO table (time) (SELECT time FROM dblink(''dbname=dbtest'', ''SELECT time FROM tblB'') AS t(time integer) WHERE time > 1000 );