PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Gatilho de inserção do Postgresql para definir valor


Você está certo de que precisa de um gatilho, porque definir um valor padrão para a coluna não funcionará para você - os valores padrão funcionam apenas para null valores e não o ajudam a evitar valores em branco.

No postgres existem algumas etapas para criar um gatilho:

Etapa 1:crie uma função que retorne o 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

Etapa 2:crie um acionador que acione antes insert, que permite alterar valores antes de serem inseridos, que invoca a função acima:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()

E você está feito.

Veja o código acima executando no SQLFIddle demonstrando que está funcionando corretamente!

Você menciona em um comentário que o valor 'X' é recuperado de uma subconsulta. Em caso afirmativo, altere a linha relevante para algo como:
NEW.C1 := (select some_column from some_table where some_condition);