provsql
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2900 | provsql | 否 | 是 | 是 | 是 | 是 | 否 | - |
| 相关扩展 | uuid-ossp pgmemento ddl_historization table_log data_historization table_version pgaudit pgmnemo pgcontext vectorize |
|---|
Requires uuid-ossp and shared_preload_libraries=provsql; the control file marks the extension trusted and non-relocatable.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.12.0 | 1817161514 | provsql | uuid-ossp |
| RPM | PIGSTY | 1.12.0 | 1817161514 | provsql_$v | - |
| DEB | PIGSTY | 1.12.0 | 1817161514 | postgresql-$v-provsql | - |
构建
您可以使用 pig build 命令构建 provsql 扩展的 RPM / DEB 包:
安装
您可以直接安装 provsql 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
预加载配置:
创建扩展:
用法
来源:
provsql 为 PostgreSQL 添加半环溯源与不确定性管理功能。上游文档涵盖溯源追踪、半环求值、概率、Shapley 和 Banzhaf 值、位置溯源、更新溯源以及时态功能。
加载并追踪溯源
如果需要,CASCADE 形式会自动安装 uuid-ossp。入门指南指出,预加载步骤是强制要求,因为 ProvSQL 会安装规划器钩子。
用户文档还介绍了溯源映射:
概率与影响力
为元组令牌分配概率:
计算影响力得分:
文档还介绍了 shapley_all_vars 和 banzhaf_all_vars,用于一次计算所有输入变量的得分。
内置半环
内置半环函数使用溯源令牌和溯源映射表:
当前文档包含 sr_how、sr_which、sr_tropical、sr_viterbi、sr_lukasiewicz、sr_minmax 和 sr_maxmin 的编译式包装器。对于 PostgreSQL 14 及更高版本,还包含在多范围值上运行的 sr_temporal、sr_interval_num 和 sr_interval_int。
高级用户仍可定义自定义半环,并通过 provenance_evaluate 或 aggregation_evaluate 对其求值;如果已有编译半环与所需代数相符,上游建议优先使用该编译半环。
额外模式与辅助工具
上游记录的会话 GUC 包括:
provsql.tool_search_path 用于 d4、c2d、dsharp、minic2d、weightmc 和 graph-easy 等外部概率及可视化工具。provsql.last_eval_method 保存最近一次选用的概率求值方法。provsql.aggtoken_text_as_uuid 会让聚合令牌单元格显示为对应的溯源 UUID;agg_token_value_text(token) 可以恢复这些聚合令牌的显示文本。
用户指南还分别介绍了位置溯源辅助工具、更新溯源、get_valid_time、timetravel、timeslice、history 和 undo 等时态辅助工具、电路检查工具 circuit_subgraph(root, max_depth) 和 resolve_input(uuid),以及用于准备辅助搜索路径的 setup_search_path()。
当前概率与推理接口
近期发行版实质性扩展了 SQL 覆盖范围和概率求值能力:
FROM之外的子查询,包括EXISTS、NOT EXISTS、IN、NOT IN、ANY、ALL、行值IN、标量子查询以及ARRAY(SELECT ...);LEFT、RIGHT和FULL外连接,以及修正后的EXCEPT和EXCEPT ALL溯源;- 聚合中遵循 SQL 语义的
NULL处理,以及COUNT、SUM、MIN、MAX和AVG的精确HAVING聚合概率; - 通过方法目录和成本选择器选取概率方法,支持
karp-luby、stopping-rule、sieve、d-tree和probability_bounds; - 精确的有界树宽递归可达性、不安全 UCQ 的联合宽度编译、安全 UCQ 的 Möbius 反演,以及循环递归的吸收式溯源;
- 通过
target | evidence操作符和整元组given()/前缀形式实现条件事件与分布; - 连续和离散的
random_variable家族,包括正态、伽马、对数正态、贝塔、威布尔、帕累托、逆伽马、逆高斯、逻辑斯蒂、泊松、二项、几何、超几何和负二项分布; - 分布参数本身也是随机变量的分层贝叶斯模型,并在存在闭式解时执行共轭后验更新;
- 随源数据变化仍保持正确的维护式溯源映射,以及
NOT IN、EXCEPT和可空随机变量中符合 SQL 规范的NULL行为。
例如,可以基于已观察证据对连续值进行条件化,并读取后验期望:
agg_token 类型支持概率聚合表达式所需的算术运算、一元负号和比较操作。请参考官方概率与连续分布章节,在精确求值、编译式求值和基于采样的求值方法之间进行选择。
注意事项
- 版本 1.11.1 修正了聚合比较的溯源,并使空的
sum、min、max和 product 分组返回 SQLNULL。它还改变了为count(*)生成的内容寻址令牌;如果旧的空输入行为很重要,请重新运行曾将这些令牌物化的查询。 - 版本 1.12.0 将 Möbius 求值扩展至自连接,允许
sr_formula使用可选映射呈现所有门类型,并通过provsql.last_eval_method报告sq-rewrite、bounded-jw和reachability。它还修复了 DML 重写场景,并使重复调用remove_provenance()变得安全。 ALTER EXTENSION provsql UPDATE会安装 SQL 变更。由于 ProvSQL 会按会话缓存函数 OID,请重新连接在更新期间一直保持打开的会话。- 1.12.0 控制文件设置
default_version = '1.12.0',要求uuid-ossp,将扩展标记为受信任且不可重定位。 - 上游文档称 ProvSQL 已在 PostgreSQL 10 到 18 上通过测试。
provsql.update_provenance和多范围半环要求 PostgreSQL 14 或更高版本。- 更新溯源追踪仍处于实验阶段;在大范围启用前,请验证其存储与性能开销。