这个项目能做什么
pgfathom是一款PostgreSQL架构考古的只读命令行实用程序。它通过检查目录、视图和函数的使用证据、命名约定和计划统计信息,找到未声明为外键的关系。该工具从不写入数据库,设计用于在生产系统上安全运行。
它解决的问题是,许多旧的PostgreSQL数据库携带隐藏的参考完整性,即缺少约束的指向其他表的列,或创建了从未验证的NOT VALID约束。这使得模型对如\u2206等工具不可见,并允许孤儿行无人察觉地累积。
pgfathom做的事情:
* 在发现模式下,它产生终端报告,包含判断(已破坏、已确认、弱、未验证、检测到)、版本化的JSON模型和可审查的.sql文件。已确认的关系收到DDL,其中VALIDATE CONSTRAINT分成单独的部分以避免重大锁定,并根据需要使用CREATE INDEX CONCURRENTLY。已破坏的关系以注释的DDL形式发出,以便用户决定如何处理孤儿。
* 它支持命名配置文件(pt-br、en、es)并可以直接从仍然声明的键中读取前缀约定。用户可以提供自定义的TOML配置文件。
* 连接谓词从视图定义和函数主体(以及可用的pg_stat_statements)中挖掘出来,以找到名称匹配无法触及的关系。
* 验证流水线由六个阶段组成:读取目录、挖掘使用证据、使用配置文件生成候选项、根据元数据打分、使用统计数据预过滤和使用聚合对数据进行最终验证。
安装选项包括DEB/RPM软件包、Homebrew、Docker镜像或使用Go从源代码构建。该工具是只读的,尊重语句和锁定超时,限制并发,并报告对schemas和表的覆盖率,因此沉默从不被误认为是健康的信号。
范围默认为公共架构,可以使用--all-schemas、--schema、--exclude-schema和--exclude标志进行扩展。设置命令指导首次使用的用户进行连接、架构选择、验证深度和输出位置。
正确性由恢复率衡量:将完整的外键从架构中剥离,运行pgfathom,并报告恢复的分数。结果在公共语料库上发布,覆盖GitLab、市政系统和Discourse,显示在部分(删除一半的键)和绿地(未声明任何键)模式下的性能。该工具还报告每个阶段的贡献量,即配置文件本身、名称检测和连接挖掘。
输出包括终端摘要,其中包含每个判断的计数、分析的表和统计预过滤结果;版本化的JSON模型,使用时间戳;以及包含确认键的DDL(在审查后准备运行)和包含已破坏键的注释DDL(在执行任何操作之前进行检查)的.sql文件。所有生成的SQL都旨在在执行之前进行审查。
总之,pgfathom将静默、未记录的架构转化为可见、可操作的模型,提供解决已破坏完整性和恢复缺失约束所需的精确查询。
评论
0 评分人数达到10人后显示
登录后参与讨论。