Bagaimanakah saya boleh melaksanakan operasi sisipan pukal dengan cekap dalam Postgres menggunakan pgx dan mengelakkan ralat \'10 argumen yang dijangkakan, mendapat 1\'?

Susan Sarandon
Lepaskan: 2024-10-31 10:10:29
asal
892 orang telah melayarinya

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

Sisipan Pukal dalam Postgres: Panduan Komprehensif

Sisipan pukal ialah operasi biasa dalam pengurusan pangkalan data, menawarkan kaedah yang sangat cekap untuk memasukkan sejumlah besar rekod sekaligus. Ini boleh mengurangkan masa pemprosesan dengan ketara berbanding dengan memasukkan rekod secara individu.

Dalam coretan kod yang disediakan, anda menghadapi masalah semasa cuba memasukkan data secara pukal ke dalam jadual "kunci" menggunakan pgx, pemacu pangkalan data PostgreSQL untuk Go . Ralat "jangka 10 argumen, dapat 1" menunjukkan bahawa pernyataan SQL yang dilaksanakan tidak diformat dengan betul untuk bilangan nilai yang dihantar masuk.

Untuk menangani isu ini, adalah disyorkan untuk memanfaatkan terbina dalam fungsi pgx.Conn.CopyFrom, yang direka khusus untuk operasi pemasukan pukal. CopyFrom menggunakan protokol salinan PostgreSQL, yang menawarkan prestasi yang lebih baik berbanding dengan membuat pernyataan SQL secara manual.

Pelaksanaan yang betul menggunakan CopyFrom akan menyerupai yang berikut:

<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>
Salin selepas log masuk

Dengan menggunakan CopyFrom, anda boleh menyelaraskan operasi sisipan pukal anda dan meningkatkan prestasi dengan ketara. Ingat untuk menyatakan dengan betul nama lajur dalam kepingan yang sesuai dan pastikan kepingan data dibentuk dengan baik untuk mengelakkan ralat yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan operasi sisipan pukal dengan cekap dalam Postgres menggunakan pgx dan mengelakkan ralat \'10 argumen yang dijangkakan, mendapat 1\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!