使用 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中文网其他相关文章!