ich beschäftige mich seit kurzem mit Triggern und Funktionen. Mein Problem ist folgendes:
Wenn eine Zeile in einer bestimmten Tabelle eingefügt wird soll dies der Trigger mitbekommen, ein Feld aus der Zeile auslesen und den Inhalt an eine Funktion übergeben.
Die Angabe von NEW.username in der Triggerdefinition ist falsch. Diese Variable steht automatisch innerhalb der Funktion zur Verfügung, die muss nicht definiert oder übergeben werden.
CREATE TABLE p(
id text NOT NULL, – Id des Datensatzes
bemerkung text, – Bemerkungen
“timestamp” timestamp with time zone DEFAULT (‘now’::text)::timestamp without time zone, – Zeit der Aenderung
CONSTRAINT p_pkey PRIMARY KEY (id)
);
CREATE OR REPLACE FUNCTION timestamp_upd()
RETURNS trigger AS
$BODY$BEGIN
NEW.timestamp:=‘now’;
RETURN NEW;
END;$BODY$
LANGUAGE ‘plpgsql’ VOLATILE;
CREATE TRIGGER upd_timestamp_p
BEFORE INSERT OR UPDATE
ON p
FOR EACH ROW
EXECUTE PROCEDURE timestamp_upd();
Hatte ich (wahrscheinlich) durch irgendwelche dumps mit alten Tools verloren.
Ursprünglich stand da auch mal now().
Benutze die Funktion schon seit Jahren …
CREATE TABLE p(
id text NOT NULL, – Id des Datensatzes
bemerkung text, – Bemerkungen
“timestamp” timestamp with time zone DEFAULT now(), – Zeit der Aenderung
CONSTRAINT p_pkey PRIMARY KEY (id)
);
CREATE OR REPLACE FUNCTION timestamp_upd()
RETURNS trigger AS
$BODY$
BEGIN
NEW.timestamp:=now();
RETURN NEW;
END;
$BODY$
LANGUAGE ‘plpgsql’ VOLATILE;
CREATE TRIGGER upd_timestamp_p
BEFORE INSERT OR UPDATE
ON p
FOR EACH ROW
EXECUTE PROCEDURE timestamp_upd();