首页 > 数据库 > mysql教程 > 如何从 CSV 文件更新特定的 Postgres 行?

如何从 CSV 文件更新特定的 Postgres 行?

Linda Hamilton
发布: 2025-01-15 07:55:45
原创
631 人浏览过

How to Update Specific Postgres Rows from a CSV File?

使用 CSV 数据更新特定的 Postgres 行

本指南演示如何使用 CSV 文件中的数据高效更新 PostgreSQL 表中的选定行。 我们将利用 COPYUPDATE 命令来完成此任务。

场景:

想象一个 PostgreSQL 表“tbl”,其中包含“id”、“banana”和“apple”列。目标是根据 CSV 文件中的信息仅更新特定行的“banana”列。

程序:

解决方案涉及以下步骤:

  1. 创建临时表:

    构造一个临时表,tmp_x,镜像“tbl”表的结构:

    <code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text);</code>
    登录后复制
  2. 导入 CSV 数据:

    使用 tmp_x 命令将 CSV 文件的内容导入到 COPY 中。 记得将 /absolute/path/to/file 替换为实际文件路径:

    <code class="language-sql">COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
    登录后复制
  3. 更新主表:

    执行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>
    登录后复制
  4. 删除临时表:

    更新后,删除临时表:

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板