我正在开发一个业余爱好应用程序,它将包含大量基本硬编码的数据,以及部署后的动态用户数据。我希望能够在本地更新硬编码数据(UPDATE
多于 INSERT
),然后将这些数据导出到服务器。换句话说,我需要将数据转储到文件中,并以新行(相对较少)INSERT
ed 和现有行(由 PK 标识)的方式导入) 是 UPDATE
d。显然,不能在服务器上INSERT
插入新行(否则 PK 可能会发生冲突并发出错误的 UPDATE
);这是一个可接受的限制。但是,我不能DELETE
要UPDATE
d 的行,更不用说删除同步表了,因为用户可访问的表将对“静态”表具有FK 约束。
不幸的是,这似乎很难做到。 Google 和 Postgres 邮件列表通知我“类似 MySQL”的功能 on_duplicate_key_update
“将在新版本中”(陈旧的信息;它在那里吗?),以及“ pg_loader 可以做到这一点
”,但没有说明如何。
在最坏的情况下,我想我可以想出一个自制的解决方案(转储数据文件,编写一个自定义导入脚本来检查 PK 冲突和问题 INSERT
或 UPDATE
statements appropriately),但对于其他人肯定在我之前遇到过的问题,这似乎是一个非常笨拙的解决方案。
有什么想法吗?
最佳答案
是的,临时表 + 插入/更新的一些组合是可行的方法(您不需要在函数中执行此操作,但可以)。
郑重声明,您正在寻找的功能是合并命令。有人为它写了一个补丁,但一直没有完成。 AFAIK 现在没有人在研究它;它肯定不在即将发布的 Postgres 8.4 中。
关于postgresql - 在 PostgreSQL 中导入/更新现有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/867084/