Odpowiedzi:
\df+
w psql podaje kod źródłowy.
\df
do znalezienia nazwy funkcji, a następnie \x
do rozszerzonego wyjścia, a następnie\df+ name_of_function
\df ltxtquery
.
\x ON
jest 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 \df
i \ef
któ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$
\x
pierwszego 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_proc
i pg_trigger
katalogów systemowych lub routines
i triggers
widoki 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.prosrc
kolumna
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 `