IT

Postgres: "오류: 캐시된 계획은 결과 유형을 변경할 수 없습니다."

itgroup 2023. 5. 18. 20:59
반응형

Postgres: "오류: 캐시된 계획은 결과 유형을 변경할 수 없습니다."

이 예외는 Postgre에 의해 던져지고 있습니다.SQL 8.3.7 서버에서 내 애플리케이션으로.이 오류가 무엇을 의미하는지 그리고 제가 그것에 대해 무엇을 할 수 있는지 아는 사람이 있습니까?

ERROR:  cached plan must not change result type
STATEMENT:  select code,is_deprecated from country where code=$1

저는 이 오류의 원인을 알아냈습니다.

내 애플리케이션이 데이터베이스 연결을 열고 실행을 위해 SELECT 문을 준비했습니다.

한편 다른 스크립트가 데이터베이스 테이블을 수정하여 위의 SELECT 문에서 반환되는 열 중 하나의 데이터 유형을 변경하고 있습니다.

데이터베이스 테이블이 수정된 후 응용 프로그램을 다시 시작하여 이 문제를 해결했습니다.이렇게 하면 데이터베이스 연결이 재설정되어 준비된 문이 오류 없이 실행될 수 있습니다.

구글링으로 이곳에 착륙하는 모든 사람들을 위해 이 답변을 추가합니다.ERROR: cached plan must not change result typeJava/JDBC 응용 프로그램의 컨텍스트에서 문제를 해결하려고 할 때.

DB를 사용하는 백엔드 앱이 실행되는 동안 스키마 업그레이드(즉, DDL 문)를 실행하여 오류를 안정적으로 재현할 수 있었습니다.애플리케이션이 스키마 업그레이드로 인해 변경된 테이블(즉, 변경된 테이블에서 업그레이드 전후에 애플리케이션이 쿼리를 실행함)을 쿼리하고 있는 경우, postgres 드라이버는 일부 스키마 세부 정보를 캐싱하기 때문에 이 오류를 반환합니다.

다음을 구성하여 문제를 방지할 수 있습니다.pgjdbc와 함께 운전하는 사람.autosave=conservative이 옵션을 사용하면 드라이버가 캐시하는 세부 정보를 플러시할 수 있으므로 서버를 이동하거나 연결 풀을 플러시하거나 해결 방법을 찾을 필요가 없습니다.

Postgres 9.6(AWS RDS)에서 재현되었으며 초기 테스트 결과 이 옵션으로 문제가 완전히 해결된 것으로 나타났습니다.

설명서: https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters

다음을 참조할 수 있습니다.pgjdbc Github 451호에서는 문제의 자세한 내용과 역사를 확인할 수 있습니다.


JRuby ActiveRecords 사용자는 다음을 봅니다. https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/connection_methods.rb#L60


성능 관련 참고:

위 링크에 보고된 성능 문제에 따라 응용 프로그램을 맹목적으로 켜기 전에 성능/로드/소크 테스트를 수행해야 합니다.

RDS AWS 되는 내 하는 경우Postgres 10, 사용 가능conservative설정하면 데이터베이스 서버에서 추가 CPU 사용량이 발생합니다.많지는 않았지만, 저는 심지어 그것을 볼 수 있을 뿐이었습니다.autosave부하 테스트가 사용 중인 모든 쿼리를 튜닝하고 부하 테스트를 강하게 푸시하기 시작한 후 기능이 측정 가능한 양의 CPU를 사용하는 것으로 표시됩니다.

우리도 비슷한 문제에 직면해 있었습니다.우리의 애플리케이션은 여러 스키마에서 작동합니다.스키마를 변경할 때마다 이 문제가 발생하기 시작했습니다.

준비 설정JDBC 매개 변수 내부의 Threshold=0 매개 변수는 데이터베이스 수준에서 문 캐싱을 비활성화합니다.이것으로 우리는 해결되었습니다.

이 오류가 발생했습니다. 수동으로 선택 실패 쿼리를 실행했더니 오류가 수정되었습니다.

언급URL : https://stackoverflow.com/questions/2783813/postgres-error-cached-plan-must-not-change-result-type

반응형