Du har rätt att du behöver en utlösare, eftersom det inte fungerar för dig att ställa in ett standardvärde för kolumnen - standardvärden fungerar bara för null
värden och hjälper dig inte att förhindra tomma värden.
I postgres finns det ett par steg för att skapa en trigger:
Steg 1:Skapa en funktion som returnerar 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
Steg 2:Skapa en utlösare som aktiveras före infoga, som låter dig ändra värden innan de infogas, som anropar ovanstående funktion:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
Och du är klar.
Se ovanstående kod som körs på SQLFIddle som visar att den fungerar korrekt!
Du nämner i en kommentar att värdet 'X'
hämtas från en underfråga. Om så är fallet, ändra den relevanta raden så att något i stil med:
NEW.C1 := (select some_column from some_table where some_condition);