Odpowiedzi:
\df+w psql podaje kod źródłowy.
\dfdo znalezienia nazwy funkcji, a następnie \xdo rozszerzonego wyjścia, a następnie\df+ name_of_function
\df ltxtquery.
\x ONjest koniecznością do wyświetlania transponowanego
Do funkcji:
możesz zapytać o widok pg_proc, tak jak poniżej
select proname,prosrc from pg_proc where proname= your_function_name;
Innym sposobem jest to, że po prostu wykonaj polecenie commont \dfi \efktóre może wyświetlić listę funkcji.
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
Pokaże kod źródłowy funkcji.
Wyzwalacze:
Nie wiem, czy istnieje bezpośredni sposób na uzyskanie kodu źródłowego. Po prostu poznaj następujący sposób, może to ci pomoże!
skytf => wybierz tgrelid z pg_trigger, gdzie tgname = 'insert_tbl_tmp_trigger';
tgrelid
---------
26599
(1 rząd)
skytf => wybierz oid, relname z pg_class, gdzie oid = 26599;
oid | zmienić nazwę
------- + -----------------------------
26599 | tbl_tmp
(1 rząd)
skytf => \ d tbl_tmp
Pokaże ci szczegóły wyzwalacza tabeli. Zwykle wyzwalacz używa funkcji. Możesz więc pobrać kod źródłowy funkcji wyzwalacza, tak jak powyżej, na które wskazałem!
Oto kilka przykładów z PostgreSQL-9.5
Lista wyświetlania:
\df+\dy+Definicja wyświetlania:
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$
\xpierwszego do włączenia rozszerzonego wyświetlacza również pomaga w zwiększeniu czytelności.
Możliwości jest wiele. Najprostszym sposobem jest użycie pgAdmin i pobranie tego z okna SQL. Jednak jeśli chcesz dostać to programowo następnie examinate pg_proci pg_triggerkatalogów systemowych lub routinesi triggerswidoki ze schematu informacyjnego (to SQL standardowy sposób, ale to nie może obejmować wszystkie funkcje szczególnie PostgreSQL specyficzne). Na przykład:
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.prosrckolumna
Nieco więcej niż tylko wyświetlanie funkcji, co powiesz także na uzyskanie narzędzia edycji lokalnej.
\ef <function_name>jest bardzo poręczny. Otworzy kod źródłowy funkcji w edytowalnym formacie. Będziesz nie tylko mógł go przeglądać, ale także edytować i wykonywać.
Właśnie \ef bez nazwa_funkcji otworzy edytowalny szablon STWÓRZ FUNKCJĘ.
Więcej informacji -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf nazwa_funkcji w psql daje edytowalny kod źródłowy pojedynczej funkcji.
Z https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] opis_funkcji To polecenie pobiera i wyświetla definicję nazwanej funkcji w postaci polecenia CREATE OR REPLACE FUNCTION.
Jeśli do nazwy polecenia zostanie dołączony znak +, to wiersze wyjściowe są numerowane, przy czym pierwszym wierszem treści funkcji jest wiersz 1.
dodatkowo do odpowiedzi @ franc możesz użyć tego z interfejsu sql:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(pobrane stąd: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Od wersji: psql (9.6.17, serwer 11.6)
Próbowałem wszystkich powyższych odpowiedzi, ale dla mnie
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 wydaje się nie działać dla mnie.
select * from pg_trigger;lub, jeśli chcesz również zobaczyć, która tabela dotyczy każdego wyzwalacza dlaselect tgrelid::regclass, tgname from pg_trigger;FWIW `