postgresql: INSERT INTO … (SELECT * …)

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 serveres 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 command INSERTAR?

EDITAR:
Si no fuera posible, obtendría los valores de PQresult * y crearía una syntax de sentencia 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 statement preparada a partir de esto? 🙁

Como escribió Henrik, puede usar dblink para conectar una database remota y get 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 logging (solo para el argumento de la function o tipo de resultado), que le permite consultar datos de otra tabla (desconocida).

Editar:

Puede hacerlo como una statement 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, select con inserción local como se indicó anteriormente):

 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 reference a tblB en el cuerpo dblink_exec . Use LIMIT para especificar las 20 filas principales, pero creo que primero debe orderarlas usando la cláusula ORDER BY.

Si desea insertlo 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 ); 

Puede usar dblink para crear una vista que se resuelva en otra database. Esta database puede estar en otro server.