mam dość prosty spust:Postgres spust po wkładce dostępu NEW
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();
Moje dzienniki tabeli jest następująca:
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)
);
Po włożeniu czegoś w Dateien pojawia się następujący błąd:
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
Dlaczego otrzymałem ten błąd? Zajrzałem do dokumentacji i wygląda na to, że używają nowych w taki sam sposób jak ja.
Czy dodałeś również "RETURN NEW;" na końcu funkcji? – kgrittn
@kgrittn: To byłby * następny * błąd, nie? Ale tak, nawet tego nie zauważyłem i warto o tym wspomnieć, kiedy tu jesteśmy. –
tak, dodałem wypowiedź 'RETURN' :) – soupdiver