sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo enumerar todas las tablas con cambios de datos en las últimas 24 horas?

Primero considere mi comentario.

Postgres hasta 9.4 inclusive no registra por sí mismo las marcas de tiempo cuando las filas se insertaron o actualizaron.

Hay algunas columnas del sistema en los encabezados de las filas que puede ayudar en el trabajo forense. El orden físico de las filas (ctid ) puede ser un indicador si nada más le ha pasado a la mesa desde entonces. En casos simples, las nuevas filas se agregan al final físico de una tabla cuando se insertan, por lo que el ctid indica lo que se insertó por última vez, hasta que algo cambie en la tabla. Postgres es libre de reorganizar el orden físico de las filas a voluntad, por ejemplo, con VACUUM . Cualquier UPDATE también escribe una nueva versión de fila, que puede cambiar la posición física. La nueva versión no tiene que estar al final de la tabla. Postgres intenta mantener la nueva versión de la fila en la misma página de datos si es posible (Actualización CALIENTE ) ...

Dicho esto, aquí hay una consulta simple para obtener el físicamente últimas filas de una tabla determinada:

SELECT ctid, *
FROM   big
ORDER  BY ctid DESC
LIMIT  10;

Respuestas relacionadas en dba.SE con información detallada:

El ID de transacción de inserción xmin puede ser útil:

Si tiene una copia de seguridad para la base de datos de prueba justo antes del incidente, eso sería ser útil Restaure el estado anterior a un esquema separado de la base de datos de prueba y compare las tablas...

Por lo general, agrego uno o dos timestamptz columnas a tablas importantes para saber cuándo se insertó la fila y/o cuándo se actualizó por última vez. Eso sería ser tremendamente útil para usted en este momento...

¿Qué sería También sería excelente para usted:las funciones "temporal" introducidas en el estándar SQL con SQL:2011 . Pero eso aún no está implementado en Postgres.
Hay una página en Postgres Wiki .
También hay una extensión no oficial en PGXN . No lo he probado y no puedo decir qué tan lejos está.

PostgreSQL 9.5 introduce una función para registrar marcas de tiempo de confirmación (como @Craig comentó ). Debe habilitarse manualmente antes de que comience a grabar.El manual:

Y algunas funciones para trabajar con él.