DBAtlas · 데이터베이스 운영 아틀라스

2F003: prohibited_sql_statement_attempted

PostgreSQL

의미

SQL 함수/루틴 안에서 해당 컨텍스트에서 금지된 문장을 시도했다. Class 2F(sql_routine_exception)에 속한다. 예를 들어 읽기 전용이어야 하는 함수가 데이터를 수정하려는 경우다.

원인

PostgreSQL 코어는 이 코드를 거의 발생시키지 않으며 보통 확장이나 절차 언어 코드에서 발생한다. 참고: IMMUTABLE/STABLE로 지정된 함수가 INSERT/UPDATE/DELETE를 실행하면 2F003이 아니라 코드 0A000(feature_not_supported)으로 '... is not allowed in a non-volatile function'이 발생한다.

해결 방법

오류 메시지에서 어떤 문장이 금지되었는지 확인하고 관련 루틴/확장의 문서를 확인한다. non-volatile 함수 오류(0A000)가 발생하면 데이터를 수정하는 함수를 VOLATILE로 정의한다(기본값): CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE. 읽기 전용이어야 하는 위치(인덱스 표현식, 제약 조건 검사)에서 데이터 수정 호출을 제거한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목