Hàm của bạn có thể trông giống như thế này trong Postgres 9.0 trở lên:
CREATE OR REPLACE FUNCTION dummytest_insert_trigger()
RETURNS trigger AS
$func$
DECLARE
v_partition_name text := quote_ident('dummyTest'); -- assign at declaration
BEGIN
IF NEW.datetime IS NOT NULL THEN
EXECUTE
'INSERT INTO ' || v_partition_name || ' VALUES ($1,$2)'
USING NEW.id, NEW.datetime;
END IF;
RETURN NULL; -- You sure about this?
END
$func$ LANGUAGE plpgsql;
Giới thiệu về RETURN NULL
:
- Để bỏ qua kết quả BEFORE TRIGGER của PostgreSQL?
Tôi khuyên bạn không nên sử dụng các mã nhận dạng trường hợp hỗn hợp. Với định dạng format( .. %I ..)
hoặc quote_ident()
, bạn sẽ nhận được một bảng có tên "dummyTest"
, mà bạn sẽ phải báo giá gấp đôi cho phần còn lại của sự tồn tại của nó. Có liên quan:
- Tên cột PostgreSQL có phân biệt chữ hoa chữ thường không?
Sử dụng chữ thường thay thế:
quote_ident('dummytest')
Thực sự không có ích gì khi sử dụng SQL động với EXECUTE
miễn là bạn có tên bảng tĩnh. Nhưng đó có lẽ chỉ là một ví dụ đơn giản?