En PostgreSQL tengo una consulta como la siguiente que eliminará 250k filas de una fila de la tabla 1m:Eliminación de muchas filas sin encerrarlos
DELETE FROM table WHERE key = 'needle';
La consulta tarda más de una hora de ejecutar y durante ese tiempo, la las filas afectadas están bloqueadas para escritura. Eso no es bueno porque significa que muchas consultas de actualización tienen que esperar a que se complete la consulta de eliminación grande (y luego fallarán porque las filas desaparecieron debajo de ellos, pero eso está bien). Necesito una forma de segmentar esta gran consulta en varias partes para que causen la menor interferencia posible con las consultas de actualización. Por ejemplo, si la consulta de eliminación se puede dividir en fragmentos, cada uno con 1000 filas en ellos, las otras consultas de actualización a lo sumo tendrán que esperar una consulta de eliminación que involucre 1000 filas.
DELETE FROM table WHERE key = 'needle' LIMIT 10000;
Esa consulta funcionaría muy bien, pero lamentablemente no existe en postgres.
¡Perfecto! (No puedo creer que no haya pensado en esto yo mismo) –