Anda benar bahwa Anda memerlukan pemicu, karena menyetel nilai default untuk kolom tidak akan berfungsi untuk Anda - nilai default hanya berfungsi untuk null
nilai dan tidak membantu Anda dalam mencegah nilai kosong.
Di postgres ada beberapa langkah untuk membuat pemicu:
Langkah 1:Buat fungsi yang mengembalikan jenis 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
Langkah 2:Buat pemicu yang diaktifkan sebelum insert, yang memungkinkan Anda untuk mengubah nilai sebelum dimasukkan, yang memanggil fungsi di atas:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
Dan selesai.
Lihat kode di atas yang dieksekusi pada SQLFIddle yang menunjukkannya berfungsi dengan benar!
Anda menyebutkan dalam komentar bahwa nilai 'X'
diambil dari subquery. Jika demikian, ubah baris yang relevan menjadi seperti:
NEW.C1 := (select some_column from some_table where some_condition);