ホームページ >データベース >mysql チュートリアル >他の列を保持しながら、CSV ファイルのデータで Postgres テーブルの列を更新するにはどうすればよいですか?

他の列を保持しながら、CSV ファイルのデータで Postgres テーブルの列を更新するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-15 10:50:44687ブラウズ

How to Update a Postgres Table's Column with Data from a CSV File While Preserving Other Columns?

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_filespg_write_server_files などのロールを使用できます。 あるいは、copypsql メタコマンドはスーパーユーザー要件を回避します。

  • パフォーマンス: 大きな CSV ファイルの場合、temp_buffers を調整し、一時テーブルの "ID" 列にインデックスを作成することでパフォーマンスを向上させます。 一時テーブル (ANALYZE tmp_x;) は自動的に分析されないため、手動で分析することをお勧めします。

このアプローチにより、クリーンで効率的な更新プロセスが保証され、意図しないデータ変更のリスクが最小限に抑えられます。重要なデータベース更新を実行する前に、必ずデータをバックアップしてください。

以上が他の列を保持しながら、CSV ファイルのデータで Postgres テーブルの列を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。