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

Postgresql inserisce il trigger per impostare il valore

Hai ragione sul fatto che hai bisogno di un attivatore, perché l'impostazione di un valore predefinito per la colonna non funzionerà per te - i valori predefiniti funzionano solo per null valori e non ti aiutano a prevenire valori vuoti.

In postgres ci sono un paio di passaggi per creare un trigger:

Passaggio 1:crea una funzione che restituisca il tipo 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

Passaggio 2:crea un attivatore che si attiva prima insert, che permette di modificare i valori prima che vengano inseriti, che richiama la funzione sopra:

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

E il gioco è fatto.

Guarda il codice sopra in esecuzione su SQLFIddle che ne dimostra il corretto funzionamento!

In un commento hai menzionato il valore 'X' viene recuperato da una sottoquery. In tal caso, cambia la riga pertinente in modo che qualcosa come:

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