Как отображать функцию, процедуру, запускает исходный код в postgresql?

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

Ответ 1

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

Ответ 2

Для функции:

вы можете запросить представление 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: Получите таблицу на кнопке триггера:
    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

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

Ответ 3

Вот несколько примеров из 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$

Ответ 4

Есть много возможностей. Самый простой способ - просто использовать 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';

Ответ 5

дополнительно к ответу @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/[email protected]m)

Ответ 6

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

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

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

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