Postgresql xlog-知道两个数据库是否来自源

Postgresql xlog-知道两个数据库是否来自源,postgresql,Postgresql,我有一些xlog问题我不确定 1) 我有两台曾经是奴隶的服务器。我怎么知道他们是同一个主人的奴隶?是否可以检查它们过去是否来自同一来源?我知道pg_倒带知道如何检查是否,但是否可以在不运行pg_倒带的情况下在干运行模式下轻松检查 2) 如果pg_last_xlog_replay_位置为空,则此服务器从未是从属服务器,这是真的吗 3) 是否有可能从数据库本身知道从设备连接到哪个主设备?我知道如何从recovery.conf或进程属性中获取此信息,但它是否也写在某些系统表中 谢谢 阿维 是同一个主人

我有一些xlog问题我不确定

1) 我有两台曾经是奴隶的服务器。我怎么知道他们是同一个主人的奴隶?是否可以检查它们过去是否来自同一来源?我知道pg_倒带知道如何检查是否,但是否可以在不运行pg_倒带的情况下在干运行模式下轻松检查

2) 如果pg_last_xlog_replay_位置为空,则此服务器从未是从属服务器,这是真的吗

3) 是否有可能从数据库本身知道从设备连接到哪个主设备?我知道如何从recovery.conf或进程属性中获取此信息,但它是否也写在某些系统表中

谢谢 阿维

  • 是同一个主人的奴隶
  • 间接地。您可以比较
    从pg_数据库中选择xmin、ctid、oid、datname
    。当然,删除和创建postgres和模板数据库会改变这些,所以这是非常不可靠的。但如果您检查这些,发现所有标识符都匹配,那么数据库有相同的源代码,这是一个很好的变化

    更可靠,正在比较历史文件。Eg-如果两个前从机具有相同的时间线,例如在以下4种情况下:

    -bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'IDENTIFY_SYSTEM'
    Password for user replica:
          systemid       | timeline |   xlogpos
    ---------------------+----------+--------------
     9999384298900975599 |        4 | F79/275B2328
    (1 row)
    
    您可以检查时间线历史记录:

    -bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'TIMELINE_HISTORY 4'
    Password for user replica:
         filename     |                       content
    ------------------+------------------------------------------------------
     00000004.history | 1       9E/C3000090     no recovery target specified+
                      |                                                     +
                      | 2       C1/5A000090     no recovery target specified+
                      |                                                     +
                      | 3       A52/DB2F98B8    no recovery target specified+
                      |
    (1 row)
    
    如果两台服务器都有相同的时间线和创建时间线的xlog位置,我相信,您可以非常可靠地说,它们来自相同的来源

  • pg\u last\u xlog\u replay\u位置
  • 我可以这么说。它从来都不是奴隶,也从来没有从沃尔斯那里找到过。至少我不知道如何在升级主机上重置
    pg\u last\u xlog\u replay\u位置

  • 系统表,用于告知从设备连接到哪个主设备
  • 我没有想到什么合适的。如果您是SU,那么即使没有shell访问,您也可以阅读
    recovery.conf
    ,如果您不是,您可能无法选择这样的视图

  • 是同一个主人的奴隶
  • 间接地。您可以比较
    从pg_数据库中选择xmin、ctid、oid、datname
    。当然,删除和创建postgres和模板数据库会改变这些,所以这是非常不可靠的。但如果您检查这些,发现所有标识符都匹配,那么数据库有相同的源代码,这是一个很好的变化

    更可靠,正在比较历史文件。Eg-如果两个前从机具有相同的时间线,例如在以下4种情况下:

    -bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'IDENTIFY_SYSTEM'
    Password for user replica:
          systemid       | timeline |   xlogpos
    ---------------------+----------+--------------
     9999384298900975599 |        4 | F79/275B2328
    (1 row)
    
    您可以检查时间线历史记录:

    -bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'TIMELINE_HISTORY 4'
    Password for user replica:
         filename     |                       content
    ------------------+------------------------------------------------------
     00000004.history | 1       9E/C3000090     no recovery target specified+
                      |                                                     +
                      | 2       C1/5A000090     no recovery target specified+
                      |                                                     +
                      | 3       A52/DB2F98B8    no recovery target specified+
                      |
    (1 row)
    
    如果两台服务器都有相同的时间线和创建时间线的xlog位置,我相信,您可以非常可靠地说,它们来自相同的来源

  • pg\u last\u xlog\u replay\u位置
  • 我可以这么说。它从来都不是奴隶,也从来没有从沃尔斯那里找到过。至少我不知道如何在升级主机上重置
    pg\u last\u xlog\u replay\u位置

  • 系统表,用于告知从设备连接到哪个主设备
  • 我没有想到什么合适的。如果您是SU,那么即使没有shell访问,您也可以阅读
    recovery.conf
    ,如果您不是,您可能无法选择这样的视图