관리 메뉴

밤 늦게까지 여는 카페

PostgresQL 에러 pq: cached plan must not change result type 에러 작업 본문

데이터베이스/PostgresQL

PostgresQL 에러 pq: cached plan must not change result type 에러 작업

Jㅐ둥이 2024. 10. 26. 08:22
반응형

안녕하세요.어느새 평균 기온이 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 에러가 발생하는 원인은 진짜 쿼리가 캐싱되어 있는 것이 원인이었습니다.

  • 조금 더 정확히는 실행 계획이 캐싱되는 것이 원인이었는데 자세히 공부하고 정리해보겠습니다.

 

제가 찾은 조치 방법은 다음과 같습니다.

  1. 문제가 발생한 어플리케이션 재실행
  2. SELECT 절에 '*' 사용하지 않기

이 조치 방법들이 왜 동작하는지 설명해드리고 싶지만 지금은 아는 것이 부족하네요 ㅜㅠ

반응형