Chcę, aby kod mógł automatycznie aktualizować znacznik czasu po wstawieniu nowego wiersza, tak jak mogę to zrobić w MySQL za pomocą CURRENT_TIMESTAMP.
Jak mogę to osiągnąć w PostgreSQL?
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
źródło
źródło
timestamp
jest zdefiniowany w specyfikacji SQL jako skrót odTIMESTAMP WITHOUT TIME ZONE
. Jak wyjaśnił ekspert Postgres, David E. Wheeler, prawie na pewno nie tego chcesz . Drugi typTIMESTAMP WITH TIME ZONE
jest prawdopodobnie tym, czego potrzebujesz, używając wszelkich przekazanych informacji o przesunięciu strefy czasowej, aby dostosować datę i godzinę do czasu UTC (ale w rzeczywistości nie przechowując informacji o strefie czasowej pomimo nazwy typu).Odpowiedzi:
Aby wypełnić kolumnę podczas wstawiania, użyj
DEFAULT
wartości:Należy zauważyć, że wartość dla tej kolumny można jawnie zastąpić, podając wartość w
INSERT
instrukcji. Jeśli chcesz temu zapobiec, potrzebujesz wyzwalacza .Potrzebujesz również wyzwalacza, jeśli chcesz zaktualizować tę kolumnę za każdym razem, gdy aktualizowany jest wiersz (jak wspomniał EJ Brennan )
Zwróć uwagę, że używanie słów zastrzeżonych w nazwach kolumn zwykle nie jest dobrym pomysłem. Powinieneś znaleźć inną nazwę niż
timestamp
źródło
timestamp
wtimestamp_
. Jeszcze lepsza byłaby nazwa bardziej opisowa, taka jakrow_created_
.Będziesz musiał napisać wyzwalacz wstawiania i możliwy wyzwalacz aktualizacji, jeśli chcesz, aby zmienił się po zmianie rekordu. Ten artykuł wyjaśnia to całkiem ładnie:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
źródło
Aktualizacja sygnatury czasowej, tylko jeśli wartości uległy zmianie
Na podstawie linku EJ i dodaj oświadczenie if z tego linku ( https://stackoverflow.com/a/3084254/1526023 )
źródło
Użycie „now ()” jako wartości domyślnej automatycznie generuje znacznik czasu.
źródło