使用 CSV 資料更新特定的 Postgres 行
本指南示範如何使用 CSV 檔案中的資料有效更新 PostgreSQL 表中的選取行。 我們將利用 COPY
和 UPDATE
指令來完成此任務。
場景:
想像一個 PostgreSQL 表“tbl”,其中包含“id”、“banana”和“apple”欄位。目標是根據 CSV 檔案中的資訊僅更新特定行的「banana」欄位。
程序:
解決方案涉及以下步驟:
建立臨時表:
建構一個臨時表,tmp_x
,鏡像「tbl」表的結構:
<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中文網其他相關文章!