> 백엔드 개발 > Golang > 파생 테이블을 사용하여 PostgreSQL에서 대량 행 업데이트를 효율적으로 수행하려면 어떻게 해야 합니까?

파생 테이블을 사용하여 PostgreSQL에서 대량 행 업데이트를 효율적으로 수행하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-09 20:27:19
원래의
967명이 탐색했습니다.

How Can I Efficiently Perform Bulk Row Updates in PostgreSQL Using Derived Tables?

PostgreSQL의 효율적인 대량 행 업데이트

단일 쿼리에서 여러 행을 대량 업데이트하는 것은 데이터베이스 성능을 향상시키는 데 사용되는 일반적인 최적화입니다. PostgreSQL은 이 프로세스를 용이하게 하는 강력한 메커니즘을 제공합니다.

파생 테이블 접근 방식

PostgreSQL에서 대량 업데이트를 위한 효과적인 접근 방식 중 하나는 파생 테이블을 활용하는 것입니다. 이 접근 방식에는 원하는 업데이트가 포함된 임시 테이블을 생성한 다음 이를 사용하여 대상 테이블을 수정하는 작업이 포함됩니다.

UPDATE t
SET column_a = v.column_a,
    column_b = v.column_b
FROM (VALUES (1, 'FINISH', 1234),
             (2, 'UNFINISH', 3124)
      ) v(id, column_a, column_b)
WHERE v.id = t.id;
로그인 후 복사

이 쿼리는 특정 행 업데이트가 포함된 파생 테이블 v를 생성합니다. 그런 다음 UPDATE 문은 이 테이블을 사용하여 t 테이블을 수정합니다. WHERE 절은 업데이트가 올바른 행에만 적용되도록 보장합니다.

Go 언어 예

Go에서 이 쿼리를 실행하려면 다음 코드 조각을 사용할 수 있습니다. :

import (
    "context"
    "database/sql"
    "fmt"
)

func main() {
    db, err := sql.Open("postgres", "host=localhost user=postgres password=password dbname=postgres sslmode=disable")
    if err != nil {
        panic(err)
    }
    ctx := context.Background()

    query := `
    UPDATE t
    SET column_a = v.column_a,
        column_b = v.column_b
    FROM (VALUES (1, 'FINISH', 1234),
                 (2, 'UNFINISH', 3124)
         ) v(id, column_a, column_b)
    WHERE v.id = t.id;
    `

    _, err = db.ExecContext(ctx, query)
    if err != nil {
        panic(err)
    }

    fmt.Println("Rows updated successfully.")
}
로그인 후 복사

파생 테이블의 이점 접근 방식

  • 유연성: 기본 쿼리를 수정하지 않고도 업데이트에 행과 열을 쉽게 추가하거나 제거할 수 있습니다.
  • 단순성: 파생 테이블 접근 방식은 상대적으로 이해하기 쉽고 구현합니다.
  • 효율성: 많은 수의 행을 업데이트해야 하는 시나리오에서 좋은 성능을 발휘합니다.

위 내용은 파생 테이블을 사용하여 PostgreSQL에서 대량 행 업데이트를 효율적으로 수행하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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