PostgreSQL fournit ces fonctions utilitaires pour retrouver des informations à partir des triggers sur événements.
Pour plus d'informations sur les triggers sur événements, voir Chapitre 39.
pg_event_trigger_ddl_commands
renvoie une liste des commandes DDL
exécutées par chaque action de l'utilisateur lorsqu'elle
est appelée à partir d'une fonction attachée à un trigger
sur événement ddl_command_end
. Si
elle est appelée dans tout autre contexte, une erreur est
levée. pg_event_trigger_ddl_commands
renvoie une ligne pour chaque commande de base exécutée ;
certaines commandes qui sont une simple instruction SQL
peuvent retourner plus d'une ligne. Cette fonction renvoie
les colonnes suivantes :
Nom | Type | Description |
---|---|---|
classid | oid | OID du catalogue auquel appartient l'objet |
objid | oid | OID de l'objet lui-même |
objsubid | integer | ID du sous-objet (exemple le numéro d'attribut pour les colonnes) |
command_tag | text | La marque (tag) de la commande |
object_type | text | Type de l'objet |
schema_name | text |
Nom du schéma auquel appartient l'objet, si applicable ;
sinon NULL . Aucun guillemet n'est utilisé.
|
object_identity | text | Version textuelle de l'identité de l'objet, qualifié du schéma. Tous les identifiants présents dans l'identité sont placés entre guillemets si nécessaire. |
in_extension | bool | Indique si la commande est incluse dans un script d'une extension |
command | pg_ddl_command | Une représentation complète de la commande, dans un format interne. Elle ne peut être envoyée en sortie directement, mais elle peut être communiquée à d'autres fonctions pour obtenir différentes informations à propos de la commande. |
pg_event_trigger_dropped_objects
renvoie une liste
de tous les objets supprimés par la commande qui a déclenché l'appel à
l'événement sql_drop
. Si elle est appelée dans un
autre contexte, pg_event_trigger_dropped_objects
lève
une erreur. pg_event_trigger_dropped_objects
renvoie
les colonnes suivantes :
Nom | Type | Description |
---|---|---|
classid | oid | OID du catalogue auquel appartient l'objet |
objid | oid | OID de l'objet lui-même |
objsubid | int32 | Sous-identifiant de l'objet (par exemple, numéro d'attribut pour une colonne) |
original | bool | Utilisé pour identifier l'objet détruit à l'origine |
normal | bool | Indique qu'il existe une relation de dépendance normale dans le graphe des dépendances menant à cet objet |
is_temporary | bool | Indique que l'objet était un objet temporaire. |
object_type | text | Type de l'objet |
schema_name | text |
Nom du schéma auquel appartient l'objet. NULL dans
le cas contraire. Aucun guillemet n'est utilisé.
|
object_name | text |
Nom de l'objet si la combinaison nom du schéma et nom de l'objet
peut être utilisée comme identifiant unique pour l'objet,
NULL dans les autres cas.
Aucun guillemet n'est utilisé et le nom n'est jamais qualifié du
nom du schéma.
|
object_identity | text | Version textuelle de l'identité de l'objet, qualifié du schéma. Tous les identifiants présents dans l'identité sont placés entre guillemets si nécessaire. |
address_names | text[] |
Un tableau qui, avec object_type et
address_args , peut être utilisé par la
fonction pg_get_object_address() pour
recréer l'adresse de l'objet dans un serveur distant qui
contient un objet de même type nommé à l'identique.
|
address_args | text[] |
Complément pour address_names ci-dessus.
|
La fonction pg_event_trigger_dropped_objects
peut être
utilisée dans un trigger d'événement comme ici :
CREATE FUNCTION test_trigger_evenement_pour_suppression() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP RAISE NOTICE '% objet supprimé : % %.% %', tg_tag, obj.object_type, obj.schema_name, obj.object_name, obj.object_identity; END LOOP; END $$; CREATE EVENT TRIGGER test_trigger_evenement_pour_suppression ON sql_drop EXECUTE FUNCTION test_trigger_evenement_pour_suppression();
Les fonctions décrites à
Tableau 9.96
fournissent des informations sur une table pour laquelle un
événement table_rewrite
vient juste d'être
lancé. Si elles sont appelées dans un autre contexte, une erreur est levée.
Tableau 9.96. Table Rewrite information
La fonction pg_event_trigger_table_rewrite_oid
peut être utilisée dans un trigger sur événement comme suit :
CREATE FUNCTION test_event_trigger_table_rewrite_oid() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'modification de table % pour la raison %', pg_event_trigger_table_rewrite_oid()::regclass, pg_event_trigger_table_rewrite_reason(); END; $$; CREATE EVENT TRIGGER test_table_rewrite_oid ON table_rewrite EXECUTE FUNCTION test_event_trigger_table_rewrite_oid();