Відповіді:
\df+
у psql дає вихідний код.
\df
для пошуку назви вашої функції, потім \x
для розширеного виходу, а потім\df+ name_of_function
\df ltxtquery
.
\x ON
є обов'язковим для перенесення дисплея
Для функції:
ви можете запитувати перегляд 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
Він покаже вихідний код функції.
Для тригерів:
Я не знаю, чи є прямий спосіб отримати вихідний код. Просто знайте наступний спосіб, можливо, це допоможе вам!
skytf => виберіть tgrelid з pg_trigger, де tgname = 'insert_tbl_tmp_trigger'; тгрелід --------- 26599 (1 ряд)
skytf => вибрати oid, перейменувати з pg_class, де oid = 26599; oid | перейменувати ------- + ----------------------------- 26599 | tbl_tmp (1 ряд)
skytf => \ d tbl_tmp
Він покаже вам подробиці тригера таблиці. Зазвичай в тригері використовується функція. Таким чином, ви можете отримати вихідний код функції тригера так само, як зазначено вище!
Ось кілька прикладів з 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$
\x
спочатку для ввімкнення розширеного дисплея також допомагає читати.
Є багато можливостей. Найпростіший спосіб - просто використовувати 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';
SELECT view_definition FROM information_schema.views WHERE table_schema = ? AND table_name = ?
pgproc.prosrc
колонку
Трохи більше, ніж просто показ функції, як щодо отримання об'єкта для редагування на місці.
\ef <function_name>
дуже зручно. Це відкриє вихідний код функції в редагованому форматі. Ви не тільки зможете його переглядати, ви також можете редагувати та виконувати.
Просто \ef
без назви функції буде відкрито редагований шаблон CREATE FUNCTION.
Для подальшого ознайомлення -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
function_name в psql дає редагований вихідний код однієї функції.
З https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Ця команда отримує та показує визначення названої функції у вигляді команди СТВОРИТИ АБО ЗАМОВИТИ ФУНКЦІЮ.
Якщо + до імені команди додається +, то рядки виводу нумеруються, при цьому перший рядок функції функції є рядком 1.
додатково до відповіді @ 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 )
З версії: psql (9.6.17, сервер 11.6)
Я спробував відповісти на все вище, але для мене
postgres=> \sf jsonb_extract_path_text
CREATE OR REPLACE FUNCTION pg_catalog.jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])
RETURNS text
LANGUAGE internal
IMMUTABLE PARALLEL SAFE STRICT
AS $function$jsonb_extract_path_text$function$
postgres=> \df+
ERROR: column p.proisagg does not exist
LINE 6: WHEN p.proisagg THEN 'agg'
^
HINT: Perhaps you meant to reference the column "p.prolang".
Здається, df для мене не працює.
select * from pg_trigger;
або, якщо ви також хочете побачити, до якої таблиці застосовується кожен тригер дляselect tgrelid::regclass, tgname from pg_trigger;
FWIW `