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