Postgres CTE를 사용하여 여러 테이블에 순차적으로 데이터 삽입
Postgres에서는 데이터 수정 공통 테이블 표현식(CTE)을 사용하여 단일 쿼리로 여러 테이블에 데이터를 삽입할 수 있습니다. CTE는 임시 결과 세트를 정의하고 단일 쿼리로 데이터를 조작하는 편리한 방법을 제공합니다.
데이터를 사용하여 CTE 수정
다음 쿼리는 CTE를 사용하여 세 개의 테이블에 데이터를 순차적으로 삽입하는 방법을 보여줍니다.
<code class="language-sql">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;</code>
이 쿼리에서:
ins1
은 sample
테이블에 행을 삽입하고 삽입된 행의 ID를 sample_id
으로 반환합니다. ins2
는 ins1
에서 반환된 sample_id
를 사용하여 sample1
테이블에 행을 삽입합니다. 삽입된 행의 user_id
을 반환합니다. INSERT
문은 ins2
에서 반환된 user_id
을 사용하여 sample2
테이블에 행을 삽입합니다. 이 접근 방식을 사용하면 여러 INSERT
문을 연결하고 이전 삽입에서 반환된 값을 재사용할 수 있습니다.
동시 쓰기 처리
여러 세션에서 동시에 데이터를 삽입하는 경우 동시 쓰기 가능성을 고려해야 합니다. 이렇게 하려면 ON CONFLICT
절을 사용하여 중복 레코드를 삽입하려고 할 때의 동작을 지정할 수 있습니다.
임시 테이블을 이용한 대안
CTE를 사용하는 대신 임시 테이블을 만들어 중간 데이터를 보관한 다음 순차적으로 삽입을 수행할 수도 있습니다.
<code class="language-sql">CREATE TEMP TABLE tmp AS SELECT * FROM sample; INSERT INTO sample1 (sample_id, adddetails) SELECT id, 'ss' FROM tmp; INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM tmp; DROP TABLE tmp;</code>
이 접근 방식에서는 CTE를 직접 연결하지 않고 임시 테이블을 후속 삽입을 위한 데이터 소스로 사용합니다.
데이터 수정 CTE 또는 임시 테이블을 사용하면 단일 Postgres 쿼리로 여러 테이블에 데이터를 효율적으로 삽입할 수 있으므로 데이터 삽입 작업이 단순화됩니다.
위 내용은 CTE 또는 임시 테이블을 사용하여 여러 Postgres 테이블에 데이터를 순차적으로 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!