PostgreSQL Überraschung: CTEs, DELETE und LIMITs unerwartetes Verhalten

2025-05-04
PostgreSQL Überraschung: CTEs, DELETE und LIMITs unerwartetes Verhalten

Ein überraschendes Verhalten von PostgreSQL trat auf, als eine Common Table Expression (CTE) mit DELETE ... RETURNING und LIMIT zur Verarbeitung eines Batches von Elementen verwendet wurde. Die Absicht war, nur eine Zeile zu löschen, aber mehrere Zeilen wurden gelöscht. `EXPLAIN ANALYZE` zeigte eine optimierte, verschachtelte Halbverbindung, wodurch die LIMIT 1-Klausel mehrfach ausgeführt wurde. Die Lösung bestand darin, die Abfrage umzustrukturieren, die CTE zu vermeiden und eine Unterabfrage direkt in der WHERE-Klausel von DELETE zu verwenden. Dies unterstreicht, dass CTEs nicht immer Query-Plan-Optimierungen verhindern und eine sorgfältige Prüfung des Plans für kritische Operationen unerlässlich ist.

Entwicklung Query-Optimierung