pg_liquid

受 Liquid 启发的 Datalog 图查询扩展

概览

扩展包名版本分类许可证语言
pg_liquid0.1.7FEATMITC
ID扩展名BinLibLoadCreateTrustReloc模式
2610pg_liquidliquid
相关扩展age jsquery pg_jsonschema pg_search

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.1.71817161514pg_liquid-
RPMPIGSTY0.1.71817161514pg_liquid_$v-
DEBPIGSTY0.1.71817161514postgresql-$v-pg-liquid-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
u22.x86_64
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
u22.aarch64
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
u24.x86_64
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
u24.aarch64
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
PIGSTY 0.1.7
u26.x86_64
u26.aarch64

构建

您可以使用 pig build 命令构建 pg_liquid 扩展的 RPM / DEB 包:

pig build pkg pg_liquid         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_liquid 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

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 siteREADMERelease v0.1.7SQL 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,例如 CompoundReadByRoleliquid/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_asread_as;应按需显式授权。
  • 当客户端不应声明新 facts 时,read_as(...) 是更安全的应用入口。

最后修改 2026-05-01: update extension data (e399d22)