PostgreSQL에서 동시에 여러 테이블에 데이터 삽입
단일 쿼리를 사용하여 여러 테이블에 데이터를 삽입하면 데이터베이스 작업의 일관성과 효율성이 보장됩니다. 이는 아래와 같이 데이터 수정 공통 테이블 표현식(CTE)을 사용하여 달성할 수 있습니다.
데이터를 사용하여 CTE 수정:
다음 쿼리는 데이터 수정 CTE를 사용하여 세 개의 테이블에 데이터를 연속적으로 삽입합니다.
WITH ins1 AS ( INSERT INTO sample(firstname, lastname) VALUES ('fai55', 'shaggk') RETURNING id AS sample_id ), ins2 AS ( INSERT INTO sample1 (sample_id, adddetails) SELECT sample_id, 'ss' FROM ins1 RETURNING user_id ) INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM ins2;
각 INSERT는 이전 INSERT에 의존하므로 올바른 키를 얻고 후속 삽입에 사용됩니다.
또는 전체 데이터 행을 제공하여 다음을 수행합니다.
더 편리한 방법은 CTE를 사용하여 전체 데이터 행을 한 곳에서 제공하는 것입니다.
WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) , ins1 AS ( INSERT INTO sample (firstname, lastname) SELECT firstname, lastname FROM data RETURNING firstname, lastname, id AS sample_id ) , ins2 AS ( INSERT INTO sample1 (sample_id, adddetails) SELECT ins1.sample_id, d.adddetails FROM data d JOIN ins1 USING (firstname, lastname) RETURNING sample_id, user_id ) INSERT INTO sample2 (user_id, value) SELECT ins2.user_id, d.value FROM data d JOIN ins1 USING (firstname, lastname) JOIN ins2 USING (sample_id);
이 방법을 사용하면 여러 행의 데이터를 삽입할 수 있으며 첫 번째 INSERT에 대해 다른 값을 선택하여 중복 행을 처리합니다.
동시성 및 고유 제약 조건 문제 해결:
잠재적인 동시성 문제를 해결하고 데이터 무결성을 보장하려면 sample
테이블의 (firstname, lastname)
열에 UNIQUE
제약 조건을 추가하고 INSERT
쿼리에 ON CONFLICT
절을 다음과 같이 사용할 수 있습니다. 링크된 참조에 설명된 대로 아래에 설명되어 있습니다.
위 내용은 데이터 무결성을 유지하면서 동시에 여러 Postgres 테이블에 데이터를 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!