首頁 > 資料庫 > mysql教程 > 如何使用 CSV 檔案中的資料更新 Postgres 資料表的資料列,同時保留其他資料列?

如何使用 CSV 檔案中的資料更新 Postgres 資料表的資料列,同時保留其他資料列?

Linda Hamilton
發布: 2025-01-15 10:50:44
原創
646 人瀏覽過

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

使用 CSV 資料更新 Postgres 表:一種選擇性方法

本指南示範如何使用 CSV 檔案中的資料選擇性地更新 Postgres 資料表的資料列,而不會影響其他資料列。 假設我們需要更新表中的「Banana」列,同時保留「Apple」欄位的現有值。

解:

此方法利用臨時表進行高效率且安全的資料操作。

1。建立臨時表:

首先,建立一個臨時表 (tmp_x),鏡像目標表的結構,包括主鍵(「ID」):

<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 等角色。 或者,copy 中的 psql 元命令可以避免超級使用者要求。

  • 效能:對於大型 CSV 文件,透過調整 temp_buffers 並在臨時表的「ID」列上建立索引來增強效能。 建議手動分析臨時表 (ANALYZE tmp_x;),因為它不會自動分析。

這種方法確保了乾淨且有效率的更新過程,最大限度地降低了意外資料修改的風險。請記住在執行任何重要的資料庫更新之前始終備份資料。

以上是如何使用 CSV 檔案中的資料更新 Postgres 資料表的資料列,同時保留其他資料列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板