Відповіді:
\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 `