在 pgAdminIII 中,我创建了一个函数,该函数使用 RETURN TABLE 在名为标识符的单个列中返回多行:
CREATE OR REPLACE FUNCTION test(
IN parm1 date,
IN parm2 interval)
RETURNS TABLE(identifier INT)
AS
$BODY$
BEGIN
RETURN QUERY
SELECT 1;
END;
$BODY$
LANGUAGE plpgsql;
创建函数后,pgAdminIII 显示该函数具有以下定义:
CREATE OR REPLACE FUNCTION test(IN parm1 date, IN parm2 interval)
RETURNS SETOF integer AS
$BODY$
BEGIN
RETURN QUERY
SELECT 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
执行函数时,它遵循RETURNS TABLE
. 但是,在编辑函数时,它会拾取RETURNS SETOF
. 这提供了与我指定的功能不同的功能(例如,返回的列的名称不再存在)。
那么,如何强制 pgAdminIII 保留返回的列名identifier
?我并不特别关心我是否将其定义为 aTABLE
或SETOF
.
您看到的显然是当前 pgAdmin 1.20 中的一个显示错误。我可以重现它。
您必须知道,您看到的代码是从系统表条目重新设计的。
如果您直接在系统目录中查找您的函数,您会发现您的返回类型已正确注册(至少它在 pg 9.4 中对我有效):
更多有用的功能,如
pg_get_functiondef()
手册中的。您可能想在 pgAdmin 支持列表上提出这个要求:
http://www.postgresql.org/list/pgadmin-support/
邮件到 [email protected]
你的方法
RETURNS TABLE(identifier int)
是正确的方法。RETURNS SETOF
不采用参数名称,除非您将其与OUT
参数结合使用。像这样: