pg_improv
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
pg_improv | 0.12.1 | OLAP | Apache-2.0 OR MIT | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2580 | pg_improv | No | Yes | No | Yes | No | No | improv |
Superuser install; commit mode needs preload; logical mode also needs shared preload/restart, wal_level=logical and a worker database. Logical slots retain WAL; numeric results use float8. PG15-18; build pgrx 0.19.3, upstream 0.17.0.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.12.1 | 1817161514 | pg_improv | - |
| RPM | PIGSTY | 0.12.1 | 1817161514 | pg_improv_$v | - |
| DEB | PIGSTY | 0.12.1 | 1817161514 | postgresql-$v-pg-improv | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.12.1 el8.x86_64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.12.1 el8.x86_64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.12.1 el8.x86_64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.12.1 el8.x86_64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el8.x86_64.rpm
| N/A |
| el8.aarch64 | PIGSTY 0.12.1 el8.aarch64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.12.1 el8.aarch64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.12.1 el8.aarch64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.12.1 el8.aarch64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el8.aarch64.rpm
| N/A |
| el9.x86_64 | PIGSTY 0.12.1 el9.x86_64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.12.1 el9.x86_64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.12.1 el9.x86_64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.12.1 el9.x86_64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el9.x86_64.rpm
| N/A |
| el9.aarch64 | PIGSTY 0.12.1 el9.aarch64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.12.1 el9.aarch64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.12.1 el9.aarch64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.12.1 el9.aarch64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el9.aarch64.rpm
| N/A |
| el10.x86_64 | PIGSTY 0.12.1 el10.x86_64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.12.1 el10.x86_64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.12.1 el10.x86_64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.12.1 el10.x86_64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el10.x86_64.rpm
| N/A |
| el10.aarch64 | PIGSTY 0.12.1 el10.aarch64.pg18 : pg_improv_18 pg_improv_18-0.12.1-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.12.1 el10.aarch64.pg17 : pg_improv_17 pg_improv_17-0.12.1-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.12.1 el10.aarch64.pg16 : pg_improv_16 pg_improv_16-0.12.1-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.12.1 el10.aarch64.pg15 : pg_improv_15 pg_improv_15-0.12.1-1PGSTY.el10.aarch64.rpm
| N/A |
| d12.x86_64 | PIGSTY 0.12.1 d12.x86_64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.12.1 d12.x86_64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.12.1 d12.x86_64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.12.1 d12.x86_64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~bookworm_amd64.deb
| N/A |
| d12.aarch64 | PIGSTY 0.12.1 d12.aarch64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.12.1 d12.aarch64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.12.1 d12.aarch64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.12.1 d12.aarch64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~bookworm_arm64.deb
| N/A |
| d13.x86_64 | PIGSTY 0.12.1 d13.x86_64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~trixie_amd64.deb
| PIGSTY 0.12.1 d13.x86_64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~trixie_amd64.deb
| PIGSTY 0.12.1 d13.x86_64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~trixie_amd64.deb
| PIGSTY 0.12.1 d13.x86_64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~trixie_amd64.deb
| N/A |
| d13.aarch64 | PIGSTY 0.12.1 d13.aarch64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~trixie_arm64.deb
| PIGSTY 0.12.1 d13.aarch64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~trixie_arm64.deb
| PIGSTY 0.12.1 d13.aarch64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~trixie_arm64.deb
| PIGSTY 0.12.1 d13.aarch64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~trixie_arm64.deb
| N/A |
| u22.x86_64 | PIGSTY 0.12.1 u22.x86_64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~jammy_amd64.deb
| PIGSTY 0.12.1 u22.x86_64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~jammy_amd64.deb
| PIGSTY 0.12.1 u22.x86_64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~jammy_amd64.deb
| PIGSTY 0.12.1 u22.x86_64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~jammy_amd64.deb
| N/A |
| u22.aarch64 | PIGSTY 0.12.1 u22.aarch64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~jammy_arm64.deb
| PIGSTY 0.12.1 u22.aarch64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~jammy_arm64.deb
| PIGSTY 0.12.1 u22.aarch64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~jammy_arm64.deb
| PIGSTY 0.12.1 u22.aarch64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~jammy_arm64.deb
| N/A |
| u24.x86_64 | PIGSTY 0.12.1 u24.x86_64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~noble_amd64.deb
| PIGSTY 0.12.1 u24.x86_64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~noble_amd64.deb
| PIGSTY 0.12.1 u24.x86_64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~noble_amd64.deb
| PIGSTY 0.12.1 u24.x86_64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~noble_amd64.deb
| N/A |
| u24.aarch64 | PIGSTY 0.12.1 u24.aarch64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~noble_arm64.deb
| PIGSTY 0.12.1 u24.aarch64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~noble_arm64.deb
| PIGSTY 0.12.1 u24.aarch64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~noble_arm64.deb
| PIGSTY 0.12.1 u24.aarch64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~noble_arm64.deb
| N/A |
| u26.x86_64 | PIGSTY 0.12.1 u26.x86_64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~resolute_amd64.deb
| PIGSTY 0.12.1 u26.x86_64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~resolute_amd64.deb
| PIGSTY 0.12.1 u26.x86_64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~resolute_amd64.deb
| PIGSTY 0.12.1 u26.x86_64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~resolute_amd64.deb
| N/A |
| u26.aarch64 | PIGSTY 0.12.1 u26.aarch64.pg18 : postgresql-18-pg-improv postgresql-18-pg-improv_0.12.1-1PGSTY~resolute_arm64.deb
| PIGSTY 0.12.1 u26.aarch64.pg17 : postgresql-17-pg-improv postgresql-17-pg-improv_0.12.1-1PGSTY~resolute_arm64.deb
| PIGSTY 0.12.1 u26.aarch64.pg16 : postgresql-16-pg-improv postgresql-16-pg-improv_0.12.1-1PGSTY~resolute_arm64.deb
| PIGSTY 0.12.1 u26.aarch64.pg15 : postgresql-15-pg-improv postgresql-15-pg-improv_0.12.1-1PGSTY~resolute_arm64.deb
| N/A |
Build
You can build the RPM / DEB packages for pg_improv using pig build:
Install
You can install pg_improv directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
Install the extension using pig or apt/yum/dnf:
Create Extension:
Usage
Sources:
pg_improv 0.12.1 binds PostgreSQL tables to multidimensional models, evaluates formulas and materializes results. It supports PostgreSQL 15–18 and requires superuser installation. This example uses manual synchronization, which works without preloading the library.
Core Workflow
Bind categories before their measures. Duplicate coordinates require an explicit aggregate; null values do not create model cells. Result tables live in a model-specific schema. improv.define accepts replace => true to replace a formula, and improv.recalc returns the number of changed result rows.
Synchronization Modes
improv.set_sync_mode chooses manual, trigger, commit or logical synchronization. Trigger mode works without preloading; commit mode needs session or server preloading. The default logical mode needs shared_preload_libraries, a server restart, wal_level=logical and the appropriate improv.database worker setting. Logical results arrive asynchronously; use explicit recalculation when a transaction must immediately see current results.
Monitor improv.status and cap retained WAL with max_slot_wal_keep_size. Logical replication slots can retain WAL while a worker stalls. Binding tables can create publications and change replica identity; account for those effects before enabling logical mode.
Formula and Maintenance Boundaries
The improv language supports scalar formulas as well as model expressions, but not arbitrary SQL calls or external I/O. Formula errors normally become null; improv.raise_errors changes that policy. Numeric values and large integers pass through floating-point evaluation, so precision beyond 2^53 needs care. improv.max_cells limits loaded input cells.
Back up model definitions and result state with database dumps and rehearse restoration; logical mode needs a fresh slot and recomputation after restore. Library upgrades require restarting preloaded processes and updating the extension SQL. Model computation is distinct from an application transaction’s source-of-truth tables.
Ownership and Database-Wide Logical Sync since 0.11.0
Each model now reads and writes as its owner; row-level security protects its catalog, items and cells. Only a superuser or a role allowed to act as the owner may change or recalculate that model. Grant improv_user to a model creator and grant the source-table privileges it needs; the administrator role does not automatically become every model owner. A shared result table still needs ordinary grants. what_if can reveal owner-visible data, so grant access deliberately. Logical models in one database now share one slot and publication. Upgrade with the matching library and SQL scripts, restore roles before model dumps, and monitor retained WAL.
0.12.1 Release Note
The 0.12.0 SQL migration adds improv.measure.format for persisted display formatting; update the extension before saving formats. Release 0.12.1 changes the version from 0.12.0 without additional code changes and restores RHEL 8 (glibc 2.28) compatible artifacts. Upstream still uses pgrx 0.17.0. Logical synchronization still requires shared_preload_libraries, wal_level=logical and a restart; trigger and manual modes do not.
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)