PostgreSQL의 놀라움: CTE, DELETE, LIMIT의 예상치 못한 동작

2025-05-04
PostgreSQL의 놀라움: CTE, DELETE, LIMIT의 예상치 못한 동작

일괄 처리를 위해 Common Table Expression(CTE)과 DELETE...RETURNING, LIMIT을 결합하여 PostgreSQL을 사용했을 때 예상치 못한 동작이 발생했습니다. 한 행만 삭제하려고 했는데 여러 행이 삭제되었습니다. `EXPLAIN ANALYZE`를 통해 중첩 루프 반조인 최적화가 이루어지고 LIMIT 1 절이 여러 번 실행된다는 것을 알게 되었습니다. 해결책은 쿼리를 재구성하고 CTE를 피하며 DELETE의 WHERE 절에 직접 하위 쿼리를 사용하는 것이었습니다. 이는 CTE가 항상 쿼리 계획 최적화를 방지하는 것은 아니며, 중요한 작업에서는 계획을 신중하게 검토해야 함을 보여줍니다.

개발