如何在postgresql中打印函数和触发源代码?请让我知道是否有人知道查询显示功能,触发源代码。如何在postgresql中显示函数,过程,触发源代码?
回答
有很多可能性。最简单的方法就是使用pgAdmin并从SQL窗口获取它。然而,如果你想以编程方式获得这个信息,那么从信息模式(这是SQL标准方式,但它可能不包括所有功能,特别是PostgreSQL特定的)中检查pg_proc
和pg_trigger
系统目录或routines
和视图。例如:
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
嗯..我有PGPSQL函数,它有一个空的routine_defintion,并且在field_body域中声明'EXTERNAL'。任何暗示,我可以找到那些? – alfonx
+1这是更标准/便携式解决方案。对于视图SQL是:'SELECT view_definition FROM information_schema.views WHERE table_schema =? AND table_name =?' – Franta
但是,函数名称不是唯一的,因为有人用相同的名称和不同的函数参数来创建函数? https://stackoverflow.com/questions/47341513/postgresql-how-to-display-function-or-trigger-or-view-code-for-a-unique-item – mg1075
对于功能:
可以查询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
它会显示函数的源代码。
对于触发器:
我dont't知道是否有一个直接的方式来获得源代码。只要知道下面的方式,可能会帮助你!
- 第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
它会告诉你该表的触发器的细节。通常一个触发器使用一个函数。所以你可以得到触发函数的源代码,就像我指出的那样!
如何查看**安装的功能EXTENSION?**示例我正在使用[ltree](https://www.postgresql.org/docs/current/static/ltree.html),但'\ df ltxtquery'没有响应。 –
\df+
in psql为您提供源代码。
不错:)我建议使用'\ df'来查找你的函数的名字,然后用'\ x'来扩展输出,然后'\ df + name_of_function' –
\ df +输出比代码更多的东西。如果你想要的只是代码,那么\ sf会诀窍! – Telic
如何查看已安装的EXTENSION的**函数**示例我正在使用[ltree](https://www.postgresql.org/docs/current/static/ltree.html),但没有任何响应, \ df ltxtquery'。 –
还为@法郎的答案可以从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/[email protected]m)
下面是一些例子和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$
\sf
psql中的function_name会产生单个函数的可编辑源代码。
https://www.postgresql.org/docs/9.6/static/app-psql.html来自:
\ SF [+] function_description 此命令取和显示命名的函数的定义,在CREATE OR REPLACE FUNCTION命令的形式。
如果+附加到命令名,那么输出线被编号,函数体的第一行是行1
略多于只是显示功能,如何获得编辑就地设施。
\ef <function_name>
非常方便。它将以可编辑格式打开该功能的源代码。 您不仅可以查看它,还可以编辑和执行它。
只需\ef
without function_name将打开可编辑的CREATE FUNCTION模板。
更多参考 - >https://www.postgresql.org/docs/9.6/static/app-psql.html
- 1. PostgreSQL - 如何在pgAdmin中查看函数文本/源代码?
- 2. 发布数据&显示源代码
- 3. 在MySql中显示过程/函数代码
- 4. 在PostgreSQL触发函数中使用pg_notify
- 5. 如何通过ntsd -d在windbg中显示源代码?
- 6. 如何显示Python函数的代码?
- 7. 防止函数在源代码中显示 - 角
- 8. 如何在PostgreSQL中创建复制触发器函数?
- 9. 如何在PostgreSQL触发器函数中获取表名?
- 10. Java SWT:如何通过源代码触发ModifyListener?
- 11. PHP代码显示在源代码
- 12. 如何在IPython笔记本中显示包函数的源代码
- 13. PostgreSql中的函数和触发器
- 14. postgresql触发函数中的死锁
- 15. 如何在ORACLE中显示包中的函数代码?
- 16. 如何给PostgreSQL中的触发函数提供参数?
- 17. PostgreSQL转换过程代码
- 18. clover/bullshtml - 如何显示源代码行
- 19. 如何防止显示源代码
- 20. 如何在UpdatePanel中触发显示ProgressTemplate?
- 21. 在ckeditor中显示Redcloth源代码:rails3
- 22. 在textarea组件中显示源代码
- 23. 如何显示R函数使用的.C例程的代码?
- 24. 从显示触发PHP过程:块
- 25. 如何在plpythonu函数中编写plpgsql代码(PostgreSQL)
- 26. 显示PHP代码中的JavaScript函数
- 27. 如何在线程退出时触发代码,而不使用函数* _at_thread_exit?
- 28. 如何在PostgreSql中创建触发器?
- 29. 确定Postgresql中触发器的来源
- 30. 如何通过onClick()触发VB函数
作为追随者谁来到这里试图找出如何列出所有触发器一张纸条,这是'选择pg_trigger *;'或者,如果你也想看看哪个表中的每一触发器适用于'select tgrelid :: regclass,tgname from pg_trigger;'FWIW ' – rogerdpack