sql >> Database >  >> RDS >> PostgreSQL

Postgresql trigger invoegen om waarde in te stellen

Je hebt gelijk dat je een trigger nodig hebt, omdat het instellen van een standaardwaarde voor de kolom niet voor jou werkt - standaardwaarden werken alleen voor null waarden en helpen u niet bij het voorkomen van lege waarden.

In postgre zijn er een aantal stappen om een ​​trigger te maken:

Stap 1:Maak een functie die het type trigger retourneert :

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

Stap 2:Maak een trigger die vóór . wordt geactiveerd insert, waarmee u waarden kunt wijzigen voordat ze worden ingevoegd, die de bovenstaande functie oproept:

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

En je bent klaar.

Zie de bovenstaande code die wordt uitgevoerd op SQLFIddle en laat zien dat het correct werkt!

Je vermeldt in een opmerking dat de waarde 'X' wordt opgehaald uit een subquery. Als dat zo is, verander dan de relevante regel in iets als:

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


  1. De eenvoudigste manier om meerdere spaties toe te voegen aan een string in MySQL - SPACE()

  2. Virtualmin:u hebt geen toegang tot deze MySQL-database na het wijzigen van het wachtwoord

  3. Waarom retourneert ISNUMERIC('.') 1?

  4. Automatisch verhogen na verwijderen in MySQL