Réponses:
\df+
dans psql vous donne le code source.
\df
pour trouver le nom de votre fonction, puis \x
pour une sortie étendue, puis\df+ name_of_function
\df ltxtquery
.
\x ON
est un must pour l'affichage transposé
Pour la fonction:
vous pouvez interroger la vue pg_proc, comme suit
select proname,prosrc from pg_proc where proname= your_function_name;
Une autre façon est d'exécuter simplement le commont \df
et \ef
qui peut lister les fonctions.
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
Il affichera le code source de la fonction.
Pour les déclencheurs:
Je ne sais pas s'il existe un moyen direct d'obtenir le code source. Sachez simplement la manière suivante, peut-être que cela vous aidera!
skytf => sélectionnez tgrelid dans pg_trigger où tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 rangée)
skytf => sélectionnez oid, relname de pg_class où oid = 26599; oid | relname ------- + ----------------------------- 26599 | tbl_tmp (1 rangée)
skytf => \ d tbl_tmp
Il vous montrera les détails du déclencheur de la table. Habituellement, un déclencheur utilise une fonction. Vous pouvez donc obtenir le code source de la fonction de déclenchement tout comme ce que j'ai indiqué ci-dessus!
Voici quelques exemples de PostgreSQL-9.5
Afficher la liste:
\df+
\dy+
Définition d'affichage:
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
premier pour activer l'affichage étendu contribue également à la lisibilité.
Il existe de nombreuses possibilités. Le moyen le plus simple consiste simplement à utiliser pgAdmin et à obtenir cela à partir de la fenêtre SQL. Cependant, si vous voulez obtenir cela par programme, examinez pg_proc
et les pg_trigger
catalogues système ou routines
et les triggers
vues à partir du schéma d'information (c'est la méthode standard SQL, mais cela peut ne pas couvrir toutes les fonctionnalités, en particulier celles spécifiques à PostgreSQL). Par exemple:
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
chronique
Un peu plus que simplement afficher la fonction, que diriez-vous également de la fonction d'édition sur place.
\ef <function_name>
est très pratique. Il ouvrira le code source de la fonction dans un format modifiable. Vous pourrez non seulement le visualiser, mais également le modifier et l'exécuter.
Juste \ef
sans nom_fonction, vous ouvrirez le modèle CREATE FUNCTION modifiable.
Pour plus d'informations -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
nom_fonction dans psql produit le code source modifiable d'une seule fonction.
Depuis https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] description_fonction Cette commande récupère et affiche la définition de la fonction nommée, sous la forme d'une commande CRÉER OU REMPLACER UNE FONCTION.
Si + est ajouté au nom de la commande, les lignes de sortie sont numérotées, la première ligne du corps de la fonction étant la ligne 1.
en plus de la réponse de @ franc, vous pouvez utiliser ceci à partir de l'interface SQL:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(tiré d'ici: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Depuis la version: psql (9.6.17, serveur 11.6)
J'ai essayé toutes les réponses ci-dessus mais pour moi
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 ne semble pas fonctionner pour moi.
select * from pg_trigger;
ou, si vous voulez aussi voir quelle table chaque déclencheur s'applique àselect tgrelid::regclass, tgname from pg_trigger;
FWIW `