Bạn đúng là bạn cần một trình kích hoạt, bởi vì việc đặt giá trị mặc định cho cột sẽ không hoạt động với bạn - các giá trị mặc định chỉ hoạt động cho null
và không giúp bạn trong việc ngăn chặn các giá trị trống.
Trong postgres, có một số bước để tạo trình kích hoạt:
Bước 1:Tạo một hàm trả về loại 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
Bước 2:Tạo trình kích hoạt kích hoạt trước đó insert, cho phép bạn thay đổi các giá trị khi chúng được chèn, gọi hàm trên:
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
Và bạn đã hoàn tất.
Xem đoạn mã trên đang thực thi trên SQLFIddle chứng tỏ nó hoạt động chính xác!
Bạn đề cập trong một nhận xét rằng giá trị 'X'
được truy xuất từ một truy vấn con. Nếu vậy, hãy thay đổi dòng có liên quan như sau:
NEW.C1 := (select some_column from some_table where some_condition);