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