안녕하세요.어느새 평균 기온이 20도 미만으로 떨어지는 날이 왔습니다.
2024년도 3달이 채 안 남았습니다... 아자아자!
이번에는 PostgresQL을 사용하면서 겪었던 pq: cached plan must not change result type 에러와 조치 방법을 기록해보겠습니다.
1. 에러 발생
어느 날 서버를 배포하고 나니 데이터 조회/수정에 실패하는 버그가 발생했습니다.
분명 로컬 환경에서 아무런 버그 없이 정상적으로 동작하는 것을 확인했는데도
서버가 남긴 로그를 살펴보니 pq: cached plan must not change result type 에러가 남겨져 있더군요...
지금까지 본 적 없는 에러여서 매우 당황했습니다만
구글에 검색해보니 자료가 많아보여서 마음이 편해졌습니다 ㅎㅎ
찾아보니 스키마를 업데이트 하는 중에 데이터를 조회하면
제가 겪었던 문제가 발생할 수 있다는 것을 알게 되었습니다!
1. 서버가 배포되면서 DB 마이그레이션 코드가 실행되었고
2. 이 때 DB 조회 쿼리(와일드카드 * 가 포함된)가 요청되면서 유효하지 않은 캐싱된 쿼리가 사용된 것이었습니다.
2. 원인 & 조치 방법
pq: cached plan must not change result type 에러가 발생하는 원인은 진짜 쿼리가 캐싱되어 있는 것이 원인이었습니다.
- 조금 더 정확히는 실행 계획이 캐싱되는 것이 원인이었는데 자세히 공부하고 정리해보겠습니다.
제가 찾은 조치 방법은 다음과 같습니다.
- 문제가 발생한 어플리케이션 재실행
- SELECT 절에 '*' 사용하지 않기
이 조치 방법들이 왜 동작하는지 설명해드리고 싶지만 지금은 아는 것이 부족하네요 ㅜㅠ
반응형
'데이터베이스 > PostgresQL' 카테고리의 다른 글
PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 #2 - 옵션 별 실제 동작 확인하기 (0) | 2024.04.02 |
---|---|
데이터베이스 테이블 rotation - DB에 데이터가 계속해서 쌓여서 용량이 꽉차면 어떡하죠...? (0) | 2023.10.06 |
PostgreSQL 계정 생성하기 (0) | 2022.11.13 |
PostgreSQL constraint - DB가 할 수 있는건 DB한테 맡기자! (0) | 2022.10.21 |
PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요? (0) | 2022.10.15 |