我不确定它的标准SQL:

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

我要找的是:what if tblA and tblB are in different DB Servers.

PostgreSql是否提供了任何实用程序或具有任何有助于使用INSERT query with PGresult struct的功能

我的意思是SELECT id, time FROM tblB ...在使用PQexec时会返回PGresult*.是否可以在另一个PQexec中使用此 struct 来执行INSERT命令.

编辑:

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy'); 

有没有可能从中创建一个准备好的语句!!:(

推荐答案

正如Henrik所写,您可以使用dblink连接远程数据库并获取结果.例如:

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有record个伪类型(仅用于函数的参数或结果类型),允许您从另一个(未知)表中查询数据.

编辑:

如果你愿意,你可以把它做成事先准备好的声明,而且它也很有效:

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;

编辑(是的,另一个):

我刚刚看到了你的revised question(以复制形式关闭,或者与此非常相似).

如果我的理解是正确的(postgres有tbla,dbtest有tblb,你想要remote insert with local select,而不是上面提到的remote select with local insert):

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;'
);

我不喜欢嵌套的dblink,但我不能引用dblink_exec body中的tblB.使用LIMIT指定前20行,但我认为首先需要使用orderby子句对它们进行排序.

Sql相关问答推荐

从snowflake中的表格中删除一个完全重复的副本

按CTE创建任务表

SUM(条件)在Oracle?

我可以将INSERT语句与SELECT一起使用来创建条件吗?

Stack Exchange站点上的最短帖子(按正文长度计算,用户名为原始发帖(SEDE))

是否可以为表中的所有列生成散列值?

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

Oracle PL/SQL:解决DBMS输出大小限制的问题

需要使用SQLite查询进行一些奇怪的时间转换

为什么左联接结果在MS Access数据库中不匹配

用另一个表中的特定名称替换 SQL 查询中的 ID.但我的两个表都有多个列

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

SQL - 只需要 GROUP BY SELECT 的一列

使用 regexp_replace 替换所有出现的特殊字符

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

如何从 2 个 SQLite 表构建嵌套对象?

交叉应用 OPENJSON / PIVOT - 错误的顺序