跳转到主要内容

pg_improv

Incremental multidimensional models and formula functions over PostgreSQL tables.

pg_improv : Incremental multidimensional models and formula functions over PostgreSQL tables.

Overview

ID Extension Package Version Category License Language
2580 pg_improv pg_improv 0.10.0 OLAP Apache-2.0 OR MIT Rust
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-d-- No Yes No Yes no no
Relationships
Schemas improv
Superuser install. Default logical mode needs preload/restart, wal_level=logical and a configured worker database; trigger/manual work without preload, commit mode needs session/server preload. Logical slots retain WAL; results are asynchronous. Builds use pgrx 0.19.3; upstream uses 0.17.0. Numeric model values use float8.

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT PIGSTY 0.10.0 18 17 16 15 14 pg_improv -
RPM PIGSTY 0.10.0 18 17 16 15 14 pg_improv_$v -
DEB PIGSTY 0.10.0 18 17 16 15 14 postgresql-$v-pg-improv -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
el8.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
el9.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
el9.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
el10.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
el10.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
d12.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
d12.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
d13.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
d13.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u22.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u22.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u24.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u24.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u26.x86_64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
u26.aarch64 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 PIGSTY 0.10.0 N/A
Package Version OS ORG SIZE File URL
pg_improv_18 0.10.0 el8.x86_64 pigsty 4.4 MiB pg_improv_18-0.10.0-1PGSTY.el8.x86_64.rpm
pg_improv_18 0.10.0 el8.aarch64 pigsty 3.7 MiB pg_improv_18-0.10.0-1PGSTY.el8.aarch64.rpm
pg_improv_18 0.10.0 el9.x86_64 pigsty 4.3 MiB pg_improv_18-0.10.0-1PGSTY.el9.x86_64.rpm
pg_improv_18 0.10.0 el9.aarch64 pigsty 4.0 MiB pg_improv_18-0.10.0-1PGSTY.el9.aarch64.rpm
pg_improv_18 0.10.0 el10.x86_64 pigsty 4.3 MiB pg_improv_18-0.10.0-1PGSTY.el10.x86_64.rpm
pg_improv_18 0.10.0 el10.aarch64 pigsty 3.9 MiB pg_improv_18-0.10.0-1PGSTY.el10.aarch64.rpm
postgresql-18-pg-improv 0.10.0 d12.x86_64 pigsty 3.7 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~bookworm_amd64.deb
postgresql-18-pg-improv 0.10.0 d12.aarch64 pigsty 3.1 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~bookworm_arm64.deb
postgresql-18-pg-improv 0.10.0 d13.x86_64 pigsty 3.7 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~trixie_amd64.deb
postgresql-18-pg-improv 0.10.0 d13.aarch64 pigsty 3.1 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~trixie_arm64.deb
postgresql-18-pg-improv 0.10.0 u22.x86_64 pigsty 4.0 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~jammy_amd64.deb
postgresql-18-pg-improv 0.10.0 u22.aarch64 pigsty 3.6 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~jammy_arm64.deb
postgresql-18-pg-improv 0.10.0 u24.x86_64 pigsty 4.0 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~noble_amd64.deb
postgresql-18-pg-improv 0.10.0 u24.aarch64 pigsty 3.6 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~noble_arm64.deb
postgresql-18-pg-improv 0.10.0 u26.x86_64 pigsty 3.9 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~resolute_amd64.deb
postgresql-18-pg-improv 0.10.0 u26.aarch64 pigsty 3.6 MiB postgresql-18-pg-improv_0.10.0-1PGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_improv_17 0.10.0 el8.x86_64 pigsty 4.4 MiB pg_improv_17-0.10.0-1PGSTY.el8.x86_64.rpm
pg_improv_17 0.10.0 el8.aarch64 pigsty 3.7 MiB pg_improv_17-0.10.0-1PGSTY.el8.aarch64.rpm
pg_improv_17 0.10.0 el9.x86_64 pigsty 4.3 MiB pg_improv_17-0.10.0-1PGSTY.el9.x86_64.rpm
pg_improv_17 0.10.0 el9.aarch64 pigsty 3.9 MiB pg_improv_17-0.10.0-1PGSTY.el9.aarch64.rpm
pg_improv_17 0.10.0 el10.x86_64 pigsty 4.3 MiB pg_improv_17-0.10.0-1PGSTY.el10.x86_64.rpm
pg_improv_17 0.10.0 el10.aarch64 pigsty 3.9 MiB pg_improv_17-0.10.0-1PGSTY.el10.aarch64.rpm
postgresql-17-pg-improv 0.10.0 d12.x86_64 pigsty 3.6 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~bookworm_amd64.deb
postgresql-17-pg-improv 0.10.0 d12.aarch64 pigsty 3.1 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~bookworm_arm64.deb
postgresql-17-pg-improv 0.10.0 d13.x86_64 pigsty 3.6 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~trixie_amd64.deb
postgresql-17-pg-improv 0.10.0 d13.aarch64 pigsty 3.1 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~trixie_arm64.deb
postgresql-17-pg-improv 0.10.0 u22.x86_64 pigsty 4.0 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~jammy_amd64.deb
postgresql-17-pg-improv 0.10.0 u22.aarch64 pigsty 3.6 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~jammy_arm64.deb
postgresql-17-pg-improv 0.10.0 u24.x86_64 pigsty 4.0 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~noble_amd64.deb
postgresql-17-pg-improv 0.10.0 u24.aarch64 pigsty 3.6 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~noble_arm64.deb
postgresql-17-pg-improv 0.10.0 u26.x86_64 pigsty 3.9 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~resolute_amd64.deb
postgresql-17-pg-improv 0.10.0 u26.aarch64 pigsty 3.6 MiB postgresql-17-pg-improv_0.10.0-1PGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_improv_16 0.10.0 el8.x86_64 pigsty 4.4 MiB pg_improv_16-0.10.0-1PGSTY.el8.x86_64.rpm
pg_improv_16 0.10.0 el8.aarch64 pigsty 3.7 MiB pg_improv_16-0.10.0-1PGSTY.el8.aarch64.rpm
pg_improv_16 0.10.0 el9.x86_64 pigsty 4.3 MiB pg_improv_16-0.10.0-1PGSTY.el9.x86_64.rpm
pg_improv_16 0.10.0 el9.aarch64 pigsty 3.9 MiB pg_improv_16-0.10.0-1PGSTY.el9.aarch64.rpm
pg_improv_16 0.10.0 el10.x86_64 pigsty 4.3 MiB pg_improv_16-0.10.0-1PGSTY.el10.x86_64.rpm
pg_improv_16 0.10.0 el10.aarch64 pigsty 3.9 MiB pg_improv_16-0.10.0-1PGSTY.el10.aarch64.rpm
postgresql-16-pg-improv 0.10.0 d12.x86_64 pigsty 3.6 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~bookworm_amd64.deb
postgresql-16-pg-improv 0.10.0 d12.aarch64 pigsty 3.1 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~bookworm_arm64.deb
postgresql-16-pg-improv 0.10.0 d13.x86_64 pigsty 3.6 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~trixie_amd64.deb
postgresql-16-pg-improv 0.10.0 d13.aarch64 pigsty 3.1 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~trixie_arm64.deb
postgresql-16-pg-improv 0.10.0 u22.x86_64 pigsty 4.0 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~jammy_amd64.deb
postgresql-16-pg-improv 0.10.0 u22.aarch64 pigsty 3.6 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~jammy_arm64.deb
postgresql-16-pg-improv 0.10.0 u24.x86_64 pigsty 4.0 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~noble_amd64.deb
postgresql-16-pg-improv 0.10.0 u24.aarch64 pigsty 3.6 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~noble_arm64.deb
postgresql-16-pg-improv 0.10.0 u26.x86_64 pigsty 3.9 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~resolute_amd64.deb
postgresql-16-pg-improv 0.10.0 u26.aarch64 pigsty 3.6 MiB postgresql-16-pg-improv_0.10.0-1PGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_improv_15 0.10.0 el8.x86_64 pigsty 4.4 MiB pg_improv_15-0.10.0-1PGSTY.el8.x86_64.rpm
pg_improv_15 0.10.0 el8.aarch64 pigsty 3.7 MiB pg_improv_15-0.10.0-1PGSTY.el8.aarch64.rpm
pg_improv_15 0.10.0 el9.x86_64 pigsty 4.3 MiB pg_improv_15-0.10.0-1PGSTY.el9.x86_64.rpm
pg_improv_15 0.10.0 el9.aarch64 pigsty 3.9 MiB pg_improv_15-0.10.0-1PGSTY.el9.aarch64.rpm
pg_improv_15 0.10.0 el10.x86_64 pigsty 4.3 MiB pg_improv_15-0.10.0-1PGSTY.el10.x86_64.rpm
pg_improv_15 0.10.0 el10.aarch64 pigsty 3.9 MiB pg_improv_15-0.10.0-1PGSTY.el10.aarch64.rpm
postgresql-15-pg-improv 0.10.0 d12.x86_64 pigsty 3.7 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~bookworm_amd64.deb
postgresql-15-pg-improv 0.10.0 d12.aarch64 pigsty 3.1 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~bookworm_arm64.deb
postgresql-15-pg-improv 0.10.0 d13.x86_64 pigsty 3.7 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~trixie_amd64.deb
postgresql-15-pg-improv 0.10.0 d13.aarch64 pigsty 3.1 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~trixie_arm64.deb
postgresql-15-pg-improv 0.10.0 u22.x86_64 pigsty 4.0 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~jammy_amd64.deb
postgresql-15-pg-improv 0.10.0 u22.aarch64 pigsty 3.6 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~jammy_arm64.deb
postgresql-15-pg-improv 0.10.0 u24.x86_64 pigsty 4.0 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~noble_amd64.deb
postgresql-15-pg-improv 0.10.0 u24.aarch64 pigsty 3.6 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~noble_arm64.deb
postgresql-15-pg-improv 0.10.0 u26.x86_64 pigsty 4.0 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~resolute_amd64.deb
postgresql-15-pg-improv 0.10.0 u26.aarch64 pigsty 3.6 MiB postgresql-15-pg-improv_0.10.0-1PGSTY~resolute_arm64.deb

Source

pig build pkg pg_improv;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pg_improv;		# install via package name, for the active PG version

pig install pg_improv -v 18;   # install for PG 18
pig install pg_improv -v 17;   # install for PG 17
pig install pg_improv -v 16;   # install for PG 16
pig install pg_improv -v 15;   # install for PG 15

Create this extension with:

CREATE EXTENSION pg_improv;

Usage

Sources:

pg_improv 0.10.0 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

CREATE EXTENSION pg_improv;
CREATE TABLE sales (quarter text, price float8, qty float8);
INSERT INTO sales VALUES ('Q1', 10, 100), ('Q2', 12, 200);
SELECT improv.create_model('plan');
SELECT improv.set_sync_mode('plan', 'manual');
SELECT improv.bind_category('plan', 'Time', 'sales', 'quarter');
SELECT improv.bind_measure('plan', 'Price', 'sales', 'price');
SELECT improv.bind_measure('plan', 'Quantity', 'sales', 'qty');
SELECT improv.define('plan', 'Revenue = Price * Quantity');
SELECT improv.recalc('plan');
SELECT * FROM improv_plan.revenue;
SELECT * FROM improv.status('plan');

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.