Envejecimiento automático (eliminación) de registros antiguos en Postgres


15

¿Postgres tiene alguna función para admitir registros antiguos obsoletos?

Quiero usar Postgres para iniciar sesión, como una especie de cola, donde los registros (eventos de registro) anteriores a dos semanas se eliminan automáticamente.


Usar particionamiento. Simplemente eliminar registros no reducirá el tamaño de la tabla en el disco.
sivann

@sivann ¿Su recomendación no supone que su problema es el tamaño del disco? Si su problema es el tiempo de ejecución de la consulta, parece que la eliminación podría ser una respuesta posiblemente más simple que la partición, ¿no? (Todavía estoy tratando de entender esto)
stephenmm

1
El problema es simplemente que los registros de registro ya no son interesantes después de un cierto período de tiempo. La eliminación de filas antiguas debería dejar espacio para nuevas filas nuevas.
Basil Bourque

Respuestas:


15

No hay una función integrada para eliminar filas automáticamente en un régimen basado en el tiempo (que yo sepa).

Puede ejecutar un cron-job diario (usted decide) para programar DELETEcomandos simples o usar pgAgent para tal fin.

O podría usar la partición con particiones semanales que heredan de una tabla maestra , vamos a llamarlo log. Eso haría que la eliminación fuera muy barata : solo mantenga las últimas dos semanas y elimine las particiones más antiguas.

Cree una RULEo una TRIGGERen la tabla maestra que redirija los INSERT a la partición de la semana actual en función de la hora del sistema. Siempre inicie sesión en la tabla maestra log. Cree tablas secundarias con anticipación. Haga eso con varias semanas de anticipación para estar seguro y ejecute un trabajo cron semanal que agregue futuras tablas secundarias ...

Hay ejemplos de código en el manual .
Respuesta relacionada con una función plpgsql que crea tablas automáticamente:

La solución relacionada recrea un RULEpara redirigir INSERT. Una función de disparo podría escribir dinámicamente en la partición actual ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.