>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 지연된 기본 키 제약 조건 적용과 즉시 적용되는 기본 키 제약 조건 적용이 트랜잭션 동작에 어떤 영향을 줍니까?

PostgreSQL의 지연된 기본 키 제약 조건 적용과 즉시 적용되는 기본 키 제약 조건 적용이 트랜잭션 동작에 어떤 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-06 09:18:40804검색

How Does PostgreSQL's Deferred vs. Immediate Primary Key Constraint Enforcement Affect Transaction Behavior?

DEFERRABLE 대 IMMEDIATE 기본 키 제약 조건의 시행

PostgreSQL에서 지연/연기 가능한 고유 또는 기본 키 제약 조건의 시행은 해당 제약 조건에 따라 다릅니다. 설정 및 수행되는 작업 유형.

정의된 제약 조건의 경우 DEFERRABLE INITIALLY IMMEDIATE로서 각 SQL 문 실행 후 고유성을 확인합니다. 그러나 UNIQUE 또는 PRIMARY KEY 제약 조건의 경우 지연 가능성 설정에 관계없이 모든 명령 직후에 고유성 검사가 발생한다고 설명서에 명시되어 있다는 점에 유의하는 것이 중요합니다.

쿼리에 제공된 예는 UPDATE 문이 제약 조건이 PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE로 정의된 경우에도 여러 행을 수정하는 것이 성공할 수 있습니다. 이는 명령문 실행 이후에 검사가 이루어지기 때문인데, 이 경우에는 여전히 제약 조건이 만족됩니다.

반대로 여러 테이블의 행을 업데이트하려는 데이터 수정 CTE는 PK 제약 조건이 다음과 같은 경우 실패할 수 있습니다. 연기되지 않았습니다. 이는 CTE의 각 하위 문이 동시에 실행되고 스냅샷 격리가 없으면 업데이트 순서를 예측할 수 없기 때문입니다. 결과적으로 고유 키 위반이 발생할 수 있습니다.

제약 조건을 명시적으로 지연으로 설정하지 않고 단일 트랜잭션 내에서 여러 UPDATE 문을 실행하는 경우 제약 조건이 지연되지 않으면 UNIQUE 위반이 발생할 수 있습니다. 이는 각 명령문 후에 검사가 수행되며 트랜잭션의 중간 상태에서 제약 조건이 위반될 수 있기 때문입니다.

따라서 PostgreSQL에서 연기할 수 없는 UNIQUE 또는 PRIMARY KEY 제약 조건의 동작은 다음과 같습니다. 본질적으로 결함이 있습니다. 각 행이 업데이트된 후에 검사가 수행되며, 이로 인해 특정 시나리오에서 예기치 않은 오류가 발생할 수 있습니다. 그러나 이 문제에 대한 해결 방법은 고유성을 적용하는 데 더 많은 유연성을 제공하고 불필요한 오류를 방지할 수 있는 DEFERRABLE 제약 조건을 사용하는 것입니다.

위 내용은 PostgreSQL의 지연된 기본 키 제약 조건 적용과 즉시 적용되는 기본 키 제약 조건 적용이 트랜잭션 동작에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.