pgx를 사용하여 Postgres에서 대량 삽입 작업을 효율적으로 수행하고 \'예상 10개 인수, 1개\' 오류를 방지하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-10-31 10:10:29
원래의
892명이 탐색했습니다.

How can I efficiently perform bulk insertion operations in Postgres using pgx and avoid the

Postgres의 대량 삽입: 종합 가이드

대량 삽입은 데이터베이스 관리에서 일반적인 작업으로, 매우 효율적인 방법으로 한 번에 많은 수의 레코드를 생성합니다. 이렇게 하면 레코드를 개별적으로 삽입하는 것에 비해 처리 시간을 크게 줄일 수 있습니다.

제공된 코드 조각에서 Go용 PostgreSQL 데이터베이스 드라이버인 pgx를 사용하여 "keys" 테이블에 데이터를 대량 삽입하려고 시도하는 동안 문제에 직면하고 있습니다. . "예상된 10개의 인수, 1개 있음" 오류는 실행 중인 SQL 문의 형식이 전달되는 값 수에 맞게 올바르게 지정되지 않았음을 나타냅니다.

이 문제를 해결하려면 내장된 대량 삽입 작업을 위해 특별히 설계된 pgx.Conn.CopyFrom 함수입니다. CopyFrom은 SQL 문을 수동으로 작성하는 것에 비해 뛰어난 성능을 제공하는 PostgreSQL 복사 프로토콜을 활용합니다.

CopyFrom을 사용한 올바른 구현은 다음과 유사합니다.

<code class="go">// Define data to be inserted
data := []struct {
    KeyVal  string
    LastVal int
}{
    {"abc", 10},
    {"dns", 11},
    {"qwe", 12},
    {"dss", 13},
    {"xcmk", 14},
}

// Establish connection to the database
dbUrl := "..."
conn, err := pgx.Connect(context.Background(), dbUrl)
if err != nil {
    log.Fatalf("Error connecting to database: %v", err)
}
defer conn.Close(context.Background())

// Execute bulk insertion using CopyFrom
copyCount, err := conn.CopyFrom(
    pgx.Identifier{"keys"},
    []string{"keyval", "lastval"},
    pgx.CopyFromRows(data),
)
if err != nil {
    log.Fatalf("Error inserting data: %v", err)
}

fmt.Printf("Inserted %d rows into the keys table.\n", copyCount)</code>
로그인 후 복사

CopyFrom을 활용하면 작업을 간소화할 수 있습니다. 대량 삽입 작업을 수행하고 성능을 크게 향상시킵니다. 예상치 못한 오류를 방지하려면 적절한 조각에 열 이름을 올바르게 지정하고 데이터 조각의 형식이 올바른지 확인하세요.

위 내용은 pgx를 사용하여 Postgres에서 대량 삽입 작업을 효율적으로 수행하고 \'예상 10개 인수, 1개\' 오류를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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