PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/12/2019 12:12:55

OF
Membre

event trigger ddl_command_end ne rapporte pas les ordres DROP

Elo,
quelqu'un sait-il pourquoi cet "event trigger" ne rapporte t-il pas les ordres DROP alors qu'il serait censé le faire selon la documentation ?

au paragraphe 39.1 :
L'évènement ddl_command_start se déclenche juste avant l'exécution d'une commande CREATE, ALTER, DROP, ...
...
...
L'évènement ddl_command_end se déclenche juste après l'exécution de ces même ensembles de commandes...
...

et au paragraphe 39.2 Matrice de déclenchement des triggers sur événement...



CREATE OR REPLACE FUNCTION ddl_log_command_end()
 RETURNS event_trigger
 LANGUAGE plpgsql
 SECURITY DEFINER
AS $function$
DECLARE
    obj record;
BEGIN
    FOR obj IN
        SELECT *
        FROM pg_catalog.pg_event_trigger_ddl_commands()
    LOOP
        RAISE NOTICE '% objet : % %.%',
                     obj.command_tag,
                     obj.object_type,
                     obj.schema_name,
                     obj.object_identity;
    END LOOP;
END;
$function$;


CREATE EVENT TRIGGER ddl_log_command_end ON ddl_command_end   
   EXECUTE PROCEDURE ddl_log_command_end();                    
   
 
zof [7862]=# create table za (id int);
NOTICE:  CREATE TABLE objet : table zof.zof.za
CREATE TABLE

zof [7862]=# alter table za add lib char(30);
NOTICE:  ALTER TABLE objet : table zof.zof.za
ALTER TABLE

zof [7862]=# drop table za;
DROP TABLE

zof [7862]=#

Merci

Hors ligne

#2 13/12/2019 15:05:30

dverite
Membre

Re : event trigger ddl_command_end ne rapporte pas les ordres DROP

Le trigger se déclenche probablement mais on ne peut pas accéder aux infos via pg_event_trigger_ddl_commands()
dans le cas des DROP.

Voir https://www.postgresql.org/message-id/f … .gmail.com
pour une discussion récente sur le sujet.

Conclusion: pour les DROP il faut capter l'évènement sql_drop

Hors ligne

#3 13/12/2019 15:21:03

rjuju
Administrateur

Re : event trigger ddl_command_end ne rapporte pas les ordres DROP

D'après la documentation :

To list the objects that have been dropped, use the set-returning function pg_event_trigger_dropped_objects() from the sql_drop event trigger code (see Section 9.28). Note that the trigger is executed after the objects have been deleted from the system catalogs, so it's not possible to look them up anymore.

Hors ligne

#4 13/12/2019 17:01:35

OF
Membre

Re : event trigger ddl_command_end ne rapporte pas les ordres DROP

Merci pour vos réponses. ;-)

Hors ligne

Pied de page des forums