Heim >Backend-Entwicklung >Golang >Wie führe ich Massenaktualisierungen in PostgreSQL mit Go durch?

Wie führe ich Massenaktualisierungen in PostgreSQL mit Go durch?

Susan Sarandon
Susan SarandonOriginal
2024-12-13 11:32:11407Durchsuche

How to Perform Bulk Updates in PostgreSQL with Go?

Massenaktualisierung mehrerer Zeilen in einer einzelnen Abfrage mit PostgreSQL

Frage:

Wie kann das? Mehrere Zeilen können gleichzeitig mit einer einzigen SQL-Anweisung in PostgreSQL aktualisiert werden Los?

Antwort:

Um Massenaktualisierungen in PostgreSQL mit einer einzigen Abfrage zu erreichen, wird empfohlen, eine abgeleitete Tabelle zu verwenden. Das folgende Beispiel zeigt, wie mehrere Zeilen mithilfe einer abgeleiteten Tabelle aktualisiert werden:

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;

Go-Implementierung:

Der folgende Go-Code demonstriert die Ausführung der Massenaktualisierungsabfrage:

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

    _ "github.com/lib/pq" // PostgreSQL driver
)

func main() {
    // Open a database connection
    db, err := sql.Open("postgres", "user=postgres password=mypassword host=localhost port=5432 database=mydatabase")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // Create the derived table
    derivedTableQuery := `
CREATE TEMP TABLE BulkUpdate AS
SELECT 1 AS id, 'FINISH' AS column_a, 1234 AS column_b
UNION ALL
SELECT 2, 'UNFINISH', 3124
`
    if _, err := db.Exec(derivedTableQuery); err != nil {
        panic(err)
    }

    // Execute the bulk update query
    bulkUpdateQuery := `
UPDATE t
SET column_a = v.column_a,
    column_b = v.column_b
FROM BulkUpdate v
WHERE v.id = t.id
`

    // Create a context for the query execution
    ctx := context.Background()

    // Execute the bulk update query
    result, err := db.ExecContext(ctx, bulkUpdateQuery)
    if err != nil {
        panic(err)
    }

    // Retrieve the number of rows affected
    rowsAffected, err := result.RowsAffected()
    if err != nil {
        panic(err)
    }

    // Print the number of rows affected
    fmt.Printf("%d rows updated\n", rowsAffected)
}

Das obige ist der detaillierte Inhalt vonWie führe ich Massenaktualisierungen in PostgreSQL mit Go durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn