实际上是一个简单的问题,但我无法找到任何好的结论性答案。
假设生产数据库foo_prd和相同foo_new的更新版本(在同一服务器上)应该替换旧版本。从_prd无缝切换到_new的最简洁方法是什么?
重命名数据库需要通过其pid断开当前用户的连接。这将取消一些请求,新用户可能会在此过程中连接。我正在考虑将新数据库的表创建为不同的SCHEMA,然后更改search_path,例如从"$user",prd
到"$user",new,prd
。
可能出现什么问题?你有什么更好的建议吗?我完全采取了错误的做法吗?
答案 0 :(得分:1)
按照您的建议执行:将新数据库的表创建为不同的模式,然后更改search_path。
但是还要创建一个与新模式同名的用户,并在更改search_path之前测试所有内容,方法是以每个应用程序的身份登录此用户 - 默认情况下,新模式将首先出现在该用户的search_path中,因为名称匹配。
最后,当您放弃旧模式时要小心 - 我建议先使用限定引用(例如prd.table
或prd.function
)使用任何引用它的对象重命名。几天/几周后,可以放心地放下它。
答案 1 :(得分:0)
我会对我的架构进行版本化,并在准备好后将我的应用程序更改为指向新架构。