我不确定它的标准SQL:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
我正在寻找的是:如果tblA和tblB在不同的数据库服务器中怎么办。
PostgreSql是否提供了任何有助于使用INSERT query with PGresult struct
的实用程序或功能
我的意思是,在使用PQexec
时,SELECT id, time FROM tblB ...
会返回一个PGresult*
。是否可以在另一个PQexec
中使用此结构来执行插入命令。
编辑:
如果不可能,我会从PQresult*中提取值,并创建一个多插入语句语法,如下所示:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
有没有可能用它来创建预准备语句!!:(
发布于 2011-05-22 01:53:40
正如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,而您希望使用local select的remote insert,而不是如上所述使用local insert的remote select ):
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行,但我认为您需要首先使用ORDER BY子句对它们进行排序。
发布于 2015-02-02 21:08:07
如果要插入到指定列中:
INSERT INTO table (time)
(SELECT time FROM
dblink('dbname=dbtest', 'SELECT time FROM tblB') AS t(time integer)
WHERE time > 1000
);
发布于 2018-02-07 08:16:51
这个符号(首先看到的是here)看起来也很有用:
insert into postagem (
resumopostagem,
textopostagem,
dtliberacaopostagem,
idmediaimgpostagem,
idcatolico,
idminisermao,
idtipopostagem
) select
resumominisermao,
textominisermao,
diaminisermao,
idmediaimgminisermao,
idcatolico ,
idminisermao,
1
from
minisermao
https://stackoverflow.com/questions/6083132
复制相似问题