如何在postgresql中获取COMPLETE函数定义脚本?

时间:2018-02-08 22:46:36

标签: postgresql function

我正在尝试获取函数的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;

搜索周围并没有找到太多。我怎样才能得到这个结果?

2 个答案:

答案 0 :(得分:1)

使用SQL:

 select pg_catalog.pg_get_functiondef('my_func(date)'::regprocedure::oid);

Doc

请注意,如果指定参数列表,则应使用regprocedure类型;如果仅指定函数名称,则应使用regproc类型(如'my_func'::regproc::oid

使用命令行psql\sf元命令:

  

此命令以CREATE OR REPLACE FUNCTION命令的形式获取并显示指定函数的定义。该定义将打印到当前查询输出通道,由\ o。

设置      

目标函数可以单独通过名称指定,也可以通过名称和参数指定,例如foo(整数,文本)。如果有多个同名函数,则必须给出参数类型。

来自documentation

例如:

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);