使用复制服务器升级Postgres主要版本

use*_*803 3 postgresql replication upgrade pg-logical

我计划将我的数据库从 Postgres 10 升级到 Posgres 14。为了减少停机时间,我计划使用复制来实现同样的目的。计划(简而言之)是:

  1. 使用转储数据pg_dumpall
  2. 终止在复制上运行的 Postgres 服务
  3. 设置新的 Postgres 14 服务
  4. 从步骤 1 中创建的转储中恢复数据
  5. 设置与主数据库的逻辑复制以使数据保持最新
  6. 将复制设置为主复制,应用程序开始连接到复制。
  7. 终止在旧主服务器上运行的 Postgres 服务,并将其也升级到 14。
  8. 在新主(旧复制)和新复制之间设置流式复制。

对此我有几个问题:

  1. 是否建议进行转储并恢复,或者让逻辑复制从头开始处理完整的复制(DDL 除外)?就可能需要的时间而言,哪个是更好的选择?我们有接近 650GB 的数据。我认为转储已被压缩,但我相信恢复它们(在同一台机器上)仍然需要时间。
  2. 我是否需要进行一些设置以确保复制从转储点之后开始,或者是否会得到处理?
  3. 我发现逻辑复制的一个限制是它不复制序列。为此,我相信,在切换之前 - 我可以将序列增加一个非常大的数字以确保不存在冲突?
  4. 我还看到了一个pglogical可以用于设置的扩展。尽管如此,我还没有深入挖掘。根据您的经验,它是否具有任何额外的优势\是否会使设置更容易?
  5. 尽管我认为这取决于不同的参数,但在主数据库和主数据库同步之前,完成如此大大小的数据库的恢复\复制通常需要多长时间?

Lau*_*lbe 5

广告 1 和 2:

最简单的事情是不要自己复制数据,而是让逻辑复制来处理它。

如果您坚持使用转储/恢复,则必须按以下步骤操作:

  • 使用复制连接中的CREATE_REPLICATION_SLOT命令和插件创建逻辑复制槽,这将导出快照pgoutput

  • 当复制连接仍处于打开状态时,运行并使用选项pg_dump传递快照名称--snapshot

  • 使用该复制槽进行逻辑复制

否则,复制将不会在正确的点开始。

广告3:

将序列设置为较高的值就可以了。

广告4:

我对此没有意见

广告5:

没有人能预测这一点。您必须进行测试运行。