Máte pravdu, že potřebujete spouštěč, protože nastavení výchozí hodnoty pro sloupec vám nebude fungovat – výchozí hodnoty fungují pouze pro null
hodnoty a nepomohou vám zabránit prázdným hodnotám.
V postgresu existuje několik kroků k vytvoření spouštěče:
Krok 1:Vytvořte funkci, která vrací typ 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
Krok 2:Vytvořte spouštěč, který se spustí před insert, který umožňuje měnit hodnoty před jejich vložením, což vyvolá výše uvedenou funkci:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
A máte hotovo.
Podívejte se na výše uvedený kód spouštěný na SQLFIddle, který ukazuje, že funguje správně!
V komentáři uvádíte, že hodnota 'X'
je načteno z poddotazu. Pokud ano, změňte příslušný řádek takto:
NEW.C1 := (select some_column from some_table where some_condition);