Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Kemas Kini Pukal dengan Cekap dalam PostgreSQL menggunakan Go?

Bagaimana untuk Melaksanakan Kemas Kini Pukal dengan Cekap dalam PostgreSQL menggunakan Go?

Barbara Streisand
Barbara Streisandasal
2024-12-05 07:19:11850semak imbas

How to Efficiently Perform Bulk Updates in PostgreSQL using Go?

Kemas Kini Pukal dalam PostgreSQL dengan Go Query Builder

Apabila berhadapan dengan keperluan untuk mengemas kini berbilang baris dalam pangkalan data PostgreSQL, pendekatan tradisional melibatkan pelaksanaan kenyataan UPDATE yang berasingan untuk setiap baris. Walau bagaimanapun, atas sebab prestasi, selalunya wajar untuk melaksanakan satu kenyataan KEMASKINI untuk mengemas kini berbilang baris sekaligus.

Pendekatan Jadual Terbitan

Satu kaedah berkesan untuk mengemas kini pukal dalam PostgreSQL ialah menggunakan jadual terbitan. Teknik ini melibatkan mencipta jadual sementara dengan kemas kini yang diingini, kemudian menggunakan data dalam jadual itu untuk mengemas kini jadual sasaran.

Pertimbangkan senario berikut di mana kami menyasarkan untuk mengemas kini berbilang baris dalam jadual "jadual" dengan yang baharu nilai untuk lajur "column_a" dan "column_b":

import (
    "database/sql"
    _"github.com/jackc/pgx/v4/stdlib" // PostgreSQL driver
)

func main() {
    db, err := sql.Open("pgx", "host=localhost port=5432 dbname=test user=postgres password=mysecretpassword")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // Prepare the derived table with updated values
    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.Exec(query)
    if err != nil {
        panic(err)
    }

    // Optionally, you can verify the updated rows
    rows, err := db.Query("SELECT * FROM table WHERE id IN (1, 2)")
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var columnA, columnB string
        if err := rows.Scan(&id, &columnA, &columnB); err != nil {
            panic(err)
        }
        fmt.Printf("ID: %d, Column A: %s, Column B: %s\n", id, columnA, columnB)
    }
}

Pendekatan ini menawarkan fleksibiliti dalam menambah atau mengalih keluar baris dan lajur dalam jadual terbitan tanpa mengubah pertanyaan utama. Ia juga membantu mengelakkan ralat tidak disengajakan berbanding dengan menyatakan berbilang kenyataan KEMASKINI secara eksplisit.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kemas Kini Pukal dengan Cekap dalam PostgreSQL menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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