首頁 >資料庫 >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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn