database - sirve - postgresql wikipedia
¿Cómo actualizo automáticamente una marca de tiempo en PostgreSQL? (4)
Actualización de la marca de tiempo, solo si los valores han cambiado
Basado en el enlace de EJ y agregue una declaración if desde este enlace ( https://stackoverflow.com/a/3084254/1526023 )
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN
NEW.modified = now();
RETURN NEW;
ELSE
RETURN OLD;
END IF;
END;
$$ language ''plpgsql'';
Quiero que el código pueda actualizar automáticamente la marca de tiempo cuando se inserte 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
)
Deberá escribir un desencadenador de inserción y, posiblemente, un activador de actualización si desea que cambie cuando se cambie el registro. Este artículo lo explica muy bien:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN NEW.modified = now(); RETURN NEW; END; $$ language ''plpgsql'';
Aplique el gatillo de esta manera:
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON customer FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
El uso de ''now ()'' como valor predeterminado genera automáticamente marca de tiempo.
Para rellenar la columna durante la inserción, use un valor DEFAULT
:
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp default current_timestamp
)
Tenga en cuenta que el valor de esa columna se puede sobrescribir explícitamente mediante el suministro de un valor en la INSERT
. Si quiere evitar eso, necesita un trigger .
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. Debes encontrar un nombre diferente a la timestamp
de timestamp