Tôi có một cò khá đơn giản:Postgres kích hoạt sau khi chèn truy cập MỚI
CREATE OR REPLACE FUNCTION f_log_datei()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO logs (aktion, tabelle, benutzer_id) VALUES(TG_OP, 'dateien', NEW.benutzer_id);
END; $$ LANGUAGE 'plpgsql';
CREATE TRIGGER log_datei AFTER INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH STATEMENT
EXECUTE PROCEDURE f_log_datei();
ghi bàn của tôi là như sau:
CREATE TABLE logs(
id int PRIMARY KEY DEFAULT NEXTVAL('logs_id_seq'),
zeit timestamp DEFAULT now(),
aktion char(6),
tabelle varchar(32),
alt varchar(256),
neu varchar(256),
benutzer_id int references benutzer(id)
);
Sau khi chèn một cái gì đó trong dateien tôi nhận được lỗi sau:
ERROR: record "new" is not assigned yet
DETAIL: The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT: SQL statement "INSERT INTO logs (aktion, tabelle, benutzer_id) VALUES(TG_OP, 'dateien', NEW.benutzer_id)"
PL/pgSQL function "f_log_datei" line 3 at SQL statement
Tại sao tôi gặp lỗi này? Tôi nhìn vào tài liệu và có vẻ như họ sử dụng mới theo cùng cách tôi làm.
Bạn cũng đã thêm 'RETURN NEW;' vào cuối hàm? – kgrittn
@kgrittn: Đó sẽ là lỗi * tiếp theo *, phải không? Nhưng vâng, tôi thậm chí không thấy điều đó và điều đáng nói đến khi chúng tôi ở đây. –
vâng tôi đã thêm câu lệnh 'RETURN' :) – soupdiver