CSV データを使用して特定の Postgres 行を更新する
このガイドでは、CSV ファイルのデータを使用して PostgreSQL テーブル内の選択した行を効率的に更新する方法を説明します。 このタスクには COPY
および UPDATE
コマンドを利用します。
シナリオ:
列「id」、「banana」、「apple」を持つ PostgreSQL テーブル「tbl」を想像してください。目標は、CSV ファイル内の情報に基づいて、特定の行の「バナナ」列のみを更新することです。
手順:
解決策には次の手順が含まれます:
一時テーブルを作成します:
「tbl」テーブルの構造をミラーリングする一時テーブル tmp_x
を構築します。
<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text);</code>
CSV データのインポート:
tmp_x
コマンドを使用して、CSV ファイルの内容を COPY
にインポートします。 /absolute/path/to/file
を実際のファイル パスに置き換えることを忘れないでください:
<code class="language-sql">COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
メインテーブルを更新します:
UPDATE
ステートメントを実行して、「tbl」の「banana」列を変更します。 これは tmp_x
のデータを使用し、「id」列に基づいて行を照合します:
<code class="language-sql">UPDATE tbl SET banana = tmp_x.banana FROM tmp_x WHERE tbl.id = tmp_x.id;</code>
一時テーブルを削除します:
更新後、一時テーブルを削除します:
<code class="language-sql">DROP TABLE tmp_x;</code>
代替アプローチ:
簡素化された一時テーブルの作成: CSV ファイルが「tbl」の構造と一致する場合、tmp_x
をより簡潔に作成できます:
<code class="language-sql"> CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;</code>
スーパーユーザー権限の回避: スーパーユーザー権限のない COPY
操作の場合は、psql メタコマンドを使用します:
<code class="language-sql"> \copy tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
役立つリンク:
以上がCSV ファイルから特定の Postgres 行を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。