pg_durable
在 PostgreSQL 中使用 SQL 定义可持久化、可恢复的长时间运行函数
仓库
microsoft/pg_durable
https://github.com/microsoft/pg_durable
源码
pg_durable-0.2.3.tar.gz
pg_durable-0.2.3.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_durable | 0.2.3 | FEAT | PostgreSQL | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2870 | pg_durable | 否 | 是 | 是 | 是 | 否 | 否 | df |
Requires shared_preload_libraries=pg_durable and a superuser worker role.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.2.3 | 1817161514 | pg_durable | - |
| RPM | PIGSTY | 0.2.3 | 1817161514 | pg_durable_$v | - |
| DEB | PIGSTY | 0.2.3 | 1817161514 | postgresql-$v-pg-durable | - |
构建
您可以使用 pig build 命令构建 pg_durable 扩展的 RPM / DEB 包:
BASH
安装
您可以直接安装 pg_durable 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
预加载配置:
BASH
创建扩展:
SQL
用法
来源:
pg_durable 在PostgreSQL中运行持久、容错的SQL工作流。一个工作流是一系列SQL步骤、定时器、信号、条件和并行分支组成的图,通过df.start()提交。执行状态会在PostgreSQL中进行检查点记录,因此在崩溃、重启或重试后不会重复已完成的步骤。
启用和授权访问
预加载工作进程,如果默认设置不合适,则选择其数据库和超级用户角色,然后重启PostgreSQL:
CONF
在pg_durable.database中创建扩展,并授予应用程序登录角色访问权限:
SQL
工作进程角色必须是超级用户,因为它会管理所有用户的实例并绕过行级安全。调用df.start()的角色必须具有LOGIN权限,因为工作流SQL是通过该捕获角色认证的连接执行的。
构建和运行一个工作流
SQL
df.start()返回实例ID。使用它来监控或控制运行:
SQL
DSL索引
~>用于序列化步骤;|=>为$name、$name.column或$name.*替换命名结果。&/df.join()等待并行分支;|/df.race()保留第一个结果。?>和!>/df.if()选择条件分支;@>/df.loop()重复一个图。df.sleep()、df.wait_for_schedule()和df.wait_for_signal()使等待持久化。df.signal()、df.wait_for_completion()、df.explain()及实例检查函数操作正在运行或存储的实例。df.setvar()、df.getvar()、df.unsetvar()和df.clearvars()管理在调用df.start()时捕获的用户变量。
v0.2.3边界
- 新鲜安装v0.2.3将提供程序对象放置在
_duroxide中;从0.2.2或更早版本升级后保留duroxide。df.duroxide_schema()报告当前活动的模式。 - 深度超过256级或节点数大于10,000的工作流被拒绝。条件查询返回空行时评估为假。
- 在执行
df.grant_usage()后重新运行ALTER EXTENSION ... UPDATE,因为所有函数上的权限不会自动包含后来添加的函数。 {name}变量替换是原始SQL文本替换;不要将不可信输入放置在这样的变量中。通过$name进行命名步骤结果替换执行SQL转义。df.http()可用性和出站策略是编译时特性。其限制不会对任意SQL或其他已安装的扩展进行沙盒化。- 上游将该项目标记为预览版,发布的v0.2.3 Docker镜像用于评估和学习而非生产环境。