44000: with_check_option_violation
PostgreSQL의미
WITH CHECK OPTION으로 정의된 뷰를 통한 INSERT/UPDATE가 결과 행이 더 이상 뷰의 WHERE 조건을 만족하지 않아 거부되었다. 뷰는 자신의 필터 밖으로 벗어나는 행을 쓰지 못하게 한다.
원인
갱신 가능한 뷰가 WITH CHECK OPTION으로 정의되어 있고, 쓰기가 행을 뷰의 정의 조건 밖으로 옮기는 경우다(예: 뷰가 status='active'로 필터링하는데 행을 'inactive'로 설정). row-level security(RLS) 정책에서도 비슷한 검사가 발생할 수 있다.
해결 방법
쓰는 값이 뷰의 WHERE 조건을 만족하도록 하거나, 권한이 허용한다면 뷰 대신 기반 테이블에서 직접 작업한다. 비즈니스 규칙상 행이 필터를 벗어나도 된다면 WITH CHECK OPTION 없이 뷰를 재정의한다. RLS의 경우 정책의 WITH CHECK 표현식을 검토한다.