Documentation PostgreSQL 17.10 » Programmation serveur » Triggers sur événement » Un exemple de trigger sur événement de table modifiée

Précédent Niveau supérieur Suivant
38.4. Un exemple complet de trigger sur événement Sommaire 38.6. Exemple de trigger sur événement de connexion

38.5. Un exemple de trigger sur événement de table modifiée #

Grâce à l'événement table_rewrite, il est possible d'écrire une fonction qui autorise les modifications d'une table seulement pendant les heures de maintenance.

Ci-dessous un exemple d'implémentation d'une telle règle.

CREATE OR REPLACE FUNCTION pas_de_modification()
 RETURNS event_trigger
 LANGUAGE plpgsql AS
$$
---
--- Implémentation d'une règle de modification de table:
--- pas de modifications de public.foo, les
--- autres tables peuvent l'être entre 01:00 et 06:00 du matin
--- sauf si elles ont plus de 100 blocs
---
DECLARE
 table_oid oid := pg_event_trigger_table_rewrite_oid();
 heure_courante integer := extract('hour' from current_time);
 pages integer;
 max_pages integer := 100;
BEGIN
 IF pg_event_trigger_table_rewrite_oid() = 'public.foo'::regclass
 THEN
 RAISE EXCEPTION 'Vous n''êtes pas autorisé à modifier la table %',
 table_oid::regclass;
 END IF;
 SELECT INTO pages relpages FROM pg_class WHERE oid = table_oid;
 IF pages > max_pages
 THEN
 RAISE EXCEPTION 'les modifications ne sont seulement permises que pour les tables ayant un nombre de blocs inférieur à %',
 max_pages;
 END IF;
 IF heure_courante NOT BETWEEN 1 AND 6
 THEN
 RAISE EXCEPTION 'les modifications sont seulement autorisées entre 01:00 et 06:00 du matin';
 END IF;
END;
$$;
CREATE EVENT TRIGGER pas_de_modifications_permises
 ON table_rewrite
 EXECUTE FUNCTION pas_de_modification();
 

AltStyle によって変換されたページ (->オリジナル) /