ホームページ >データベース >mysql チュートリアル >他の列を保持しながら、CSV ファイルのデータで Postgres テーブルの列を更新するにはどうすればよいですか?
このガイドでは、CSV ファイルのデータを使用して Postgres テーブルの列を選択的に更新し、他の列はそのままにする方法を説明します。 「Apple」列の既存の値を保持しながら、テーブルの「Banana」列を更新する必要があるとします。
解決策:
この方法では、効率的かつ安全なデータ操作のために一時テーブルを利用します。
1.一時テーブルを作成します:
まず、主キー (「ID」) を含むターゲット テーブルの構造をミラーリングする一時テーブル (tmp_x
) を作成します。
<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text);</code>
2. CSV データのインポート:
次に、COPY
コマンドを使用して CSV データを一時テーブルにインポートします。 /absolute/path/to/file
を CSV ファイルへの実際のパスに置き換えることを忘れないでください:
<code class="language-sql">COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
3.ターゲットテーブルを更新します:
次に、一時テーブルのデータを使用してメイン テーブル (tbl
) の "Banana" 列を更新し、"ID" 列に基づいて行を照合します。
<code class="language-sql">UPDATE tbl SET banana = tmp_x.banana FROM tmp_x WHERE tbl.id = tmp_x.id;</code>
4.一時テーブルを削除します:
最後に、一時テーブルを削除してリソースを解放します。
<code class="language-sql">DROP TABLE tmp_x;</code>
重要な考慮事項:
権限: Postgres 11 より前では、COPY
コマンドには通常、スーパーユーザー権限が必要です。 Postgres 11 以降では、pg_read_server_files
や pg_write_server_files
などのロールを使用できます。 あるいは、copy
の psql
メタコマンドはスーパーユーザー要件を回避します。
パフォーマンス: 大きな CSV ファイルの場合、temp_buffers
を調整し、一時テーブルの "ID" 列にインデックスを作成することでパフォーマンスを向上させます。 一時テーブル (ANALYZE tmp_x;
) は自動的に分析されないため、手動で分析することをお勧めします。
このアプローチにより、クリーンで効率的な更新プロセスが保証され、意図しないデータ変更のリスクが最小限に抑えられます。重要なデータベース更新を実行する前に、必ずデータをバックアップしてください。
以上が他の列を保持しながら、CSV ファイルのデータで Postgres テーブルの列を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。