> 데이터 베이스 > MySQL 튜토리얼 > CTE 또는 임시 테이블을 사용하여 여러 Postgres 테이블에 데이터를 순차적으로 삽입하려면 어떻게 해야 합니까?

CTE 또는 임시 테이블을 사용하여 여러 Postgres 테이블에 데이터를 순차적으로 삽입하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-12 14:35:47
원래의
715명이 탐색했습니다.

How Can I Sequentially Insert Data into Multiple Postgres Tables Using CTEs or a Temporary Table?

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>
로그인 후 복사

이 쿼리에서:

  • 첫 번째 CTE인 ins1sample 테이블에 행을 삽입하고 삽입된 행의 ID를 sample_id으로 반환합니다.
  • 두 번째 CTE인 ins2ins1에서 반환된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿