sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql indsæt trigger for at indstille værdi

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


  1. Kan tabelkolonner med en fremmednøgle være NULL?

  2. Ren måde at bruge postgresql vinduesfunktioner i django ORM?

  3. Sådan bruges SQL Server AlwaysOn-funktioner

  4. Sådan sammenligner du to arrays og vælger kun de ikke-matchende elementer i postgres