如何在postgresql中显示函数,过程,触发源代码?

如何在postgresql中打印函数和触发源代码? 请让我知道是否有人知道查询显示function,触发源代码。

psql中的 \df+为您提供源代码。

对于function:

您可以查询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 

它将显示该函数的源代码。

触发器:

我不知道是否有直接的方式来获取源代码。 只要知道以下的方式,可能会帮助你!

  • 第1步:获取触发器的表格oid:
     skytf =>从pg_trigger中selecttgrelid,其中tgname ='insert_tbl_tmp_trigger';
       tgrelid
     ---------
        26599
     (1排)
  • 第2步:获取上述oid的表名!
     skytf => select oid,来自pg_class的relname,其中oid = 26599;
       oid |  relname           
     ------- + -----------------------------
      26599 |  tbl_tmp
     (1排)
  • 第3步:列出表格信息
     skytf => \ d tbl_tmp

它会告诉你表的触发器的细节。 通常一个触发器使用一个函数。 所以你可以得到触发函数的源代码就像我指出的那样!

有很多可能性。 最简单的方法就是使用pgAdmin并从SQL窗口中获取。 但是,如果你想以编程方式获得这个信息,那么检查pg_procpg_trigger系统目录或routines并从信息模式triggers视图(这是SQL标准方式,但可能不包括所有function,尤其是PostgreSQL特有的)。 例如:

 SELECT routine_definition FROM information_schema.routines WHERE specific_schema LIKE 'public' AND routine_name LIKE 'functionName'; 

这里有几个来自PostgreSQL-9.5的例子

显示列表:

  1. 函数: \df+
  2. 触发器: \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$ 

另外@法郎的答案,你可以使用这个从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.28013-100000@megazone23.bigpanda.com )

psql中的\sf function_name产生单个函数的可编辑源代码。

https://www.postgresql.org/docs/9.6/static/app-psql.html

\ sf [+] function_description该命令以CREATE OR REPLACE FUNCTION命令的forms获取并显示命名函数的定义。

如果将+添加到命令名称中,则输出行将被编号,函数体的第一行是第一行。