postgresql - 在 PostgreSQL 中导入/更新现有行

标签 postgresql

我正在开发一个业余爱好应用程序,它将包含大量基本硬编码的数据,以及部署后的动态用户数据。我希望能够在本地更新硬编码数据(UPDATE 多于 INSERT),然后将这些数据导出到服务器。换句话说,我需要将数据转储到文件中,并以新行(相对较少)INSERTed 和现有行(由 PK 标识)的方式导入) 是 UPDATEd。显然,不能在服务器上INSERT插入新行(否则 PK 可能会发生冲突并发出错误的 UPDATE);这是一个可接受的限制。但是,我不能DELETEUPDATEd 的行,更不用说删除同步表了,因为用户可访问的表将对“静态”表具有FK 约束。

不幸的是,这似乎很难做到。 Google 和 Postgres 邮件列表通知我“类似 MySQL”的功能 on_duplicate_key_update“将在新版本中”(陈旧的信息;它在那里吗?),以及“ pg_loader 可以做到这一点”,但没有说明如何

在最坏的情况下,我想我可以想出一个自制的解决方案(转储数据文件,编写一个自定义导入脚本来检查 PK 冲突和问题 INSERTUPDATE statements appropriately),但对于其他人肯定在我之前遇到过的问题,这似乎是一个非常笨拙的解决方案。

有什么想法吗?

最佳答案

是的,临时表 + 插入/更新的一些组合是可行的方法(您不需要在函数中执行此操作,但可以)。

郑重声明,您正在寻找的功能是合并命令。有人为它写了一个补丁,但一直没有完成。 AFAIK 现在没有人在研究它;它肯定不在即将发布的 Postgres 8.4 中。

关于postgresql - 在 PostgreSQL 中导入/更新现有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/867084/

相关文章:

sql - 如何对自定义类型设置非空约束?

python - 使用 Python 将二进制文件上传到 postgres 服务器

PostgreSQL 慢 COUNT() - 触发器是唯一的解决方案吗?

sql - PostgreSQL 按时间戳过滤

postgresql - SQL - 按字母顺序对列中的字符串进行排序

ruby-on-rails - Rails 4 或 5,索引位于 Postgresql 中的 "updated_at"列。这是什么意思?

postgresql - POSTGRES外语

postgresql - 更新pg_hba.config时如何在Windows 10中重启postgresql服务

PostgreSQL:触发器调用带有参数的函数

sql - 防止行在 GROUP BY 中重复计算