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