PostgreSQL NOT VALID: 제약조건 추가 후 기존 오류 행이 남는 이유
제약조건 추가가 성공했는데 예전 불량 행이 그대로라면, 낫 밸리드를 확인해야 합니다.

배포 성공 ≠ 과거 데이터 검증 완료foreign key·CHECK에 적용 가능한 문서상 동작NOT VALID ≠ NOT ENFORCED
제약조건 추가가 성공했는데 예전 불량 행이 그대로라면, 낫 밸리드를 확인해야 합니다.
증상부터 분리
제약조건 추가가 성공했는데 예전 불량 행이 그대로라면, 낫 밸리드를 확인해야 합니다.
공식 문서에서 확인되는 핵심
포스트그레스큐엘 십팔에서 낫 밸리드로 포린 키나 체크 제약을 추가하면, 기존 행 전체 검사를 건너뛸 수 있습니다.
그렇다고 제약이 꺼진 건 아닙니다. 이후 들어오는 인서트나 업데이트에는 제약이 적용됩니다.
다섯 장면으로 정리
| 장면 | 핵심 | 조건 |
|---|---|---|
| 1 | 제약조건 추가 성공! 예전 불량 행은 그대로?! | 배포 성공 ≠ 과거 데이터 검증 완료 |
| 2 | NOT VALID 기존행 스캔 생략 | foreign key·CHECK에 적용 가능한 문서상 동작 |
| 3 | 새 INSERT·UPDATE 여전히 검사 | NOT VALID ≠ NOT ENFORCED |
| 4 | 기존행 검증은 VALIDATE 별도 | VALIDATE CONSTRAINT가 과거행 검사 |
| 5 | 배포 성공 ≠ 과거 무결성 완료 | 운영 SQL 실행·lock 측정 아님 |
여기까지는 단정하면 안 됩니다
예전 행까지 검증하려면 밸리데이트 컨스트레인트를 별도로 실행해야 합니다. 문서는 이 검증이 별도 잠금을 사용한다고 설명합니다.
설정 변경 전 읽기 전용 확인
- 배포 성공 ≠ 과거 데이터 검증 완료
- foreign key·CHECK에 적용 가능한 문서상 동작
- NOT VALID ≠ NOT ENFORCED
- VALIDATE CONSTRAINT가 과거행 검사
- 운영 SQL 실행·lock 측정 아님
검증 범위
제약 추가 성공과 과거 데이터 검증 완료를 같은 것으로 보면 안 됩니다. 실제 운영 에스큐엘은 실행하지 않은 문서 기반 가상 예시입니다.
이 글은 제조사 공식 문서를 해설하고 가상 도식을 사용한 교육 자료입니다. 실제 장비·운영 데이터베이스·고객 데이터·장애·복구·성능 시험 결과를 주장하지 않습니다.
짧은 영상으로 보기
YouTube 예약 영상의 실제 ID가 생기면 이 링크만 연결할 수 있습니다. 글과 로컬 영상 자체는 독립적으로 확인 가능합니다.