acdat
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
acdat | 0.1.0 | FTS | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2250 | acdat | 否 | 是 | 否 | 是 | 否 | 否 | acdat |
Indexes the compiled pattern dictionary, not the document table; exact case-sensitive matching in the fixed acdat schema.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.0 | 1817161514 | acdat | - |
| RPM | PIGSTY | 0.1.0 | 1817161514 | acdat_$v | - |
| DEB | PIGSTY | 0.1.0 | 1817161514 | postgresql-$v-acdat | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | MISS | MISS | MISS | MISS | MISS |
| el8.aarch64 | MISS | MISS | MISS | MISS | MISS |
| el9.x86_64 | MISS | MISS | MISS | MISS | MISS |
| el9.aarch64 | MISS | MISS | MISS | MISS | MISS |
| el10.x86_64 | MISS | MISS | MISS | MISS | MISS |
| el10.aarch64 | MISS | MISS | MISS | MISS | MISS |
| d12.x86_64 | MISS | MISS | MISS | MISS | MISS |
| d12.aarch64 | MISS | MISS | MISS | MISS | MISS |
| d13.x86_64 | MISS | MISS | MISS | MISS | MISS |
| d13.aarch64 | MISS | MISS | MISS | MISS | MISS |
| u22.x86_64 | MISS | MISS | MISS | MISS | MISS |
| u22.aarch64 | MISS | MISS | MISS | MISS | MISS |
| u24.x86_64 | MISS | MISS | MISS | MISS | MISS |
| u24.aarch64 | MISS | MISS | MISS | MISS | MISS |
| u26.x86_64 | MISS | MISS | MISS | MISS | MISS |
| u26.aarch64 | MISS | MISS | MISS | MISS | MISS |
构建
您可以使用 pig build 命令构建 acdat 扩展的 RPM / DEB 包:
安装
您可以直接安装 acdat 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
acdat 0.1.0 将大规模精确字面量模式词典编译为不可变的 Aho-Corasick Double-Array machine,再对每个 text 或 bytea 值执行一次扫描以完成匹配或替换。它适合策略规则、失陷指标、实体名称、脱敏别名等稳定且会被反复使用的词典。
核心流程
创建扩展、编译词典,并在大量输入上复用生成的 acdat.machine 值:
生产词典的源规则应保存在应用自有表中。acdat.compile() 的聚合重载可以直接从模式、ID、替换值和优先级记录构建确定性的 machine;一次编译后即可扫描大量输入。
匹配与替换
acdat.contains() 在首次命中后停止。acdat.matches() 返回 acdat.hit 行,其中包含模式 ID、字节与字符坐标以及优先级。acdat.replace() 执行字面量、非递归替换:
匹配策略包括 all_overlapping、leftmost_longest 和 leftmost_priority。替换只能使用非重叠策略。可通过 acdat.info() 检查已编译 machine,并在移动或校验产物时使用导出、验证、导入和指纹函数。
acdat.matches() 的 max_matches 默认值为 10000,acdat.replace() 的 max_output_bytes 默认值为 268435456。对于不可信或高命中输入,应设置更严格的上限,确保命中枚举和替换输出有界。
托管词典
可选的目录层用于发布不可变、内容寻址的 build,并以原子方式选择一个活动 build。其控制函数使用 SECURITY INVOKER,且不向 PUBLIC 授予执行权限:
应用表始终是事实源。逻辑备份包含目录元数据和活动 machine 载荷,但不会包含所有历史产物,因此应保留重建已退休或非活动版本所需的源模式。
兼容性与安全
0.1.0 已在 PostgreSQL 14 至 18 上测试,不需要预加载或重启服务器,没有外部扩展依赖,也不定义 GUC。控制文件将 schema 固定为 acdat,并设置 relocatable = false 和 trusted = false,因此 CREATE EXTENSION 需要超级用户。
ACDAT 索引的是模式词典,而不是文档表:扫描已有大表时仍需读取候选行。匹配是精确且区分大小写的;扩展不提供正则表达式、模糊匹配、分词、自动大小写折叠、Unicode 规范化或文档侧索引。文本引擎支持 UTF-8 和单字节服务器编码,二进制数据应使用 bytea 接口。需要反复反向查询时,应将 (document_id, pattern_id) 命中物化到应用表中。
编译格式具备自描述和校验和,导入的产物会在使用前接受验证。卸载前应清点依赖:DROP EXTENSION acdat 会删除托管词典状态,而添加 CASCADE 还可能删除依赖 acdat.machine 的用户列或其他对象。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)