是否可以声明一个全局变量分发给双机热备服务器?

Is it possible to declare a global variable to be distributed to hot standby servers?

我正在尝试解决 PostgreSQL 9.5 不支持从热备用查询复制延迟的事实(可以从主服务器查询延迟,但我试图避免连接主服务器,除非绝对必要) .我们使用热备用副本服务器作为我们的 Web 服务的只读服务器,如果它从主服务器延迟太多,我们希望忽略该服务器。为了便于讨论,我们假设在通过热备访问数据时严格小于 5 秒的延迟是可以的。

是否可以在主服务器上定义一个变量来复制到从服务器(异步流模式下的热备用副本)?

我目前有单行单列 table 用于在数据库中存储全局时间戳,我会在通过热备用副本访问其他数据之前检查此时间戳。并且脚本每秒在主数据库上更新此时间戳。但是,我无法检查事务中的时间戳,否则我将回滚事务命中

40001 terminating connection due to conflict with recovery
User query might have needed to see row versions that must be removed.
In a moment you should be able to reconnect to the database and repeat your command.

有没有什么技巧可以将一些数据从主服务器发布到热备服务器,在事务处于活动状态时可以访问?我不需要回滚对此变量的更改的能力,也不需要遵循事务(也就是说,即使事务处于 repeatable 读取隔离模式处于活动状态,此变量的值也可以更改) .

半年内没有人提供任何解决方案,所以我假设没有已知的解决方案

我通过使用单独的事务从复制的 table 查询全局时间戳解决了事务的问题。 在我的例子中,创建连接就足够了,开始事务,查询时间戳,提交事务,然后检查时间戳。如果延迟不是太高,继续开始真正的交易,做任何交易需要做的事情(记住,这必须是真实的 read-only 交易),最后提交交易。

这样我就不需要任何额外的连接,但我需要创建一个额外的事务来检查时间戳。因为带有时间戳的 table 只有一列和一行,所以检查值总是很快的。