PostgreSQL fournit des fonctions d'aide pour récupérer des informations sur les triggers d'événement.
Pour plus d'informations sur les triggers d'événement, voir Chapitre 38.
pg_event_trigger_ddl_commands
() →setof record
pg_event_trigger_ddl_commands
renvoie une liste de
commandes DDL exécutées par chaque action utilisateur,
lorsqu'elles sont appelées dans une fonction attachée à un trigger
d'événement ddl_command_end
. Si appelé d'un 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 phrase SQL pourraient renvoyer plus d'une ligne. Cette fonction
renvoie les colonnes suivantes :
Nom | Type | Description |
---|---|---|
classid | oid | OID du catalogue d'appartenance de l'objet |
objid | oid | OID de l'objet lui-même |
objsubid | integer | identifiant du sous-objet (par exemple, le numéro d'attribut pour une colonne) |
command_tag | text | Balise de commande |
object_type | text | Type de l'objet |
schema_name | text |
Nom du schéma d'appartenance de l'objet, s'il existe ;
sinon NULL . Aucun guillemet n'est utilisé.
|
object_identity | text | Texte indiquant l'identité de l'objet, qualifié du schéma. Chaque identifiant inclus dans l'identifié est entre guillemets si nécessaire. |
in_extension | boolean | True si la commande fait partie d'un script d'extension |
command | pg_ddl_command | Une représentation complète de la commande dans le format interne. Ceci ne peut être affiché directement mais peut être passé à d'autres fonctions pour obtenir différentes pièces d'information sur la commande. |
pg_event_trigger_dropped_objects
() →setof record
pg_event_trigger_dropped_objects
renvoie une liste de
tous les objets supprimés par la commande pour laquelle l'événement
sql_drop
a été appelé. Si elle est appelée dans un
autre contexte, une erreur est levée. Cette fonction renvoie les colonnes
suivantes :
Nom | Type | Description |
---|---|---|
classid | oid | OID du catalogue d'appartenance de l'objet |
objid | oid | OID de l'objet lui-même |
objsubid | integer | Identifiant du sous-objet (par exemple le numéro d'attribut d'une colonne) |
original | boolean | True s'il s'agit d'un des objets racines de la suppression |
normal | boolean | True s'il y avait une relation de dépendance normale dans le graphe de dépendance amenant à cet objet |
is_temporary | boolean | True si c'était un objet temporaire |
object_type | text | Type de l'objet |
schema_name | text |
Nom du schéma d'appartenance de l'objet, s'il existe ;
sinon NULL . Aucun guillemet n'est utilisé.
|
object_name | text |
Nom de l'objet, si la combinaison du schéma et du nom peut être
utilisée comme un identifiant unique pour l'objet ; sinon
NULL . Aucun guillemet n'est utilisé, et le nom
n'est jamais qualifié du schéma.
|
object_identity | text | Texte indiquant l'identité de l'objet, qualifié du schéma. Chaque identifiant inclus dans l'identifié est entre guillemets si nécessaire. |
address_names | text[] |
Un tableau qui, avec object_type et
address_args , peut être utilisé dans la fonction
pg_get_object_address pour recréer l'adresse de
l'objet dans un serveur distant contenant un objet nommé de façon
identique et de même type.
|
address_args | text[] |
Complément pour address_names
|
La fonction pg_event_trigger_dropped_objects
peut être
utilisée dans un trigger d'événement tel que :
CREATE FUNCTION test_event_trigger_for_drops() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP RAISE NOTICE '% dropped object: % %.% %', tg_tag, obj.object_type, obj.schema_name, obj.object_name, obj.object_identity; END LOOP; END $$; CREATE EVENT TRIGGER test_event_trigger_for_drops ON sql_drop EXECUTE FUNCTION test_event_trigger_for_drops();
Les fonctions listées dans Tableau 9.108 fournissent des
informations sur une table pour laquelle l'événement
table_rewrite
a été justement appelé. Si appelée dans
un autre contexte, une erreur est levée.
Tableau 9.108. Fonctions d'informations sur la réécriture de table
Ces fonctions peuvent être utilisées dans un trigger d'événement ainsi :
CREATE FUNCTION test_event_trigger_table_rewrite_oid() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'rewriting table % for reason %', 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();