如何在postgresql中打印函数并触发源代码?如果有人知道查询显示功能,请告诉我,触发源代码。
答案 0 :(得分:126)
\df+
为您提供源代码。
答案 1 :(得分:114)
功能:
您可以查询pg_proc视图,如下所示
select proname,prosrc from pg_proc where proname= your_function_name;
另一种方法是只执行可以列出函数的commont \df
和\ef
。
skytf=> \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+----------------------+------------------+------------------------------------------------+--------
public | pg_buffercache_pages | SETOF record | | normal
skytf=> \ef pg_buffercache_pages
它将显示该函数的源代码。
对于触发器:
我不知道是否有直接获取源代码的方法。只要知道以下方式,可能会对你有帮助!
skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 row)
skytf=> select oid,relname from pg_class where oid=26599; oid | relname -------+----------------------------- 26599 | tbl_tmp (1 row)
skytf=> \d tbl_tmp
它将显示表格触发器的详细信息。通常触发器使用函数。所以你可以像上面提到的那样获得触发函数的源代码!
答案 2 :(得分:25)
以下是PostgreSQL-9.5的几个例子
显示列表:
\df+
\dy+
显示定义:
postgres=# \sf
function name is required
postgres=# \sf pg_reload_conf()
CREATE OR REPLACE FUNCTION pg_catalog.pg_reload_conf()
RETURNS boolean
LANGUAGE internal
STRICT
AS $function$pg_reload_conf$function$
postgres=# \sf pg_encoding_to_char
CREATE OR REPLACE FUNCTION pg_catalog.pg_encoding_to_char(integer)
RETURNS name
LANGUAGE internal
STABLE STRICT
AS $function$PG_encoding_to_char$function$
答案 3 :(得分:19)
有很多种可能性。最简单的方法是使用pgAdmin并从SQL窗口获取。但是,如果您希望以编程方式获取此信息,请从信息架构(这是SQL标准方式)检查pg_proc
和pg_trigger
系统目录或routines
和triggers
视图,但它可能不会涵盖所有功能,尤其是PostgreSQL特有的)。例如:
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
答案 4 :(得分:10)
稍微不仅仅是显示功能,如何获得编辑就地设施。
\ef <function_name>
非常方便。它将以可编辑格式打开函数的源代码。
您不仅可以查看它,还可以编辑和执行它。
只有\ef
没有function_name将打开可编辑的CREATE FUNCTION模板。
供进一步参考 - &gt; https://www.postgresql.org/docs/9.6/static/app-psql.html
答案 5 :(得分:7)
除了@ franc的答案,你可以在sql界面中使用它:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
答案 6 :(得分:6)
\sf
function_name产生单个函数的可编辑源代码。
来自https://www.postgresql.org/docs/9.6/static/app-psql.html:
\ sf [+] function_description 此命令以CREATE OR REPLACE FUNCTION命令的形式获取并显示命名函数的定义。
如果+被附加到命令名称,则输出行被编号,函数体的第一行是第1行。
答案 7 :(得分:2)
从版本开始:psql(9.6.17,服务器11.6)
我尝试了以上所有答案,但对我来说
postgres=> \sf jsonb_extract_path_text
CREATE OR REPLACE FUNCTION pg_catalog.jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])
RETURNS text
LANGUAGE internal
IMMUTABLE PARALLEL SAFE STRICT
AS $function$jsonb_extract_path_text$function$
postgres=> \df+
ERROR: column p.proisagg does not exist
LINE 6: WHEN p.proisagg THEN 'agg'
^
HINT: Perhaps you meant to reference the column "p.prolang".
df似乎不适合我。