formation-postgis icon indicating copy to clipboard operation
formation-postgis copied to clipboard

Exemple trigger avec RAISE

Open Gustry opened this issue 4 years ago • 1 comments

-- Contrôle de la géométrie
-- qui doit être dans le Gard
-- On crée une fonction générique qui pourra s'appliquer pour toutes les couches
CREATE OR REPLACE FUNCTION z_formation.validation_geometrie_dans_gard()
RETURNS TRIGGER  AS $limite$
BEGIN
    -- On vérifie l'intersection avec le département, on renvoit une erreur si souci
    IF NOT ST_Intersects(
  NEW.geom,
  (SELECT geom FROM admin.gard_bc LIMIT 1)
 ) THEN
  -- On renvoit une erreur
  RAISE EXCEPTION 'La géométrie doit se trouver dans le Gard';
 END IF;
 
  RAISE NOTICE 'Message de type NOTICE';

 RETURN NEW;
END;
$limite$
LANGUAGE plpgsql;

-- On l'applique sur la couches des collèges
CREATE TRIGGER trg_validation_geometrie_dans_gard
BEFORE INSERT OR UPDATE ON z_formation.colleges_gard
FOR EACH ROW EXECUTE PROCEDURE z_formation.validation_geometrie_dans_gard();

Gustry avatar May 19 '20 09:05 Gustry

et j'ajoute un autre premier exemple courant, à mettre au dessus

Les triggers

Principes

todo

Examples

Modification de certains champs de manière automatique après ajout ou modification

-- TRIGGERS
-- Modification de certains champs après ajout ou modification
-- Créer les champs dans la table
ALTER TABLE z_formation.une_table ADD COLUMN modif_date date;
ALTER TABLE z_formation.une_table ADD COLUMN modif_user text;

-- Créer la fonction qui sera lancée sur modif ou ajout de données
CREATE OR REPLACE FUNCTION z_formation.ajout_metadonnees_modification()
RETURNS TRIGGER  AS $limite$
BEGIN
    NEW.modif_date = now();
    NEW.modif_user = CURRENT_USER;
    RETURN NEW;
END;
$limite$
LANGUAGE plpgsql
;

-- Dire à PostgreSQL d'écouter les modifications et ajouts sur la table
CREATE TRIGGER trg_ajout_metadonnees_modification
BEFORE INSERT OR UPDATE ON z_formation.astech_bat
FOR EACH ROW EXECUTE PROCEDURE z_formation.ajout_metadonnees_modification();

mdouchin avatar May 19 '20 10:05 mdouchin