ホームページ > バックエンド開発 > Golang > Go を使用して PostgreSQL で一括更新を実行するにはどうすればよいですか?

Go を使用して PostgreSQL で一括更新を実行するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-13 11:32:11
オリジナル
433 人が閲覧しました

How to Perform Bulk Updates in PostgreSQL with Go?

PostgreSQL を使用して単一のクエリで複数の行を一括更新する

質問:

どうすればよいですかPostgreSQL では単一の SQL ステートメントを使用して複数の行を同時に更新できます。

答え:

単一のクエリを使用して 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;
ログイン後にコピー

Go 実装:

次の Go コードは、一括更新クエリの実行を示しています。

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)
}
ログイン後にコピー

以上がGo を使用して PostgreSQL で一括更新を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート