Comment imprimer des fonctions et déclencher du code source dans postgresql? s'il vous plaît laissez-moi savoir si quelqu'un connait la requête pour afficher la fonction, déclenche le code source.
\df+
in sql vous donne le code source.
pour fonction:
vous pouvez interroger la vue pg_proc, tout comme la suivante
select proname,prosrc from pg_proc where proname= your_function_name;
Une autre solution consiste à exécuter simplement les commandes \df
et \ef
, qui peuvent répertorier 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 montrera 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. Il suffit de savoir de la manière suivante, peut-être que cela vous aidera!
skytf => sélectionnez le tgrelid à partir de pg_trigger où tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 rangée)
skytf => sélectionnez oid, nom de référence dans 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. Généralement, un déclencheur utilise une fonction. Ainsi, vous pouvez obtenir le code source de la fonction de déclenchement comme ci-dessus que j'ai indiqué!
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$
Il y a beaucoup de possibilités. Le moyen le plus simple consiste simplement à utiliser pgAdmin et à l'obtenir à partir de la fenêtre SQL. Toutefois, si vous souhaitez obtenir cela par programme, examinez pg_proc
et pg_trigger
catalogues système ou routines
et triggers
vues du schéma d’information (c’est la méthode standard de SQL, mais elle ne couvre pas nécessairement 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';
_
Un peu plus que l’affichage de la fonction, qu’en est-il de l’utilisation de la fonction de modification sur place?.
\ef <function_name>
est très pratique. Cela ouvrira le code source de la fonction dans un format éditable. Vous ne pourrez pas seulement le voir, vous pourrez aussi le modifier et l'exécuter.
Juste \ef
sans nom_fonction ouvrira le modèle CREATE FUNCTION éditable.
Pour référence ultérieure -> https://www.postgresql.org/docs/9.6/static/app-psql.html
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>'
(extrait de cet emplacement: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
\sf
nom_fonction dans psql donne le code source modifiable d'une fonction unique.
De https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Cette commande extrait et affiche la définition de la fonction nommée, sous la forme d'une commande CREATE OR REPLACE FUNCTION.
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.