Ich möchte, dass der Code den Zeitstempel automatisch aktualisieren kann, wenn eine neue Zeile eingefügt wird, wie dies in MySQL mit CURRENT_TIMESTAMP möglich ist.
Wie kann ich dies in PostgreSQL erreichen?
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp
)
database
postgresql
timestamp
Aaron
quelle
quelle
timestamp
durch die SQL-Spezifikation als Abkürzung für definiertTIMESTAMP WITHOUT TIME ZONE
. Das ist mit ziemlicher Sicherheit nicht das, was Sie wollen, wie der Postgres-Experte David E. Wheeler erklärt hat . Der andere TypTIMESTAMP WITH TIME ZONE
ist wahrscheinlich das, was Sie möchten, indem Sie alle übergebenen Zeitzonenversatzinformationen verwenden, um die Datums- und Uhrzeit auf UTC anzupassen (aber diese Zeitzoneninformationen trotz des Typnamens nicht tatsächlich speichern).Antworten:
Verwenden Sie einen
DEFAULT
Wert , um die Spalte beim Einfügen zu füllen:Beachten Sie, dass der Wert für diese Spalte explizit überschrieben werden kann, indem ein Wert in der
INSERT
Anweisung angegeben wird. Wenn Sie dies verhindern möchten, benötigen Sie einen Auslöser .Sie benötigen auch einen Auslöser, wenn Sie diese Spalte bei jeder Aktualisierung der Zeile aktualisieren müssen (wie von EJ Brennan erwähnt ).
Beachten Sie, dass die Verwendung reservierter Wörter für Spaltennamen normalerweise keine gute Idee ist. Sie sollten einen anderen Namen als finden
timestamp
quelle
timestamp
intimestamp_
. Noch besser wäre ein aussagekräftigerer Name wierow_created_
.Sie müssen einen Einfügetrigger und möglicherweise einen Aktualisierungstrigger schreiben, wenn Sie möchten, dass er sich ändert, wenn der Datensatz geändert wird. Dieser Artikel erklärt es ganz nett:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
quelle
Aktualisieren des Zeitstempels nur, wenn sich die Werte geändert haben
Basierend auf dem Link von EJ und fügen Sie eine if-Anweisung von diesem Link hinzu ( https://stackoverflow.com/a/3084254/1526023 ).
quelle
Wenn Sie 'now ()' als Standardwert verwenden, wird automatisch ein Zeitstempel generiert.
quelle