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();