我有一台带有两个数据库的服务器。尽管 DB2 是 DB1 的子集(DB2 具有 DB1 中表的子集),但每个数据库都有不同的模式名称。
尽管需要更改任何代码更改或环境文件,但重命名 PostgreSQL 数据库的架构是否存在任何危险?如果是这样,什么?或者一个简单的 ALTER SCHEMA 就可以了吗?
我有一台带有两个数据库的服务器。尽管 DB2 是 DB1 的子集(DB2 具有 DB1 中表的子集),但每个数据库都有不同的模式名称。
尽管需要更改任何代码更改或环境文件,但重命名 PostgreSQL 数据库的架构是否存在任何危险?如果是这样,什么?或者一个简单的 ALTER SCHEMA 就可以了吗?
在
pg_dump
从 DB1 恢复到 DB2(psql -f
最有可能使用 )之后,ALTER SCHEMA
将处理所有内部问题。显然,您存储在数据库之外的任何代码都必须更新——您已经提到过。可能不太明显的是:如果应该有任何对架构名称的引用,则必须手动更新函数体。只能包含您自己编写的函数。
还有一些不太常见的东西,比如通过 的外部引用
dblink
,包括自我引用,需要进行调整。如果你正在使用它,你就会知道它。除此之外,它们
search_path
必须与您在两个数据库中的相应设置相匹配。这涉及 中的常规设置postgresql.conf
,但也涉及每个DATABASE
或每个设置ROLE
以及可能与您的应用程序连接提供的选项。那么你应该可以开始了。
或者,这就是我要做的,你破解转储。从 DB1 转储后,用您选择的编辑器替换所有出现的旧模式名称。然后通过运行编辑好的 SQL 脚本
psql -f
来恢复到 DB2。全部完成。当然,如果名称在整个转储中不是唯一的,则必须小心只替换相关的字符串。
如果您的设置很大并且模式名称不是很有选择性,您可能希望按原样恢复到 DB2
ALTER SCHEMA
,pg_dump
然后再次从 DB2 中删除,并在永久恢复之前在编辑器中完成其余工作。