Esprit & Schmackes

Autoupdate von Timestamp-Spalten in PostgreSQL

wie die MySQL-Syntax ON UPDATE CURRENT_TIMESTAMP in PostgreSQL umzusetzen ist so um die 143 Wörter

Um eine timestamp-Spalte in MySQL automatisch aktualisieren zu lassen, kann man dies als Bedingung im CREATE-Statement festlegen:

 

CREATE TABLE test (
modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

 

Bei PostgreSQL ist das nicht möglich. Stattdessen erstellt man hierfür eine Funktion und verbindet diese über Trigger mit den gewünschten Spalten (ich schätze bei MySQL läuft es im Hintergrund auch nicht anders ab).

 

CREATE OR REPLACE FUNCTION update_modified()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';

 

Die Funktion setzt die Spalte namens modified auf den aktuellen Timestamp. Zum Triggern dann die Prozedur mit der Tabelle verknüpfen:

 

CREATE TRIGGER update_modified BEFORE UPDATE
ON post FOR EACH ROW EXECUTE PROCEDURE
update_modified_column();

 

Hier dann bloß nicht AFTER UPDATE verwenden, sonst landet man in 'ner hübschen Endlosschleife.

Kommentare

was zu melden?