Comportement inattendu de PostgreSQL : CTE, DELETE et LIMIT
2025-05-04
Un comportement inattendu de PostgreSQL est apparu lors de l'utilisation d'une expression de table commune (CTE) avec DELETE ... RETURNING et LIMIT pour traiter un lot d'éléments. L'intention était de supprimer une seule ligne, mais plusieurs lignes ont été supprimées. `EXPLAIN ANALYZE` a révélé une optimisation de jointure semi-join imbriquée, entraînant l'exécution multiple de la clause LIMIT 1. La solution a consisté à restructurer la requête, en évitant la CTE et en utilisant une sous-requête directement dans la clause WHERE de DELETE. Cela souligne que les CTE n'empêchent pas toujours les optimisations du plan de requête, et un examen minutieux du plan est crucial pour les opérations critiques.
Développement
Optimisation de requête