gpt4 book ai didi

database - Postgresql:存储函数中的 dblink

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:33 25 4
gpt4 key购买 nike

我想将 db_A 中表 tbl_A 的前 20 行插入到 db_B 中的 tbl_B。
tbl_A 和 tbl_B 的模式是:

CREATE TABLE <tbl_name> (
id serial PRIMARY KEY,
int a,
int b
);

我有一些与以下查询相关的问题

psql db_A
SELECT dblink_connect("dbname=db_B");
SELECT dblink_open('curse', 'SELECT id, a, b FROM tbl_B');
INSERT INTO tbl_A (SELECT id, a, b FROM dblink_fetch('curse', 20) AS (s_is int, s_a int, s_b int)) RETURNING a;
  • 我能否将以下语句放入存储过程中:
  • 是否可以结合上述三个语句创建一个存储过程,并为该过程创建一个准备好的语句。

如果有人可以评论使用游标或在存储过程中使用 dblink 或任何其他更优雅地实现上述方法的实践有多好,我将不胜感激。

最佳答案

还有更简单的方法:

连接到 db_B 并执行以下操作:

CREATE OR REPLACE FUNCTION dblink(text, text)
RETURNS SETOF record AS
'$libdir/dblink', 'dblink_record'
LANGUAGE 'c' VOLATILE STRICT
COST 1
ROWS 1000;
ALTER FUNCTION dblink(text, text) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION dblink(text, text) TO public; -- or whatever

INSERT INTO tbl_B select * from
(SELECT * from dblink('hostaddr=localhost port=5432 dbname=db_A user=postgres password=postgres',
'select id, a, b from tbl_A limit 20 '
)
t(
id integer,
a integer,
b integer
)) as q;

关于database - Postgresql:存储函数中的 dblink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com