2025年9月25日: PostgreSQL 18 发布!

Greenmask 0.2.0 - 0.2.5 发布

发布于 2024-12-12,作者 Greenmask.io
相关开源项目

PostgreSQL 数据库匿名化和合成数据生成工具

这些版本的发布标志着重要的里程碑,极大地扩展了 Greenmask 的功能,并将其转变为一个简单、可扩展且可靠的数据库安全、数据匿名化和日常操作解决方案。我们的目标是构建一个核心系统,为全面的动态暂存环境和强大的数据安全奠定基础。

这些更新引入了数据库子集、pgzip 支持、按拓扑顺序恢复以及重构的转换器等新功能,极大地增强了 Greenmask 的灵活性以满足多样化的业务需求。它们还包含许多修复和改进。

Greenmask 概述

Greenmask 是一个强大的开源实用程序,专为逻辑数据库备份转储、匿名化、合成数据生成和恢复而设计。它无状态,无需更改数据库模式。它旨在高度可定制,与现有的 PostgreSQL 实用程序向后兼容,快速可靠。

非常适合

  • 备份与恢复:轻松简化日常任务,如逻辑备份、表截断后的恢复,或替换 pg_dump 和 pg_restore。
  • 匿名化与数据屏蔽:通过匿名化和转换备份,简化暂存环境设置和分析任务,确保数据一致、安全,以便更快地

Greenmask 在 GitHub

重要更改

  • PostgreSQL 17 支持 - 已修改移植的库以支持 PostgreSQL 17

  • 数据库子集 - 一项新功能,允许您定义数据库的子集,从而减小转储文件的大小(#110)。这对于多用途环境非常强大,尤其适用于测试和开发环境。它支持

    • 包含 NULL 值 的引用 - 为带有 NULL 值的 FK 引用生成 LEFT JOIN 查询,以便将其包含在子集中。
    • 支持 虚拟引用(虚拟外键)- 在 Greenmask 中创建逻辑 FK,用于子集依赖关系图。虚拟引用可以为列或表达式定义,允许您从 JSON 等中获取值。
    • 支持 循环引用 - Greenmask 将通过生成递归查询自动解析子集中的循环依赖。查询的生成附带子集的完整性检查,确保从循环依赖中收集的数据是一致的。
    • 完全涵盖文档,包括 故障排除示例
    • 支持具有多个列(或表达式)的 FK 和 PK。
    • 支持多循环在单个强连通分量 (SCC) 中解析 - Greenmask 将为 SCC 生成递归查询,无论它是单个循环还是多个循环,这使得子集系统对于任何数据库模式都具有通用性。
    • 支持多态关系 - 您可以使用 polymorphic_exprs 属性为具有多态引用的表定义 虚拟引用,并使用 greenmask 为这些表生成子集。
  • 转换条件 - 仅在满足指定条件时执行定义的转换。#133

  • 转换继承 - 分区表和具有外键的表的转换继承。定义一次,应用所有。 [#229]
  • pgzip 支持,实现更快的 压缩解压缩 — 设置 --pgzip 可以通过并行压缩加快转储和恢复过程。在某些测试中,它显示了高达 5 倍的转储和恢复速度。
  • 按拓扑顺序恢复 - 此标志确保在依赖表恢复之前不会恢复依赖于它们的表。当您希望尽快收到错误通知而不必等待整个表恢复时,这非常有用。
  • INSERT 格式恢复 - 为了实现灵活的恢复过程,Greenmask 现在支持以 INSERT 格式恢复数据。它基于转储中的 COPY 记录生成 insert 语句。您无需重新转储数据即可使用此功能;可以在 restore 命令中定义它。与 INSERT 格式相关的新功能列表

    • 如果设置了 --on-conflict-do-nothing 标志,则生成带有 ON CONFLICT DO NOTHING 子句的 INSERT 语句。
    • 配置中的错误排除列表,用于跳过某些错误并继续插入转储中的后续行。
    • 用例 - 逻辑数据的增量转储和恢复。例如,如果您有一个数据库,并且想定期从另一个源插入数据,可以将其与数据库子集和转换结合使用,以使目标数据库保持最新。
  • 恢复数据批处理#173)- 默认情况下,COPY 协议仅在事务提交时返回错误。要覆盖此行为,请使用 --batch-size 标志指定在 COPY 命令期间单次插入的行数。当您想控制事务大小和提交时,这非常有用。

  • RandomPerson 转换器引入了 keep_null 参数。

  • 在转换器中引入了动态参数

    • 大多数转换器现在支持适用的动态参数。
    • 动态参数强制执行严格。如果您需要将值转换为其他类型,Greenmask 提供了模板和预定义的转换函数,可以通过 cast_to 访问。这些函数涵盖了常见的操作,如 UnixTimestampToDateIntToBool
  • 转换逻辑已得到显着重构,使得转换器比以前更加可定制和灵活。
  • 引入了转换引擎

    • random - 基于伪随机算法生成转换器值。
    • hash - 使用哈希函数生成转换器值。目前,它使用 sha3 哈希函数,该函数是安全的但性能较低。在稳定版本中,将提供在 sha3SipHash 之间进行选择的选项。
  • 引入了静态参数值模板

  • 转储保留管理 - 为 delete 命令引入了保留参数(#201)。引入了两个新状态:失败和进行中。如果转储缺少“完成”心跳或最后心跳时间戳超过 30 分钟,则认为该转储失败。delete 命令现在支持以下保留参数

    • --dry-run:以测试模式运行删除操作,并显示详细输出,而不实际删除任何内容。
    • --before-date 2024-08-27T23:50:54+00:00:删除早于指定日期的转储。日期必须以 RFC3339Nano 格式提供,例如:2021-01-01T00:00:00Z
    • --retain-recent 10:保留 N 个最近的转储,其中 N 由用户指定。
    • --retain-for 1w2d3h4m5s6ms7us8ns:保留指定持续时间的转储。格式支持周 (w)、天 (d)、小时 (h)、分钟 (m)、秒 (s)、毫秒 (ms)、微秒 (us) 和纳秒 (ns)。
    • --prune-failed:修剪(删除)所有失败的转储。
    • --prune-unsafe:修剪具有“未知或失败”状态的转储。此选项仅与 --prune-failed 结合使用。

版本列表

链接

如果您有任何问题或需要帮助,请随时与我们联系