pg_liquid
受 Liquid 启发的 Datalog 图查询扩展
仓库
michael-golfi/pg_liquid
https://github.com/michael-golfi/pg_liquid
源码
pg_liquid-0.1.7.tar.gz
pg_liquid-0.1.7.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_liquid | 0.1.7 | FEAT | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2610 | pg_liquid | 否 | 是 | 否 | 是 | 否 | 否 | liquid |
| 相关扩展 | age jsquery pg_jsonschema pg_search |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.7 | 1817161514 | pg_liquid | - |
| RPM | PIGSTY | 0.1.7 | 1817161514 | pg_liquid_$v | - |
| DEB | PIGSTY | 0.1.7 | 1817161514 | postgresql-$v-pg-liquid | - |
构建
您可以使用 pig build 命令构建 pg_liquid 扩展的 RPM / DEB 包:
pig build pkg pg_liquid # 构建 RPM / DEB 包
安装
您可以直接安装 pg_liquid 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_liquid; # 当前活跃 PG 版本安装
pig ext install -y pg_liquid -v 18 # PG 18
pig ext install -y pg_liquid -v 17 # PG 17
pig ext install -y pg_liquid -v 16 # PG 16
pig ext install -y pg_liquid -v 15 # PG 15
pig ext install -y pg_liquid -v 14 # PG 14
dnf install -y pg_liquid_18 # PG 18
dnf install -y pg_liquid_17 # PG 17
dnf install -y pg_liquid_16 # PG 16
dnf install -y pg_liquid_15 # PG 15
dnf install -y pg_liquid_14 # PG 14
apt install -y postgresql-18-pg-liquid # PG 18
apt install -y postgresql-17-pg-liquid # PG 17
apt install -y postgresql-16-pg-liquid # PG 16
apt install -y postgresql-15-pg-liquid # PG 15
apt install -y postgresql-14-pg-liquid # PG 14
创建扩展:
CREATE EXTENSION pg_liquid;
用法
来源:Docs site,README,Release v0.1.7,SQL install script
pg_liquid 将 Liquid 风格的 graph 与 compound query 引入 PostgreSQL。它在 liquid schema 中存储 graph state,并提供普通 query、principal-bound query 与 least-privilege read 的 SQL 入口。
核心查询接口
CREATE EXTENSION pg_liquid;
SELECT *
FROM liquid.query($$
Edge("a","b").
Edge("b","c").
Path(X,Y) :- Edge(X,Y).
Path(X,Y) :- Edge(X,Z), Path(Z,Y).
Path("a",Y)?
$$) AS t(y text);
liquid.query(program text):执行 Liquid facts、rules 和一个最终 query。liquid.query_as(principal text, program text):以 principal 绑定方式执行。liquid.read_as(principal text, program text):最小权限读取封装,面向应用侧读取。
语言与建模特性
- 以
.结尾的 facts 和 rules - 每个 program 只能有一个最终
?query - 通过
Edge(...)表示 graph edges - 形如
Type@(role=value, ...)的 typed compounds - query-local recursive rules
- 内建策略 compound,例如
CompoundReadByRole与liquid/acts_for
行规范化器
SELECT liquid.create_row_normalizer(
'account_profiles'::regclass,
'account_profile_normalizer',
'AccountProfile',
'{"account_id":"id","display_name":"display_name","tier":"tier"}'::jsonb,
true
);
liquid.create_row_normalizer(...):将关系行投影为 Liquid compounds。liquid.rebuild_row_normalizer(...):在表结构变化后重新生成绑定。liquid.drop_row_normalizer(...):删除规范化器,并可选清理已生成绑定。
注意事项
- 上游在 PostgreSQL 14 到 18 上验证该扩展。
- 随附 SQL 会从
PUBLIC撤销query_as与read_as;应按需显式授权。 - 当客户端不应声明新 facts 时,
read_as(...)是更安全的应用入口。