You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中dynamic dblink创建连接后断开提示不存在如何解决

问题根因

你编写的代码中,perform format('select dblink_connect(''toto'', ''port=%s dbname=%s'')', port, dbname) 仅会生成包含dblink_connect语句的字符串,并不会执行字符串内部的SQL逻辑,因此dblink_connect从未实际运行,不存在名为toto的连接,断开操作自然会报错。

修复方案

将perform format(...)替换为execute语句执行动态生成的SQL即可,完整可运行代码如下:

do $$
declare 
port int;
dbname varchar;
begin
    select current_database() into dbname;
    select setting into port from pg_catalog.pg_settings where name = 'port';
    execute format ('select dblink_connect(''toto'', ''port=%s dbname=%s'')', port, dbname);
    perform dblink_disconnect('toto');
end $$;

优化建议

可以使用PostgreSQL的美元符引用特性避免多层单引号转义,降低代码出错概率:

do $$
declare 
port int;
dbname varchar;
begin
    select current_database() into dbname;
    select setting into port from pg_catalog.pg_settings where name = 'port';
    execute format(
        $sql$
        select dblink_connect('toto', 'port=%s dbname=%s')
        $sql$,
        port,
        dbname
    );
    perform dblink_disconnect('toto');
end $$;

如果运行仍报错,可先执行以下语句确认dblink扩展已安装:
CREATE EXTENSION IF NOT EXISTS dblink;

内容的提问来源于stack exchange,提问作者MattRgx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:08