0

我创建了以下函数来创建外部服务器。该函数运行没有错误,但没有创建任何内容。这不是权利问题,因为我可以很好地运行各个命令并创建服务器。

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消息也会打印出来,因此代码正在运行。不,服务器尚未创建。

我不明白为什么这不会创建。

任何建议表示赞赏。

谢谢!

4

0 回答 0