我正在尝试获取函数的FULL定义文本,但每个人都建议的查询返回函数脚本而没有页眉和页脚部分。
以下是我正在使用的内容:
select prosrc from pg_proc where proname='my_func';
这是返回的内容:
DECLARE
some_var1 TEXT;
some_var2 TEXT;
Status character varying;
BEGIN
--SCRIPT CODE HERE
RETURN retval;
END;
但我想要的是:
CREATE OR REPLACE FUNCTION my_func(logdate_utc date)
RETURNS character varying
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
some_var1 TEXT;
some_var2 TEXT;
Status character varying;
BEGIN
--SCRIPT CODE HERE
RETURN retval;
END;
$BODY$;
ALTER FUNCTION my_func(date)
OWNER TO some_owner;
搜索周围并没有找到太多。我怎样才能得到这个结果?
答案 0 :(得分:1)
使用SQL:
select pg_catalog.pg_get_functiondef('my_func(date)'::regprocedure::oid);
请注意,如果指定参数列表,则应使用regprocedure
类型;如果仅指定函数名称,则应使用regproc
类型(如'my_func'::regproc::oid
)
使用命令行psql
和\sf
元命令:
此命令以CREATE OR REPLACE FUNCTION命令的形式获取并显示指定函数的定义。该定义将打印到当前查询输出通道,由\ o。
设置目标函数可以单独通过名称指定,也可以通过名称和参数指定,例如foo(整数,文本)。如果有多个同名函数,则必须给出参数类型。
例如:
psql -c '\sf my_func(date)'
要检索函数的所有者名称,您可以使用下一个查询:
select proowner::regrole
from pg_proc
where oid = 'my_func(date)'::regprocedure;
答案 1 :(得分:1)
使用pg_get_functiondef(func_oid)
:
SELECT pg_get_functiondef('my_func'::regproc);