Eliminación de filas antiguas en un esquema utilizando procedimientos almacenados.
¿Existe alguna manera de seleccionar todas las tablas en un esquema y eliminar las filas que no cumplen con la condición (mayores que cierta fecha) en un solo procedimiento? Puedo hacer lo mismo usando dos consultas separadas, sería algo así: SELECT table_name FROM information_schema.tables WHERE table_schema = 'nombreEsquema'
y luego DELETE FROM table_name WHERE time < now()-'12 months'::interval;
pero no sé cómo hacer lo mismo utilizando un único procedimiento almacenado. Supongo que debería utilizar un bucle en algún tipo de consulta SELECT, pero como nunca he trabajado realmente con bucles en postgres, siempre recibo algún tipo de excepción tratando de hacer esto. Cualquier ayuda será muy apreciada.
davy.ai
Sí, es posible seleccionar todas las tablas en un esquema y eliminar filas que no cumplan con la condición (más antiguas que una cierta fecha) en un solo procedimiento almacenado. Un enfoque para lograr esto es utilizar consultas de SQL dinámicas y recorrer los resultados de la consulta que devuelve la lista de tablas en el esquema.
Aquí hay un ejemplo de procedimiento que utiliza SQL dinámico para recorrer la lista de tablas en el esquema y eliminar filas más antiguas que una cierta fecha:
Puede llamar a este procedimiento con el nombre del esquema y la edad máxima de las filas que desea eliminar:
Tenga en cuenta que este procedimiento asume que todas las tablas en el esquema tienen una columna llamada “time” que contiene una marca de tiempo o una fecha que puede usar para verificar la edad de las filas. Si sus tablas tienen diferentes nombres de columna o tipos de datos, deberá modificar la consulta dinámica en consecuencia.