ホームページ >データベース >mysql チュートリアル >CSV ファイルから Postgres テーブルの行を効率的に更新するにはどうすればよいですか?

CSV ファイルから Postgres テーブルの行を効率的に更新するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-15 08:29:45289ブラウズ

How Can I Efficiently Update Rows in a Postgres Table from a CSV File?

CSV データを使用した Postgres 更新の最適化

CSV ファイルのデータを使用して Postgres テーブルを効率的に更新することは、データ管理にとって非常に重要です。 テーブル (id、banana、apple) と、更新された banana 値を含む CSV ファイルがあるとします。 課題は、banana 列を変更せずに apple 列のみを更新することです。

COPYUPDATE を活用して効率的なアップデートを行う

最適なアプローチには、COPY を使用して CSV を一時テーブルにインポートし、次に UPDATE 列に基づいて id を実行することが含まれます。プロセスは次のとおりです:

<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text); -- Or see alternative below

COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);

UPDATE tbl
SET banana = tmp_x.banana
FROM tmp_x
WHERE tbl.id = tmp_x.id;

DROP TABLE tmp_x; -- Alternatively, it's automatically dropped at the end of the session</code>

一時テーブル構造がターゲットテーブルをミラーリングする場合のより効率的なアプローチについては、次のとおりです。

<code class="language-sql">CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;</code>

これにより、tbl と同じスキーマを使用して、制約を省略した空の一時テーブルが作成されます。

セキュリティとパフォーマンスに関する考慮事項

Postgres 11 より前では、COPY にはスーパーユーザー権限が必要でした。 ただし、Postgres 11 以降のバージョンでは、セキュリティを向上させるために事前定義されたロール (pg_read_server_filespg_write_server_files など) が提供されています。

psql メタコマンド copy は、COPY コマンドをローカルで実行することで、スーパーユーザー権限の要件を回避する別の解決策を提供します。

大きな CSV ファイルの場合、パフォーマンスの最適化が重要です。 temp_buffers パラメータを一時的に増やすことを検討してください。 一時テーブルの id 列にインデックスを作成して ANALYZE を実行すると、クエリ速度をさらに向上させることができます。

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

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