PostgreSQL データベース内の複数の行を更新する必要がある場合、従来のアプローチでは、個別の UPDATE ステートメントを実行する必要があります。各行。ただし、パフォーマンス上の理由から、単一の UPDATE ステートメントを実行して複数の行を一度に更新することが望ましい場合がよくあります。
PostgreSQL での一括更新の効果的な方法の 1 つは、これを利用することです。派生テーブル。この手法では、必要な更新を含む一時テーブルを作成し、そのテーブル内のデータを使用してターゲット テーブルを更新します。
「テーブル」テーブル内の複数の行を新しいデータで更新する次のシナリオを考えてみましょう。列 "column_a" および "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) } }
このアプローチにより、メインテーブルを変更せずに、派生テーブルの行と列を追加または削除する柔軟性が得られます。クエリ。また、複数の UPDATE ステートメントを明示的に指定する場合と比較して、偶発的なエラーを防ぐのにも役立ちます。
以上がGo を使用して PostgreSQL で一括更新を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。