집 >데이터 베이스 >MySQL 튜토리얼 >CTE 또는 임시 테이블을 사용하여 여러 Postgres 테이블에 데이터를 순차적으로 삽입하려면 어떻게 해야 합니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!