pg_durable
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
pg_durable | 0.2.8 | FEAT | PostgreSQL | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2870 | pg_durable | No | Yes | Yes | Yes | No | No | pg_catalog |
Requires preload and a superuser worker role; pgrx 0.19.2.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.2.8 | 1817161514 | pg_durable | - |
| RPM | PIGSTY | 0.2.8 | 1817161514 | pg_durable_$v | - |
| DEB | PIGSTY | 0.2.8 | 1817161514 | postgresql-$v-pg-durable | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.2.8 el8.x86_64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.2.8 el8.x86_64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.2.8 el8.x86_64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.2.8 el8.x86_64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.2.8 el8.x86_64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el8.x86_64.rpm
|
| el8.aarch64 | PIGSTY 0.2.8 el8.aarch64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.2.8 el8.aarch64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.2.8 el8.aarch64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.2.8 el8.aarch64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.2.8 el8.aarch64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el8.aarch64.rpm
|
| el9.x86_64 | PIGSTY 0.2.8 el9.x86_64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.2.8 el9.x86_64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.2.8 el9.x86_64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.2.8 el9.x86_64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.2.8 el9.x86_64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el9.x86_64.rpm
|
| el9.aarch64 | PIGSTY 0.2.8 el9.aarch64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.2.8 el9.aarch64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.2.8 el9.aarch64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.2.8 el9.aarch64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.2.8 el9.aarch64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el9.aarch64.rpm
|
| el10.x86_64 | PIGSTY 0.2.8 el10.x86_64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.2.8 el10.x86_64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.2.8 el10.x86_64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.2.8 el10.x86_64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.2.8 el10.x86_64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el10.x86_64.rpm
|
| el10.aarch64 | PIGSTY 0.2.8 el10.aarch64.pg18 : pg_durable_18 pg_durable_18-0.2.8-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.2.8 el10.aarch64.pg17 : pg_durable_17 pg_durable_17-0.2.8-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.2.8 el10.aarch64.pg16 : pg_durable_16 pg_durable_16-0.2.8-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.2.8 el10.aarch64.pg15 : pg_durable_15 pg_durable_15-0.2.8-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.2.8 el10.aarch64.pg14 : pg_durable_14 pg_durable_14-0.2.8-1PGSTY.el10.aarch64.rpm
|
| d12.x86_64 | PIGSTY 0.2.8 d12.x86_64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.2.8 d12.x86_64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.2.8 d12.x86_64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.2.8 d12.x86_64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.2.8 d12.x86_64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~bookworm_amd64.deb
|
| d12.aarch64 | PIGSTY 0.2.8 d12.aarch64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.2.8 d12.aarch64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.2.8 d12.aarch64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.2.8 d12.aarch64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.2.8 d12.aarch64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~bookworm_arm64.deb
|
| d13.x86_64 | PIGSTY 0.2.8 d13.x86_64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~trixie_amd64.deb
| PIGSTY 0.2.8 d13.x86_64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~trixie_amd64.deb
| PIGSTY 0.2.8 d13.x86_64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~trixie_amd64.deb
| PIGSTY 0.2.8 d13.x86_64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~trixie_amd64.deb
| PIGSTY 0.2.8 d13.x86_64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~trixie_amd64.deb
|
| d13.aarch64 | PIGSTY 0.2.8 d13.aarch64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~trixie_arm64.deb
| PIGSTY 0.2.8 d13.aarch64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~trixie_arm64.deb
| PIGSTY 0.2.8 d13.aarch64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~trixie_arm64.deb
| PIGSTY 0.2.8 d13.aarch64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~trixie_arm64.deb
| PIGSTY 0.2.8 d13.aarch64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~trixie_arm64.deb
|
| u22.x86_64 | PIGSTY 0.2.8 u22.x86_64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~jammy_amd64.deb
| PIGSTY 0.2.8 u22.x86_64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~jammy_amd64.deb
| PIGSTY 0.2.8 u22.x86_64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~jammy_amd64.deb
| PIGSTY 0.2.8 u22.x86_64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~jammy_amd64.deb
| PIGSTY 0.2.8 u22.x86_64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~jammy_amd64.deb
|
| u22.aarch64 | PIGSTY 0.2.8 u22.aarch64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~jammy_arm64.deb
| PIGSTY 0.2.8 u22.aarch64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~jammy_arm64.deb
| PIGSTY 0.2.8 u22.aarch64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~jammy_arm64.deb
| PIGSTY 0.2.8 u22.aarch64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~jammy_arm64.deb
| PIGSTY 0.2.8 u22.aarch64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~jammy_arm64.deb
|
| u24.x86_64 | PIGSTY 0.2.8 u24.x86_64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~noble_amd64.deb
| PIGSTY 0.2.8 u24.x86_64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~noble_amd64.deb
| PIGSTY 0.2.8 u24.x86_64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~noble_amd64.deb
| PIGSTY 0.2.8 u24.x86_64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~noble_amd64.deb
| PIGSTY 0.2.8 u24.x86_64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~noble_amd64.deb
|
| u24.aarch64 | PIGSTY 0.2.8 u24.aarch64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~noble_arm64.deb
| PIGSTY 0.2.8 u24.aarch64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~noble_arm64.deb
| PIGSTY 0.2.8 u24.aarch64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~noble_arm64.deb
| PIGSTY 0.2.8 u24.aarch64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~noble_arm64.deb
| PIGSTY 0.2.8 u24.aarch64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~noble_arm64.deb
|
| u26.x86_64 | PIGSTY 0.2.8 u26.x86_64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~resolute_amd64.deb
| PIGSTY 0.2.8 u26.x86_64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~resolute_amd64.deb
| PIGSTY 0.2.8 u26.x86_64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~resolute_amd64.deb
| PIGSTY 0.2.8 u26.x86_64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~resolute_amd64.deb
| PIGSTY 0.2.8 u26.x86_64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~resolute_amd64.deb
|
| u26.aarch64 | PIGSTY 0.2.8 u26.aarch64.pg18 : postgresql-18-pg-durable postgresql-18-pg-durable_0.2.8-1PGSTY~resolute_arm64.deb
| PIGSTY 0.2.8 u26.aarch64.pg17 : postgresql-17-pg-durable postgresql-17-pg-durable_0.2.8-1PGSTY~resolute_arm64.deb
| PIGSTY 0.2.8 u26.aarch64.pg16 : postgresql-16-pg-durable postgresql-16-pg-durable_0.2.8-1PGSTY~resolute_arm64.deb
| PIGSTY 0.2.8 u26.aarch64.pg15 : postgresql-15-pg-durable postgresql-15-pg-durable_0.2.8-1PGSTY~resolute_arm64.deb
| PIGSTY 0.2.8 u26.aarch64.pg14 : postgresql-14-pg-durable postgresql-14-pg-durable_0.2.8-1PGSTY~resolute_arm64.deb
|
Build
You can build the RPM / DEB packages for pg_durable using pig build:
Install
You can install pg_durable directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
Install the extension using pig or apt/yum/dnf:
Preload:
Create Extension:
Usage
Sources:
pg_durable runs durable, fault-tolerant SQL workflows inside PostgreSQL. A workflow is a graph of SQL steps, timers, signals, conditions, and parallel branches submitted with df.start(). Execution state is checkpointed in PostgreSQL so completed steps are not repeated after a crash, restart, or retry.
Enable and Grant Access
Preload the worker, select its database and superuser role if the defaults are unsuitable, then restart PostgreSQL:
Create the extension in pg_durable.database and grant an application login role access:
The worker role must be a superuser because it manages all users’ instances while bypassing row-level security. The role that calls df.start() must have LOGIN, because workflow SQL is executed through a connection authenticated as that captured role.
Build and Run a Workflow
df.start() returns an instance ID. Use it to monitor or control the run:
DSL Index
~>sequences steps;|=>names a result for$name,$name.column, or$name.*substitution.&/df.join()waits for parallel branches;|/df.race()keeps the first result.?>and!>/df.if()select conditional branches;@>/df.loop()repeats a graph.df.sleep(),df.wait_for_schedule(), anddf.wait_for_signal()make waits durable.df.signal(),df.wait_for_completion(),df.explain(), and the instance-inspection functions operate on running or stored instances.df.setvar(),df.getvar(),df.unsetvar(), anddf.clearvars()manage per-user variables captured whendf.start()is called.
Version 0.2.6 Boundaries
- Upstream source installation and published images support PostgreSQL 17 and 18 with
pgrx0.16.1. The extension still requiresshared_preload_libraries, a restart, and a superuser worker role. - Upgrades through 0.2.4 and 0.2.5 contain replay-breaking workflow changes. Drain or cancel in-flight JOIN, RACE, loop, and
df.wait_for_schedule()work before upgrading; the 0.2.4df.nodeskey migration also takes anACCESS EXCLUSIVElock. df.start(..., transaction_mode => 'new')persists an independent start outside the caller transaction. Cluster-wide admission defaults to two concurrent starts and is controlled bypg_durable.max_new_transaction_startsandpg_durable.new_transaction_start_timeout.- Variable substitution is resolved once from left to right in 0.2.6, so token-shaped text introduced by a value is not rescanned. It remains raw SQL substitution; never place untrusted input in
{name}variables. Named step-result substitution through$nameperforms SQL escaping. - The undocumented
df.ensure_durofut(text)helper was removed. Drop or rewrite customer-owned dependent objects before upgrading. - Re-run
df.grant_usage()afterALTER EXTENSION ... UPDATE, because grants on all functions do not automatically include functions added later. df.http()anddf.http_multipart()availability and egress policy are compile-time features. Their restrictions do not sandbox arbitrary SQL or other installed extensions.- The project remains pre-1.0, and upstream’s published Docker images are for evaluation and learning rather than production. Read every adjacent upgrade warning instead of assuming an untested multi-version jump is replay-safe.
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)