【问题标题】:Postgres db replication not shown in real timePostgres 数据库复制未实时显示
【发布时间】:2019-05-03 13:38:19
【问题描述】:

通过修改两台计算机的文件pg_hba.confpostgresql.conf,我已经能够在两台本地计算机之间进行 PostgreSQL 复制。

然后,在第一台计算机中,有一个正在自动填充的数据库,我们可以看到它正在实时显示。而在第二台计算机中,有复制的数据库链接到它,但我们无法实时看到它的更新。

我的问题是数据库确实在发生变化,所以复制工作正常,但它没有实时显示。

当我在psql 中使用命令时

select * from pg_stat_replication;

我在那里看到了我的复制,所以我认为发布和订阅都有效。但是在该命令显示的信息中,在sync_state 的部分中,它显示了async。也许我应该将其更改为sync 以使其实时工作(仍然不知道如何,我正在检查是“更改发布”还是“更改订阅”......还不确定)?

【问题讨论】:

  • 看起来您正在使用逻辑复制。您如何更改主数据库?当您更改它时,您是否正在提交事务?
  • 没错,我们正在使用逻辑复制。主数据库正在从另一个程序自动更改。我认为这笔交易已经提交,是的。

标签: postgresql replication


【解决方案1】:

对于同步逻辑复制,如果您希望更改立即在备用数据库上可见,请将 synchronous_commit 设置为 remote_apply 并将订阅名称添加到 synchronous_standby_names(这两个设置都在主数据库上)。

这两个参数都必须在主(主)服务器上的postgresql.conf 中设置。不要忘记重新加载以激活更改。

使用同步复制,除非您至少有两台备用服务器,否则您始终会降低整个系统的可用性。

【讨论】:

  • 嗯,我不知道。我试图使用这个:“ALTER SUBSCRIPTION bsub2 SET (synchronous_commit = local);”,正如我在这里看到的那样:-postgresql.org/docs/10/sql-altersubscription.html -postgresql.org/docs/10/sql-createsubscription.html 所以你认为如果改为“local”我把“remote_apply”它可以工作?还是我也应该从逻辑复制更改为物理复制?提前致谢!
  • 看来我拒绝同步逻辑复制太轻率了,谢谢指点。我已经修改了答案。
  • 非常感谢您的帮助 :) 我已经在复制数据库(不是您所说的复制数据库)中使用 ALTER SUBSCRIPTION 命令将参数“synchronous_commit”更改为“remote_apply”说(我无法从主数据库执行此操作)。现在,我正在寻找如何更改“synchronous_standby_names”。我已经看到它在“postgres.conf”文件中,所以我想我会直接放入 =“bsub2”(订阅的名称),就像你对我说的那样,并且再次放入复制的数据库中(不是复制器,即使我能够在主数据库中更改它)
  • 这两个设置都必须在主(复制)服务器上。如果您遇到问题,请告诉我,我自己从未尝试过。
  • 我无法将“synchronous_commit”更改为“remote_apply”,因为我无法从主计算机中的“ALTER SUBSCRIPTION”命令访问它(这就是我在第二个计算机中创建它的原因)。它告诉我这个订阅不存在。识别此订阅并允许使用该命令的唯一计算机是辅助计算机(复制数据库)。关于“synchronous_standby_names”,我可以在两台电脑上更改它,因为我可以访问“postgres.conf”文档
猜你喜欢
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多