Как вывести функцию, процедуру, запускает исходный код в postgresql? - PullRequest
134 голосов
/ 01 августа 2011

Как напечатать исходные коды функций и триггеров в postgresql?пожалуйста, дайте мне знать, если кто-нибудь знает запрос для отображения функции, запускает исходный код.

Ответы [ 7 ]

128 голосов
/ 01 июня 2013

\df+ in psql дает вам исходный код.

117 голосов
/ 02 августа 2011

Для функции:

вы можете запросить представление 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

Будет показан исходный код функции.

Для триггеров:

IНе знаю, есть ли прямой способ получить исходный код.Просто знайте следующий способ, может быть, он вам поможет!

  • шаг 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

Она покажет вам деталитриггера таблицы.Обычно триггер использует функцию.Таким образом, вы можете получить исходный код функции триггера, как указано выше, как я указал!

26 голосов
/ 13 июля 2016

Вот несколько примеров из 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$
20 голосов
/ 01 августа 2011

Есть много возможностей.Самый простой способ - просто использовать pgAdmin и получить это из окна SQL.Однако, если вы хотите получить это программно, изучите pg_proc и pg_trigger системных каталогов или routines и triggers представления из информационной схемы (это стандартный способ SQL, но он может не охватывать все функции, особенно специфичные для PostgreSQL).Например:

SELECT
    routine_definition 
FROM
    information_schema.routines 
WHERE
    specific_schema LIKE 'public'
    AND routine_name LIKE 'functionName';
10 голосов
/ 30 декабря 2017

Чуть больше, чем просто отображение функции, как насчет получения возможности редактирования на месте.

\ef <function_name> очень удобно.Откроется исходный код функции в редактируемом формате.Вы сможете не только просматривать его, но и редактировать и исполнять.

Просто \ef без имени_функции откроет редактируемый шаблон CREATE FUNCTION.

Для дальнейшего использования -> https://www.postgresql.org/docs/9.6/static/app-psql.html

8 голосов
/ 27 сентября 2015

в дополнение к ответу @ 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)

6 голосов
/ 11 октября 2017

\sf имя_функции в psql возвращает редактируемый исходный код одной функции.

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

\ sf [+] function_description Эта команда выбирает и показывает определение именованной функции в форме команды CREATE OR REPLACE FUNCTION.

Если к имени команды добавлен +, то выходные строки нумеруются, а первая строка тела функции - строка 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...