tutorial sirve query que para historia database postgresql

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