Risposte:
\df+
in psql ti dà il codice sorgente.
\df
per trovare il nome della tua funzione, quindi \x
per l'output espanso, quindi\df+ name_of_function
\df ltxtquery
.
\x ON
è un must per la visualizzazione trasposta
Per la funzione:
è possibile eseguire una query sulla vista pg_proc, proprio come segue
select proname,prosrc from pg_proc where proname= your_function_name;
Un altro modo è quello di eseguire il comando \df
e \ef
che può elencare le funzioni.
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
Mostrerà il codice sorgente della funzione.
Per i trigger:
Non so se esiste un modo diretto per ottenere il codice sorgente. Basta sapere il seguente modo, potrebbe essere che ti aiuterà!
skytf => seleziona tgrelid da pg_trigger dove tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 riga)
skytf => seleziona oid, relname da pg_class dove oid = 26599; oid | relname ------- + ----------------------------- 26599 | tbl_tmp (1 riga)
skytf => \ d tbl_tmp
Ti mostrerà i dettagli del trigger della tabella. Di solito un trigger utilizza una funzione. Quindi puoi ottenere il codice sorgente della funzione trigger proprio come sopra indicato che ho sottolineato!
Ecco alcuni esempi di PostgreSQL-9.5
Elenco di visualizzazione:
\df+
\dy+
Visualizza definizione:
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
first per attivare la visualizzazione estesa aiuta anche con la leggibilità.
Ci sono molte possibilità Il modo più semplice è usare solo pgAdmin e ottenerlo dalla finestra SQL. Tuttavia, se si desidera ottenere questo livello di codice quindi examinate pg_proc
e pg_trigger
cataloghi di sistema o routines
e triggers
viste da schema di informazioni (che di SQL modo standard, ma non potrebbe coprire tutte le caratteristiche in particolare PostgreSQL-specifico). Per esempio:
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
colonna
Leggermente più di una semplice visualizzazione della funzione, che ne dite di ottenere anche la funzione di modifica sul posto.
\ef <function_name>
è molto utile. Si aprirà il codice sorgente della funzione in formato modificabile. Non solo potrai visualizzarlo, ma anche modificarlo ed eseguirlo.
Solo \ef
senza nome_funzione si aprirà il modello CREATE FUNCTION modificabile.
Per ulteriori riferimenti -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
nome_funzione in psql produce il codice sorgente modificabile di una singola funzione.
Da https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Questo comando recupera e mostra la definizione della funzione denominata, sotto forma di un comando CREATE OR REPLACE FUNCTION.
Se + viene aggiunto al nome del comando, le righe di output vengono numerate, con la prima riga del corpo della funzione come riga 1.
in aggiunta alla risposta di @ franc puoi usarlo dall'interfaccia sql:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(tratto da qui: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Dalla versione: psql (9.6.17, server 11.6)
Ho provato tutte le risposte sopra, ma per me
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 sembra non funzionare per me.
select * from pg_trigger;
o, se vuoi anche vedere quale tabella ogni trigger si applica aselect tgrelid::regclass, tgname from pg_trigger;
FWIW `