Du har ret i, at du har brug for en trigger, fordi indstilling af en standardværdi for kolonnen virker ikke for dig - standardværdier virker kun for null
værdier og hjælper dig ikke med at forhindre tomme værdier.
I postgres er der et par trin til at oprette en trigger:
Trin 1:Opret en funktion, der returnerer typen 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
Trin 2:Opret en trigger, der udløses før insert, som giver dig mulighed for at ændre værdier, før de indsættes, som påkalder ovenstående funktion:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
Og du er færdig.
Se ovenstående kode, der udføres på SQLFIddle, der viser, at den fungerer korrekt!
Du nævner i en kommentar, at værdien 'X'
hentes fra en underforespørgsel. Hvis ja, skal du ændre den relevante linje, så noget som:
NEW.C1 := (select some_column from some_table where some_condition);