首页 >数据库 >mysql教程 >如何从 CSV 文件有效更新 Postgres 表中的行?

如何从 CSV 文件有效更新 Postgres 表中的行?

Susan Sarandon
Susan Sarandon原创
2025-01-15 08:29:45287浏览

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