PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Déclencheur d'insertion Postgresql pour définir la valeur

Vous avez raison de dire que vous avez besoin d'un déclencheur, car définir une valeur par défaut pour la colonne ne fonctionnera pas pour vous - les valeurs par défaut ne fonctionnent que pour null valeurs et ne vous aident pas à empêcher les valeurs vides.

Dans postgres, il y a quelques étapes pour créer un déclencheur :

Étape 1 :Créer une fonction qui renvoie le type trigger :

CREATE FUNCTION my_trigger_function()
RETURNS trigger AS $$
BEGIN
  IF NEW.C1 IS NULL OR NEW.C1 = '' THEN
    NEW.C1 := 'X';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql

Étape 2 :Créer un déclencheur qui se déclenche avant insert, qui vous permet de modifier les valeurs avant qu'elles ne soient insérées, qui invoque la fonction ci-dessus :

CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()

Et vous avez terminé.

Voir le code ci-dessus s'exécutant sur SQLFIddle démontrant qu'il fonctionne correctement !

Vous mentionnez dans un commentaire que la valeur 'X' est extrait d'une sous-requête. Si c'est le cas, modifiez la ligne concernée pour obtenir quelque chose comme :

NEW.C1 := (select some_column from some_table where some_condition);