Estoy tratando de marcar la fecha y la versión de las filas en una tabla a medida que se actualizan. Tengo el siguiente tigre:
CREATE OR REPLACE FUNCTION trigger_set_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); NEW.version = OLD.version + 1; RETURN NEW; END; $$ LANGUAGE plpgsql;Que agrego a mi tabla así:
CREATE TRIGGER exchange_order_trigger_1 BEFORE UPDATE ON exchange_order FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp(); Tengo un segundo disparador que usa PERFORM pg_notify('table_watch', textPayload); para notificar a mi aplicación nodejs de cada cambio enviándolo a la fila como una cadena json. La aplicación nodejs simplemente registra cada fila en la consola.
Pensé que funcionaba perfectamente, pero noté que las marcas de tiempo y el número de versión no aumentan al mismo tiempo. Aquí hay un ejemplo de la salida (en el orden en que se recibieron):
"updated_at":"2020-07-16T06:43:40.234227+00:00","version":1 "updated_at":"2020-07-16T06:43:41.170334+00:00","version":2 "updated_at":"2020-07-16T06:43:50.930157+00:00","version":3 "updated_at":"2020-07-16T06:43:46.528429+00:00","version":4 "updated_at":"2020-07-16T06:43:51.717432+00:00","version":5 "updated_at":"2020-07-16T06:43:48.300129+00:00","version":6 "updated_at":"2020-07-16T06:43:53.103254+00:00","version":7Como puede ver, los números de versión aumentan como se esperaba, pero las marcas de tiempo no. La marca de tiempo de la versión 4 es anterior a la marca de tiempo de la versión 3, por ejemplo.
Cuando miro los otros datos en las filas, parece que el valor updated_at es el correcto y la versión es incorrecta.
¿Qué he hecho mal? Cualquier ayuda muy apreciada.
Uso de una instancia alojada en la plataforma de Google Cloud de Postgres 9.6