对逻辑PostgreSQL副本运行一些健全性检查,以确保它与主副本相同。

pg-replica-auditor的Python项目详细描述


pg副本审核员

比较PostgreSQL逻辑副本与其主副本的工具。它可以帮助检测数据不一致。在

特点

假设

查询{and{cd2>中同时存在于和cd2}列的有效索引。在

行比较

使用两种方法在主和副本之间运行行比较:

  1. MIN(id)MAX(id)之间随机选择8128行(或给--rows的行数)
  2. 选择最后1000行。在

副本延迟

通过比较两个数据库上给定表上的MAX(updated_at)来检查“副本延迟”。在

最大值

检查复制副本和主副本上的最小值id和最大值id是否匹配。由于副本延迟,它们可能会偏移一点。在

批量1000和

id列的和(以1000为单位),并在数据库之间进行比较。这假设批量检索行比随机检索更容易,运行速度比行比较快,并且可以扫描更多行。在

计算所有行数

使用COUNT(lag_column)对所有行进行计数,以确保副本和主服务器上的行计数都匹配。非常慢,因为它必须进行完全扫描(索引或表)。{{cd2>

缺少连续记录

遍历步长为MAX(id)*--step-size=0.01的表。假设是,如果记录丢失,它们将大量丢失,并分组在一起。在

要求

  1. Python3
  2. Postgres开发文件(psycopg2需要)。在Mac OS上,使用brew install postgresql。在Ubuntu上,安装libpq-dev。在

安装

开发

使用virtualenv,pip install -r requirements.txt

生产

使用Pypi,pip install pg-replica-auditor。在

使用

此脚本需要三个参数:

  1. --primary,任何可接受的Postgres连接字符串(包括DSN)
  2. --replica,与--primary相同,但对于副本数据库

可选参数:

  1. --exclude-tables,从扫描中排除逗号分隔的表
  2. --table,只扫描这个表
  3. --debug,将打印调试信息
  4. --rows,将在行比较检查中扫描这么多行
  5. --lag-column,将使用此列进行副本延迟检查
  6. --show-skipped,将打印最后1000次检查中跳过的行
  7. --count-before,将计算在此时间戳之前创建/更新的表中的所有行
  8. --step-size,将减小丢失顺序记录搜索的步长。在

示例:

$ pgreplicaauditor --primary=postgres://primary-db.amazonaws.com:5432/my_db --replica=postgres://replica-db.amazonaws.com:5432/my_db --table=immutable_items --lag-column=created_at --count-before="2020-04-06"

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法从布尔值中获得正确显示的结果   json java流逗号分隔   java ArrayList索引超出范围,但实际上没有?   Android中的java左对齐文本   当excel中的某些更改未保存时,如何在java中使用poi读取   java如何重新排列数组,使空值占据数组的开头?   查找多维数组是否在Java数组中   在Java中实现无数据库的数据   java什么是系统负载?   java在启动活动时“错误类型3错误:活动类{}不存在”,错误类型3活动类不存在”   java如何在textView中显示多个值   java JDBC:如何从结果集中检索SQL COUNT函数的结果?   JAXRS客户端的java应答   java奇怪的包装器类行为==和=   爪哇改变油漆的颜色会改变所有的颜色   在IntelliJ中使用Maven、Spring和ApacheSpark的java会导致错误   java清单文件的用途是什么   编译为什么Java编译器默认不缩短名称?(用于性能和模糊处理)   java JPA查询创建bean时出错