Answers:
\df+
在psql中提供了源代码。
\df
查找功能的名称,然后\x
扩展输出,然后\df+ name_of_function
\x ON
是转置显示的
对于功能:
您可以查询pg_proc视图,如下所示
select proname,prosrc from pg_proc where proname= your_function_name;
另一种方法是只执行公共区域\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 =>从pg_trigger中选择tgrelid,其中tgname ='insert_tbl_tmp_trigger'; 翠格利德 --------- 26599 (1列)
skytf =>从pg_class中选择oid,relname,其中oid = 26599; oid | 相对名称 ------- + ----------------------------- 26599 | tbl_tmp (1列)
skytf => \ d tbl_tmp
它将向您显示表触发器的详细信息。通常,触发器使用功能。因此,您可以获取触发函数的源代码,就像我上面指出的那样!
以下是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$
\x
first来打开扩展显示还有助于提高可读性。
有很多可能性。最简单的方法是只使用pgAdmin并从SQL窗口获取它。但是,如果您想以编程方式获取此信息,请进行检查pg_proc
信息,则可以从信息模式中和查看pg_trigger
系统目录或视图(这是SQL标准方法,但可能无法涵盖所有功能,尤其是PostgreSQL特定的功能)。例如:routines
triggers
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
SELECT view_definition FROM information_schema.views WHERE table_schema = ? AND table_name = ?
pgproc.prosrc
列
除了仅显示功能外,还需要如何获得就地编辑功能。
\ef <function_name>
非常方便。它将以可编辑的格式打开该函数的源代码。您不仅可以查看它,还可以编辑和执行它。
只是\ef
不FUNCTION_NAME将打开编辑CREATE函数模板。
有关更多参考-> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
psql中的function_name产生单个函数的可编辑源代码。
从https://www.postgresql.org/docs/9.6/static/app-psql.html:
\ sf [+] function_description此命令以CREATE OR REPLACE FUNCTION命令的形式获取并显示命名函数的定义。
如果在命令名后附加+,则对输出行进行编号,功能主体的第一行为行1。
除了@franc的答案,您还可以从sql接口使用它:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(摘自此处:http : //www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.20.23-13-100000@megazone23.bigpanda.com)
从版本开始: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似乎不适合我。
select * from pg_trigger;
或者,如果你也想看到每个触发器应用于哪个表select tgrelid::regclass, tgname from pg_trigger;
FWIW`