working type sintaxis parametros not for error current_timestamp column mysql postgresql

mysql - type - Postgresql timestamp actual en la actualización



sintaxis datetime mysql (3)

¿Cuál es el equivalente de postgres del código mysql a continuación?

CREATE TABLE t1 ( created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE TABLE t2 ( created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );

Según la respuesta de Alex Brasetvik a continuación, parece que debo ir con los desencadenantes, mi problema es que tengo varias tablas t1, t2 ... con campos creados y modificados, ¿es posible escribir un procedimiento generalizado?

--update casi listo

CREATE FUNCTION update_timestamp() RETURNS trigger AS $update_timestamp$ BEGIN NEW.modified := current_timestamp; RETURN NEW; END; $update_timestamp$ LANGUAGE plpgsql; CREATE TRIGGER update_timestamp BEFORE INSERT OR UPDATE ON t1 FOR EACH ROW EXECUTE PROCEDURE update_timestamp(); CREATE TRIGGER update_timestamp BEFORE INSERT OR UPDATE ON t2 FOR EACH ROW EXECUTE PROCEDURE update_timestamp();



Gracias por la información Mithun y Alex Brasetvik.

Me gustaría añadir un pequeño pellizco al gatillo. Como es probable que queramos que la columna modificada almacene la marca de tiempo cuando se modificó por última vez la fila, no cuando fue el objetivo de una instrucción UPDATE, tenemos que comparar el valor nuevo y el valor antiguo de la fila. Actualizamos la columna modificada solo si estos dos valores difieren.

CREATE OR REPLACE FUNCTION update_modified_timestamp() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN IF (NEW != OLD) THEN NEW.modified = CURRENT_TIMESTAMP; RETURN NEW; END IF; RETURN OLD; END; $$;

Este activador garantiza que la columna modificada se actualice solo si la operación ACTUALIZACIÓN cambia realmente los valores almacenados en la fila.


Solo asegúrate de que todas las tablas tengan el mismo nombre de columna:

CREATE OR REPLACE FUNCTION upd_timestamp() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN NEW.modified = CURRENT_TIMESTAMP; RETURN NEW; END; $$; CREATE TRIGGER t_name BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE PROCEDURE upd_timestamp();