PostgreSQL替换数据库之间的表

时间:2014-07-31 14:08:23

标签: sql database postgresql upsert cross-database

在网站上我有一些可以在临时数据库上运行的脚本。 在脚本启动之前,我从生产数据库中删除并重新创建临时数据库。 在这个过程的最后,我想用临时数据库中的这些脚本的结果更新生产数据库,但同时保持修改的同时运行脚本(几个小时)。

我知道在postgreSQL中没有实现替换,但我找到了适用于我的解决方案:How to UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) in PostgreSQL?

我的问题是,对于这个解决方案,我必须将两个数据库链接在一起,并且据我发现这也没有在postgreSQL中实现,所以我必须将表从临时数据库复制到实时数据库但我有同时更改表的名称以防止重复值或防止不必要的更改。 我有大约30个表,但只有大约一半的表被脚本修改,所以如果我可以限制表的工作将是很好的。 至于我发现pg_dump从临时数据库到文件并将它们插入到生产表中的唯一方法,但它不是太优雅的解决方案,它也可能太慢了。

如何以有效的方式解决这个问题?

我在Linux(Ubuntu)和root访问权限上有postgreSQL 8.3。

1 个答案:

答案 0 :(得分:0)

以这种方式分叉数据库将始终生成同步问题。复制数据库应该是例外,而不是规则。

您应该让脚本使用START TRANSACTION(http://www.postgresql.org/docs/8.3/static/sql-start-transaction.html)打开一个事务,而不是创建成本高昂的数据库,要求提供root权限并提示其他系统问题,不管您需要做什么,然后如果成功则返回COMMIT,如果脚本失败则返回ROLLBACK。