如何在postgresql打印函数和触发器源代码?请让我知道,如果有人知道查询显示的功能,触发器源代码。
当前回答
功能:
查询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
它将显示函数的源代码。
触发器:
我不知道是否有一个直接的方法来获得源代码。只要知道下面的方法,也许会对你有所帮助!
步骤1:获取触发器的表oid:
skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 row)
步骤2:获取上述oid的表名!
skytf=> select oid,relname from pg_class where oid=26599; oid | relname -------+----------------------------- 26599 | tbl_tmp (1 row)
步骤3:列出表信息
skytf=> \d tbl_tmp
它将向您显示表触发器的详细信息。触发器通常使用函数。因此,您可以获得触发器函数的源代码,就像上面我指出的那样!
其他回答
有很多可能性。最简单的方法是使用pgAdmin并从SQL窗口获取。然而,如果你想通过编程方式获得这些,那么检查pg_proc和pg_trigger系统目录或例程,并从信息模式中触发视图(这是SQL的标准方式,但它可能不包括所有特性,特别是特定于postgresql的特性)。例如:
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
功能:
查询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
它将显示函数的源代码。
触发器:
我不知道是否有一个直接的方法来获得源代码。只要知道下面的方法,也许会对你有所帮助!
步骤1:获取触发器的表oid:
skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 row)
步骤2:获取上述oid的表名!
skytf=> select oid,relname from pg_class where oid=26599; oid | relname -------+----------------------------- 26599 | tbl_tmp (1 row)
步骤3:列出表信息
skytf=> \d tbl_tmp
它将向您显示表触发器的详细信息。触发器通常使用函数。因此,您可以获得触发器函数的源代码,就像上面我指出的那样!
\df+在PSQL给你源代码。
此外,对于@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.28013-100000@megazone23.bigpanda.com)
下面是一些来自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$
推荐文章
- SQL:从时间戳日期减去1天
- PostgreSQL删除所有内容
- 为什么PostgreSQL要对索引列进行顺序扫描?
- PostgreSQL INSERT ON冲突更新(upsert)使用所有排除的值
- 如何检查一个表是否存在于给定的模式中
- 如何将整数转换为字符串作为PostgreSQL查询的一部分?
- Psycopg2:用一个查询插入多行
- PostgreSQL返回JSON数组的结果集?
- PostgreSQL通配符LIKE用于单词列表中的任何一个
- 检查Postgres JSON数组是否包含字符串
- psql: FATAL: Peer authentication failed for user "dev"
- 如何在Postgres/SQL中获得两个整数的最小/最大值?
- 如何在postgresql中显示函数,过程,触发器源代码?
- 如何用postgres将间隔转换为小时数?
- 在postgresql中将查询结果按月和年分组