我想将安装在旧Debian系统上的PostgreSQL 9.1数据库迁移到Ubuntu14.04。数据库正在使用触发器,这也是一个要求迁移触发器的要求,但在将触发器迁移到新数据库时,没有在每一行上执行触发器,从而导致新数据库包含原始数据的混淆版本。
Ubuntu14.04存储库中的PostgreSQL版本为9.3。
/var/lib/postgresql/9.1数据转换成在PostgreSQL 9.3?上可用?
到目前为止我尝试过的
我找到了一个关于如何从9.1迁移到9.3的旧答案。但我没有多少运气使用它。
据我所知,使用pg_dump将需要在转储数据时运行旧数据库,这可能导致在转储期间编写的更新将从新数据库中丢失。
使用pg_upgrade需要同时安装两个PostgreSQL版本。但是在Ubuntu14.04存储库中没有9.1。我考虑过在新机器上将旧系统复制成色度,但我不知道这是否能很好地利用pg_upgrade如何创建硬链接。
到目前为止,还有一个阻碍我测试pg_upgrade的障碍。当我尝试运行pg_upgrade时,我被告知命令位于未安装的postgres-xc包中。
如果我试图安装postgres-xc,它会告诉我postgres-xc依赖于postgres-xc-client。
如果我尝试安装postgres-xc-client,我会被告知这样做将卸载posgres9.3。因此,似乎不可能同时安装pg_upgrade和PostgreSQL 9.3。
发布于 2016-12-11 15:44:05
来自command-not-found包的消息告诉我我需要安装postgres-xc,结果证明这是误导。实际上,pg_upgrade是默认安装的一部分,但它不是在默认的PATH中,而是位于/usr/lib/postgresql/9.3/bin/pg_upgrade中。
因为pg_upgrade不在PATH中,所以执行了对可用包的搜索,而postgres-xc包恰好有一个/usr/bin/pg_upgrade可执行文件。然而,这不是我要找的pg_upgrade。
唉,pg_upgrade将无法工作,除非我能够打开一个为/var/lib/postgresql/9.1中的文件提供服务的PostgreSQL实例,这是我无法使用Ubuntu14.04存储库中可用的包的。
因此,我的结论是,我的问题的答案很可能是:不,使用Ubuntu14.04存储库中的软件转换/var/lib/postgresql/9.1中的文件是不可能的。
最后,我所做的是在数据库起源的Debian系统上使用pg_dump。我对pg_dump运行时所做的更改的关注通过在/etc/postgresql/9.1/main/postgresql.conf中设置default_transaction_read_only来解决。为了确保在启动pg_dump之后不会提交当前正在运行的事务,我在启用default_transaction_read_only和启动pg_dump之间重新启动了PostgreSQL。
这种方法的额外好处是,在迁移过程中,至少让系统继续以只读模式运行,从而将用户可见的停机时间降到最低。
在开始此操作之前,我使用在正在运行的数据库上执行的pg_dump命令的输出来验证该进程。
我特别证实:
我决定使用来自pg_dump的文本输出,使用psql而不是二进制输出格式导入,因为这使我能够轻松地对在两个数据库之间迁移的文件执行一些手动的正确检查。
https://dba.stackexchange.com/questions/157764
复制相似问题