0

我正在尝试使用复制方法将 heroku PostgreSQL 实例从 pg11 升级到 pg12,因为我的测试环境是在业余爱好实例上。在进程结束时,它似乎挂了很长时间(对于 120MB 的数据库,超过 30 分钟后不会退出)。数据存储视图表明一切都很好,我的行数相同,但存在问题。

这似乎是物化视图的错误。如果我连接到数据库并查看表和视图,只有一个看起来是空的。使用 postico,它会等待视图的结构,但不会对未填充的视图给出通常的警告。

我可以通过创建本地 pg12 数据库并尝试将 pg_restore 与最近的备份一起使用来重新创建停止行为。同样,我似乎能够通过创建一个空的本地数据库、运行所有数据库迁移、截断所有表和序列,然后--data-only --disable-triggers从同一个备份进行加载来使其工作。不是一个特别顺利或鼓舞人心的迁移计划。使用--verbose没有显示任何明显的错误,我得到的最后一件事是它正在创建有问题的物化视图。

我也设置log_statementall,我得到的最后一个是它正在刷新有问题的视图。此时,postgres 命令开始使用 ~100% CPU。

在本地,我使用这个命令来恢复:

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d database_name database_backup.dump

这是我们经常使用的命令来恢复本地开发的生产备份。

从 11 升级到 12 是否有任何已知的陷阱,或者我可能能够提取有关正在发生的事情的更多信息的方法?

4

1 回答 1

2

由于在启动刷新时缺乏统计信息,它可能选择了一个令人震惊的计划来执行物化视图查询。

您可以终止该进程,然后在收集统计信息后重新启动刷新(它们可能已经是。)

如果从头开始,您可以使用--sectionofpre-data和运行 pg_restore data,然后执行 ANALYZE,然后执行post-data.

于 2020-03-24T18:34:05.640 回答