Quiero que el código pueda actualizar automáticamente la marca de tiempo cuando se inserta una nueva fila, como puedo hacer en MySQL usando CURRENT_TIMESTAMP.
¿Cómo podré lograr esto en 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
fuente
fuente
timestamp
está definido por la especificación SQL como una abreviatura deTIMESTAMP WITHOUT TIME ZONE
. Es casi seguro que no es lo que quieres, como lo explicó el experto de Postgres David E. Wheeler . El otro tipo,TIMESTAMP WITH TIME ZONE
es probablemente lo que desea, utilizando cualquier información de compensación de zona horaria pasada para ajustar la fecha y hora a UTC (pero en realidad no almacena esa información de zona horaria a pesar del nombre del tipo).Respuestas:
Para llenar la columna durante la inserción, use un
DEFAULT
valor:Tenga en cuenta que el valor de esa columna se puede sobrescribir explícitamente proporcionando un valor en la
INSERT
declaración. Si desea evitar eso, necesita un disparador .También necesita un activador si necesita actualizar esa columna cada vez que se actualiza la fila (como lo menciona EJ Brennan )
Tenga en cuenta que el uso de palabras reservadas para los nombres de columna generalmente no es una buena idea. Deberías encontrar un nombre diferente a
timestamp
fuente
timestamp
entimestamp_
. Aún mejor sería un nombre más descriptivo comorow_created_
.Tendrá que escribir un activador de inserción y, posiblemente, un activador de actualización si desea que cambie cuando se cambia el registro. Este artículo lo explica muy bien:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
fuente
Actualización de marca de tiempo, solo si los valores cambiaron
Basado en el enlace de EJ y agregue una declaración if desde este enlace ( https://stackoverflow.com/a/3084254/1526023 )
fuente
El uso de 'now ()' como valor predeterminado genera automáticamente la marca de tiempo.
fuente