我已经创建了下面的功能来创建外部服务器。该函数运行没有错误,但未创建任何内容。这不是权限问题,因为我可以很好地运行各个命令并创建服务器。
CREATE OR REPLACE FUNCTION sch.helper_create_linked_server(servername text, host text, port text, dbname text, localuser text, remoteuser text, password text, timeout text)
RETURNS void
LANGUAGE plpgsql
AS $function$
declare srv_name text;
tmp text;
begin
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
CREATE EXTENSION IF NOT EXISTS dblink;
execute format($s$ select srvname from pg_foreign_server where srvname = %L $s$, servername) into srv_name;
if srv_name is null then
execute format($ex$
CREATE SERVER %1$I
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host %2$L, port %3$L, dbname %4$L, connect_timeout %5$L);
$ex$, servername, host, port, dbname, timeout, remoteuser);
raise info 'server created: %', servername;
execute format($ex$
create user mapping for %I
server %I
options (user %L, password %L)
$ex$, localuser, servername, remoteuser, password);
raise info '%', 'umapping created';
perform format($$ ALTER SERVER %1$I OWNER TO %2$I $$, servername, remoteuser);
raise info '%', 'assigned user to server';
end if;
end $function$
我已打印出生成的命令,它是正确的。这就是我调用该函数的方式:
perform sch.helper_create_linked_server(link_name, conn_props->>'endpoint', conn_props->>'port', conn_props->>'db', conn_props->>'user', conn_props->>'user', rs_pwd, conn_props->>'timeout');
此外,所有raise info
消息也会被打印,因此代码正在运行。不,服务器尚未创建。
我看不到为什么它不会创建。
任何建议表示赞赏。
谢谢!