我假设 dblink 函数没有回滚,但在下面的用例中是。
总结:Function1 是创建表的 dblink 调用。函数 2 调用函数 1。Function2 被定义为缺少 RETURNS 语句的 RETURNS 文本。在执行时,function2 执行 function1 然后返回 ERROR:Proccess reached end without return。
未创建来自 dblink 的表。有人有解释吗?
功能一:
CREATE OR REPLACE FUNCTION function1 (_user text,_pwd text)
RETURNS text
AS $BODY$
DECLARE
conn_string text;
BEGIN
conn_string := FORMAT('port = 5432 host=%1$s dbname=%2$s user=%3$s password=%4$s','host','db',_user,_mdp);
DROP TABLE IF EXISTS foo;
EXECUTE FORMAT('CREATE TABLE foo AS
(SELECT * FROM dblink(''%1$s'',''SELECT * FROM bar'')
AS t(id int, _text character varying, geom geometry(point)));',conn_string);
RETURN 'foo created';
END;
$BODY$;
功能2:
CREATE OR REPLACE FUNCTION function2(_user text,_pwd text)
RETURNS text
DECLARE
BEGIN
PERFORM function1(_user,_pwd);
END; -- END OF FUNCTION REACHED WITHOUT RETURN
$BODY$;
我知道 function2 不是一个工作函数。我不知道的是 function1(和里面的 dblink)被回滚了,我想知道为什么。