Sie haben Recht, dass Sie einen Trigger benötigen, da das Festlegen eines Standardwerts für die Spalte für Sie nicht funktioniert - Standardwerte funktionieren nur für null
Werte und helfen Ihnen nicht dabei, leere Werte zu verhindern.
In Postgres gibt es ein paar Schritte zum Erstellen eines Triggers:
Schritt 1:Erstellen Sie eine Funktion, die den Typ trigger
zurückgibt :
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
Schritt 2:Erstellen Sie einen Trigger, der vorher ausgelöst wird insert, mit dem Sie Werte ändern können, bevor sie eingefügt werden, was die obige Funktion aufruft:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
Und Sie sind fertig.
Sehen Sie sich den obigen Code an, der auf SQLFIddle ausgeführt wird und demonstriert, dass es richtig funktioniert!
Sie erwähnen in einem Kommentar, dass der Wert 'X'
wird aus einer Unterabfrage abgerufen. Wenn ja, ändern Sie die betreffende Zeile so in etwa:
NEW.C1 := (select some_column from some_table where some_condition);