PostgreSQL 9.5 introdujo una nueva característica relacionada con este problema:commit timestamps .
Solo necesita activar track_commit_timestamp
en postgresql.conf
(¡y reinicie!) para comenzar a rastrear las marcas de tiempo de confirmación. Entonces puedes consultar:
SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Lea el capítulo "Commit timestamp tracking"
en Postgres Wiki.
Utilidad relacionada funciones en el manual
.
La volatilidad de la función es solo VOLATILE
porque los ID de transacción (xid
) puede ajustarse por definición. Entonces no puede crear un índice funcional en él.
Podrías falsificar IMMUTABLE
volatilidad en un contenedor de funciones para aplicaciones en un marco de tiempo limitado, pero debe ser consciente de las implicaciones. Caso relacionado con más explicación:
- ¿Admite PostgreSQL "insensible al acento " colaciones?
- ¿Cómo afectan las palabras clave INMUTABLE, ESTABLE y VOLÁTIL el comportamiento de la función?
Para muchos casos de uso (¿como el suyo?) que solo están interesados en la secuencia de confirmaciones (y no en el tiempo absoluto), podría ser más eficiente trabajar con xmin
convertir a bigint
"directamente" (xmin::text::bigint
) en lugar de marcas de tiempo de confirmación. (xid
es un entero sin signo internamente, la mitad superior que no cabe en un integer
con signo .) Una vez más, tenga en cuenta las limitaciones debidas a un posible ajuste de xid.
Por la misma razón, las marcas de tiempo de confirmación no se conservan indefinidamente . Para bases de datos pequeñas o medianas, xid
el ajuste casi nunca ocurre, pero eventualmente lo hará si el clúster está activo durante el tiempo suficiente. Lea el capítulo "Prevención de fallas de ajuste de ID de transacción" en el manual para más detalles.