# Pigsty v4.5: 575 Extensions, Kafka, MySQL, Valkey, and Silo

LLMS index: [llms.txt](/llms.txt)

---

Pigsty **v4.5.0** is a feature release spanning data services, the PostgreSQL ecosystem, automation safety, and the software supply chain. It adds Kafka KRaft and MySQL 8.4 pilot modules, adds a Valkey engine to REDIS, converges the MINIO module on Silo, and grows the packaged PostgreSQL extension catalog from 531 to 575.

This full review covers **100 commits, 416 files, 42,058 insertions, and 15,984 deletions** from `v4.4.0` (2026-07-10) to `v4.5.0` (`dab5dba3`, 2026-08-14). See the complete source diff at [`v4.4.0...v4.5.0`](https://github.com/pgsty/pigsty/compare/v4.4.0...v4.5.0). A substantial share of the structured diff comes from re-exporting the entire Grafana dashboard set to Dashboard API v2.

## Release Highlights

- **575 PostgreSQL extensions:** 46 entries added and 2 removed, for a net gain of 44. Many Rust extensions move to pgrx 0.19.1, with synchronized RPM/DEB coverage and package-name mappings.
- **Kafka KRaft module:** Native Kafka orchestration with multi-cluster support, dynamic enrollment and retirement, SCRAM-SHA-512/TLS, credential rotation, health gates, monitoring, alerting, and four Grafana dashboards.
- **MySQL 8.4 module:** Standalone and three-node InnoDB Cluster deployments with MySQL Router, XtraBackup, account and database provisioning, parameter protection, monitoring, alerting, and conservative retirement workflows.
- **Valkey and Silo:** REDIS adds `redis_type: valkey`; MINIO now accepts only `minio_type: silo`. The RustFS backend developed during this cycle was withdrawn before the final baseline.
- **Safer cluster orchestration:** PGSQL, REDIS, MINIO, KAFKA, and MYSQL select members by explicit cluster identity. etcd delegation, DBSU key exchange, PITR, backup markers, and removal workflows are tightened as well.
- **Observability upgrades:** New Kafka and MySQL dashboards, MinIO/Silo Metrics V3, and `pg_exporter` 1.4-series configuration with PG19, transaction-age, lock, replication, and cleanup-pressure coverage.
- **Repository and supply-chain upgrades:** SOW now generates local repositories atomically without fabricated ModuleMD. Offline bundles can carry versioned source archives. Infra repackaging standardizes SHA-256-pinned inputs, SPDX licenses, and the `1PGSTY` release suffix.
- **51 standalone configuration templates:** Adds `demo/kafka`, `demo/mysql`, and the eight-node `ha/octo` simulation, while updating `ha/trio` to a compact three-node Silo HA topology.

## Kafka KRaft Pilot Module

The new [Kafka module](/docs/kafka/) uses node state as the source of truth and manages brokers and controllers with dynamic KRaft. It supports multiple Kafka clusters in one inventory and unbounded `kafka.yml` runs; incomplete `--limit` selections are rejected to avoid updating only part of the quorum.

- Nodes persist authoritative manifests and secrets, supporting dynamic controller joins, broker admission, member retirement, and three-stage failed-member replacement.
- SCRAM-SHA-512, TLS, certificate rotation, and credential rotation are supported, followed by partition-health and protocol self-tests.
- `kafka-rm.yml` requires a non-empty `-l/--limit` and validates absolute data paths, target identity, and the surviving anchors needed for partial retirement before stopping services.
- Adds JMX Exporter, Kafka Exporter, Victoria scrape and alert rules, plus Overview, Instance, Topic, and Consumer Grafana dashboards.

Kafka remains a pilot module. Clients must resolve and reach every broker directly; do not put the Kafka data plane behind HAProxy, a VIP, or a conventional L4 load balancer.

## MySQL 8.4 Pilot Module

The new [MySQL module](/docs/mysql/) targets a fixed MySQL 8.4 LTS platform. It supports a standalone instance or a three-node InnoDB Cluster and includes MySQL Shell, MySQL Router, TLS, user/database provisioning, scheduled full XtraBackup backups, and unified monitoring.

- Initialization validates exactly one or three members, creates the cluster, coordinates Router, and handles existing members and partial states idempotently.
- `mysql_parameters` protects replication, TLS, and platform-reserved settings; `loose_`, `skip_`, `disable_`, and `enable_` prefixes cannot bypass the guardrails.
- `mysql_databases` accepts only `name`, `encoding`, and `collate`; databases are created with `DEFAULT ENCRYPTION='N'`.
- Removal validates the target, quorum, and member state before isolation, shutdown, and cleanup. Unlike other modules, `mysql-rm.yml` fails closed when a selected host has no MySQL identity.
- Adds Overview, Cluster, Instance, Replication, and Alert Grafana dashboards plus mysqld_exporter alerts.

## Valkey, Silo, and Mongo Mode

### Redis / Valkey

REDIS keeps Redis as the default engine and can select Valkey explicitly with `redis_type: valkey`. Valkey uses the `valkey-server` and `valkey-cli` packages, while configuration paths, monitoring jobs, service interfaces, and module parameters retain `redis` names for compatibility with existing inventories and dashboards.

Redis/Valkey systemd units now use `Type=notify` with a 1,800-second startup timeout. Topology validation, primary/replica relationships, password handling, tag-scoped removal, and rebuild protection are also strengthened.

### MINIO / Silo

MINIO remains the compatibility module name, but the v4.5 role deploys [Silo](/docs/minio/) and only Silo; `silo` is the sole valid `minio_type`. Silo preserves the S3/Admin APIs, `/minio/*` routes, `MINIO_*` environment variables, and existing disk format, while the package, binary, and systemd service are now named `silo`.

- Startup checks the systemd Invocation ID, `ActiveState=active`, and Silo cluster health, waiting up to roughly 600 seconds so stale process state is not mistaken for a successful restart.
- Object-storage members are grouped by `minio_cluster`, independent of the inventory group name. Multi-cluster inventories should use distinct `minio_alias`, `minio_domain`, and `minio_endpoint` values.
- `ha/trio` changes from single-node object storage to three single-disk Silo members with EC:1, exposed on port 9002 through VIP and HAProxy. The template declares all three default users explicitly so `configure -g` produces consistent S3 credentials.
- Distributed Silo requires `/data/minio` to be a separate filesystem; Silo rejects an ordinary directory on the root filesystem.
- A RustFS backend was added during development and fully withdrawn from the final source. Infra repositories may still carry RustFS or MinIO packages, but neither is a supported v4.5 MINIO backend.

### PostgreSQL Mongo Mode

The standalone FERRET role and `mongo.yml` playbook are removed. Their function is split between [PostgreSQL Mongo mode](/docs/conf/mongo/) and the [FerretDB Docker APP](/docs/app/ferretdb/): PostgreSQL/DocumentDB provides the data layer, and FerretDB in Docker Compose provides the MongoDB protocol layer. Pigsty no longer ships the old FerretDB systemd service, dedicated scrape configuration, or Mongo dashboards.

## Orchestration, Security, and Lifecycle

- `deploy.yml`, `slim.yml`, and the PGSQL, REDIS, MINIO, KAFKA, and MYSQL initialization playbooks skip unrelated hosts by their respective `*_cluster` identities. PGSQL, REDIS, MINIO, and KAFKA removal playbooks apply the same rule.
- PGSQL configuration, PITR, and removal delegate only when a canonical, non-empty `etcd` group exists. DBSU SSH keys are exchanged among actual `pg_cluster_members`, including cross-inventory-group topologies such as Citus.
- PITR and removal delete only etcd subtrees bounded by `/<cluster>/`, avoiding accidental deletion when one cluster name prefixes another. The initial pgBackRest backup writes `initial.done` only after the command succeeds.
- Removal workflows stop services before cleaning data. Kafka, MySQL, and object storage add directory, quorum, surviving-member, and cluster-identity checks.
- A full `pgsql.yml` run is now explicitly described as initialization-only: it restarts Patroni/PostgreSQL and reapplies managed configuration and bootstrap SQL, so it is not a routine convergence command for initialized clusters.
- Pigsty-rendered systemd units live under `/etc/systemd/system`; permissions are tightened for sensitive configuration, environment files, keys, and privileged scripts. Debian/Ubuntu package installation suppresses premature starts of Silo, Redis/Valkey, and legacy logging services.
- HAProxy uses a fixed `/etc/haproxy/haproxy.cfg` plus `/etc/haproxy/conf.d` layout, upstream master-worker mode, a master socket, and `Type=notify`. dnsmasq uses dynamic binding, answers private PTR locally, and handles node addresses that appear only after INFRA initialization.
- Debian/Ubuntu time sync writes the native `/etc/chrony/chrony.conf`, while EL continues to use `/etc/chrony.conf`. During initial synchronization, offsets greater than ten seconds may step within the first 120 updates.

## PostgreSQL Kernels and Extensions

- Default PostgreSQL updates to **18.6** with the repositories. The four standard Patroni templates add an `output_plugin_libraries` allowlist for `pgoutput`, `test_decoding`, and `wal2json`; Patroni filters unsupported settings on older versions.
- The PostgreSQL 19 beta template gains pgBackRest 2.59 and scheduled backup support. It still installs no extensions by default and remains a PG19 trial template.
- Percona PostgreSQL 18 TDE uses cluster mode and keeps Pigsty's private installation prefix to avoid collisions with native PostgreSQL.
- IvorySQL gains default-database initialization and compatible WAL compression in the standard workload templates.
- The PostgreSQL fact loader, per-platform `package_map`, and default extension groups are refreshed together, fixing PGDG/YUM names and missing packages.

Comparing the embedded catalog snapshots in Pig `v1.5.1` (531 entries) and `v1.7.0` (575 entries), this cycle adds 46 extensions and removes 2, for a net gain of 44:

- 32 primary extensions added: `argm`, `cat_tools`, `cron_utils`, `fbsql`, `oidc_validator`, `online_advisor`, `pg_cjk_parser`, `pg_column_tetris`, `pg_describe`, `pg_disorder`, `pg_fts`, `pg_jieba`, `pg_kpart`, `pg_lake`, `pg_local_cache`, `pg_mentat`, `pg_oidc_validator`, `pg_policy`, `pg_roast`, `pg_tiktoken_c`, `pg_turbovec`, `pg_vault_tde`, `pgcontext`, `pgfr_record`, `pgmemento`, `pgmonitor`, `pgsqlmock`, `pgwasm`, `plruby`, `plx`, `postbis`, and `qdgc`.
- 13 subextensions added: `hstore_plruby`, `jsonb_plruby`, `ltree_plruby`, `pg_extension_base`, `pg_extension_updater`, `pg_lake_copy`, `pg_lake_engine`, `pg_lake_iceberg`, `pg_lake_table`, `pg_map`, `pgcontext_pgvector`, `pgfr_analyze`, and `qdgc_postgis`.
- One PGDG extension added: `pg_statviz`. It remains in the online catalog but is not part of the default installation groups.
- `pg_analytics` and `spat` removed: the former is archived, and the latter is a deprecated alpha project.

In addition, `emailaddr`, `explain_ui`, the Rust `oidc_validator`, `pg_summarize`, and `smlar` leave the default installation groups because upstream does not provide a distributable license; packages and catalog records may remain. `pg_relation_sql` is a standalone SQL toolkit without `CREATE EXTENSION` support, so it appears in the packaging table but is not counted among the 575 extensions.

### Extension Package Update Matrix

The table consolidates RPM and DEB batches after v4.4.0 into one final “old version → final version” row per extension: 207 packaged entries plus two catalog removals. Where RPM and DEB differ, both are shown. An unchanged version can still represent a rebuild or a change in package naming, license metadata, or platform coverage.

The first packaging log after July 10 covers July 7–24 without per-entry dates, so the whole batch is included to avoid omitting post-release pgrx 0.19.1 rebuilds and matrix fixes. The final repository indexes remain authoritative for versions and platform availability.

| Extension | Previous | Final | Notes |
|:---|:---|:---|:---|
| `age` | RPM: `1.7.0` | RPM: `1.8.0` | RPM only; PG18 is 1.8.0-rc0, PG17 is 1.7.0 |
| `anon` | `3.1.1` | `3.1.3` | pgrx 0.19.1 |
| `argm` | `-` | `1.1.1` |  |
| `asn1oid` | RPM: `1.6` | RPM: `1.6` | RPM only; license metadata changed to GPL-3.0-or-later |
| `babelfishpg_money` | `1.1.0` | `1.1.0` | Adds PG18 support |
| `babelfishpg_tds` | `1.0.0` | `1.0.0` | Adds PG18 support |
| `babelfishpg_tsql` | `5.5.0` | `5.4.0` | Catalog version corrected to 5.4.0; PG17–18 |
| `biscuit` | `2.4.1` | `3.0.0` | PG16–18; REINDEX is required after upgrading from 2.x |
| `block_copy_command` | `0.1.5` | `0.1.5` | pgrx 0.19.1 |
| `cat_tools` | `-` | `0.3.0` | Pure SQL extension |
| `citus` | `14.1.0` | `14.2.0` | PG16–18; includes citus_columnar; fills EL10/PG14 RPM coverage |
| `convert` | `0.1.0` | `0.1.0` | pgrx 0.19.1 |
| `cron_utils` | `-` | `0.1.0` | Pure SQL extension |
| `dbt2` | `0.61.7` | `0.61.7` | Adds DEB PG14–18 and EL8 RPM PG17–18 |
| `decoder_raw` | `1.0` | `1.0` | Adds EL10/Debian 13; PG14–16 |
| `decoderbufs` | `3.5.0` | RPM: `3.5.0`<br>DEB: `3.6.0` | RPM remains 3.5.0; DEB updates to 3.6.0 |
| `documentdb` | `0.113` | `0.114` | PG15–18; expands to 16 platforms |
| `documentdb_core` | `0.113` | `0.114` | PG15–18; expands to 16 platforms |
| `documentdb_distributed` | `0.113` | `0.114` | PG15–18; expands to 16 platforms |
| `documentdb_extended_rum` | `0.113` | `0.114` | PG15–18; expands to 16 platforms |
| `emailaddr` | `0` | `0` | Removed from default groups because upstream provides no license |
| `emaj` | RPM: `-`<br>DEB: `4.7.1` | `5.0.0` | RPM package renamed to e-maj, with Provides/Obsoletes for the old emaj name |
| `etcd_fdw` | `0.0.1` | `0.0.1` | pgrx 0.19.1 |
| `explain_ui` | `0.0.2` | `0.0.2` | pgrx 0.19.1 rebuild; removed from default groups because upstream provides no license |
| `faker` | `0.5.3` | `0.5.3` | Completes RPM/DEB coverage; Debian 12 and Ubuntu 22.04 use python3-fake-factory 22.0.0 |
| `fbsql` | `-` | `0.1.0` | PG16–18; depends on PL/R |
| `gb18030_2022` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `graph` | `0.1.7` | `1.0.0` | pggraph; pgrx 0.19.1 |
| `h3` | `4.2.3` | `4.2.3` | Adds EL8 x86_64 / PG17–18 RPM |
| `hdfs_fdw` | `2.3.3` | `2.3.3` | Adds DEB PG14–18 |
| `hstore_pllua` | `2.0.12` | `2.0.12` | Adds six EL RPM targets |
| `hstore_plluau` | `2.0.12` | `2.0.12` | Adds six EL RPM targets |
| `http` | `1.7.1` | `1.7.2` |  |
| `hunspell_cs_cz` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_de_de` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_en_us` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_fr` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_ne_np` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_nl_nl` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_nn_no` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_pt_pt` | `1.0` | `1.0` | Completes 16-platform coverage; pt_pt.stop avoids a kernel conflict |
| `hunspell_ru_ru` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `hunspell_ru_ru_aot` | `1.0` | `1.0` | Consolidated hunspell package; 10 dictionaries |
| `imgsmlr` | `1.0` | `1.0` | Adds EL10/Debian 13 |
| `ivorysql_ora` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `jdbc_fdw` | `0.4.0` | `0.5.0` | Package 0.5.0, SQL version 1.2 |
| `jsonschema` | `0.1.9` | `0.1.9` | pgrx 0.19.1 |
| `mobilitydb` | `1.3.0` | `1.3.0` | Adds six EL RPM targets and Ubuntu 22.04 / PG18 DEB |
| `mobilitydb_datagen` | `1.3.0` | `1.3.0` | Completes RPM/DEB coverage with mobilitydb |
| `nominatim_fdw` | `1.3` | `2.1.0` |  |
| `numeral` | RPM: `1.3` | RPM: `1.3` | RPM only; renamed postgresql-numeral; license metadata changed to GPL-2.0-or-later |
| `odbc_fdw` | `0.5.1` | `0.6.1` | Package 0.6.1, SQL version 0.5.2 |
| `ogr_fdw` | `1.1.8` | `1.1.9` |  |
| `oidc_validator` | `-` | `0.1.0` | PG18 only; removed from default groups because upstream provides no license |
| `omni` | `0.2.14` | `0.2.14` | EL10 supports PG14–18; other existing targets are PG18 only |
| `online_advisor` | `-` | `1.0` |  |
| `ora_btree_gin` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `ora_btree_gist` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `pg_ai_query` | RPM: `0.1.1` | RPM: `0.1.1` | EL9/10 RPM only; requires GCC 13 / OpenSSL 3 |
| `pg_analytics` | `0.3.7` | `-` | Upstream archived; removed from the packaged extension catalog |
| `pg_base58` | `0.0.1` | `0.0.1` | pgrx 0.19.1 |
| `pg_bestmatch` | `0.0.2` | `0.0.2` | pgrx 0.19.1 |
| `pg_cardano` | `1.2.0` | `1.2.0` | pgrx 0.19.1; PG15–18 |
| `pg_cjk_parser` | `-` | `0.1.0` |  |
| `pg_clickhouse` | `0.3.2` | `0.10.0` |  |
| `pg_column_tetris` | `-` | `0.1.0` | Pure SQL |
| `pg_command_fw` | `0.1.0` | `0.1.0` | pgrx 0.19.1; PG15–18 |
| `pg_csv` | RPM: `1.0.1` | RPM: `1.0.2` | Adds RPM; package 1.0.2, SQL version 1.0.1 |
| `pg_dbms_errlog` | `2.2` | `2.4` |  |
| `pg_dbms_job` | `2.0` | `2.0` | Adds DEB package |
| `pg_dbms_lock` | `2.0` | `2.0` | Adds DEB package |
| `pg_dbms_metadata` | `1.0.0` | `1.0.0` | Adds DEB plus EL8 aarch64 / PG15 RPM |
| `pg_describe` | `-` | `1.0.0` | PG17–18 |
| `pg_disorder` | `-` | `0.1.0` |  |
| `pg_durable` | `0.2.2` | `0.2.3` | pgrx 0.19.1 |
| `pg_enigma` | `0.5.0` | `0.5.0` | pgrx 0.19.1 |
| `pg_eviltransform` | `0.0.2` | `0.0.4` | pgrx 0.19.1 |
| `pg_extension_base` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_extension_updater` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_fact_loader` | `2.0.1` | `2.0.1` | U26 DEB |
| `pg_failover_slots` | `1.2.1` | `1.2.1` | Requires preload; license metadata changed to PostgreSQL |
| `pg_fts` | `-` | `0.2.0` | PG17–18 |
| `pg_geohash` | `1.0` | `1.0` | Fixes SQL filename and target PostgreSQL ABI; license metadata changed to MIT |
| `pg_get_functiondef` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `pg_graphql` | `1.6.1` | `1.6.1` | pgrx 0.19.1 |
| `pg_idkit` | `0.4.0` | `0.4.0` | pgrx 0.19.1 |
| `pg_ivm` | `1.14` | `1.15` |  |
| `pg_jieba` | `-` | `1.1.0` | Package 2.0.1, SQL version 1.1.0 |
| `pg_jsonschema` | `0.3.4` | `0.3.4` | pgrx 0.19.1 |
| `pg_kazsearch` | `2.2.0` | `2.3.0` | pgrx 0.19.1; PG16–18 |
| `pg_kpart` | `-` | `1.0` |  |
| `pg_lake` | `-` | `3.4` | PG16–18; RPM only on EL9/10 |
| `pg_lake_copy` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_lake_engine` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_lake_iceberg` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_lake_table` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_later` | `0.4.0` | `0.4.0` | pgrx 0.19.1 |
| `pg_local_cache` | `-` | `1.3.0` | Requires preload; single-primary only |
| `pg_map` | `-` | `3.4` | pg_lake 3.4 subextension; PG16–18; RPM only on EL9/10 |
| `pg_mentat` | `-` | `1.5.7` |  |
| `pg_mooncake` | `0.2.0` | `0.2.0` | pgrx 0.19.1 |
| `pg_net` | `0.20.3` | EL8/9, U22: `0.9.2`<br>Others: `0.20.5` | EL8/9 and Ubuntu 22.04 remain on 0.9.2; other targets use 0.20.5 |
| `pg_oidc_validator` | `-` | `1.1.0` | PG18 only; adds discovery_url_override; RPM only on EL10 |
| `pg_parquet` | `0.5.1` | `0.5.1` | pgrx 0.19.1 |
| `pg_partman` | RPM: `5.4.0`<br>DEB: `5.4.2` | `5.5.0` | DEB package is postgresql-PGVERSION-partman |
| `pg_pinyin` | `0.0.4` | `0.0.5` | pgrx 0.19.1 |
| `pg_policy` | `-` | `0.1.0` | Pure SQL |
| `pg_polyline` | `0.0.1` | `0.0.1` | pgrx 0.19.1 |
| `pg_rational` | `0.0.2` | `0.0.3` | RPM built by Pigsty; DEB from PGDG |
| `pg_readme` | `0.7.0` | RPM: `0.7.0`<br>DEB: `0.7.1` | RPM remains PGDG 0.7.0; DEB 0.7.1 includes test subextensions |
| `pg_relation_sql` | `-` | `0.2.2` | Standalone SQL toolkit without CREATE EXTENSION; excluded from the 575 count |
| `pg_render` | `0.1.3` | `0.1.3` | pgrx 0.19.1 |
| `pg_rewrite` | `2.0.0` | `2.2` | RPM/DEB package name standardized as `postgresql-PGVERSION-pg-rewrite` |
| `pg_roast` | `-` | `1.0` |  |
| `pg_rrf` | `0.0.3` | `0.0.3` | pgrx 0.19.1 |
| `pg_search` | `0.24.0` | `0.25.2` | PG15–18; pgrx 0.19.1; requires preload; adds pgvector/OpenBLAS dependencies |
| `pg_session_jwt` | `0.5.0` | `0.5.0` | pgrx 0.19.1 |
| `pg_smtp_client` | `0.2.1` | `0.2.1` | pgrx 0.19.1 |
| `pg_squeeze` | `1.9.2` | `1.9.4` |  |
| `pg_statement_rollback` | `1.5` | `1.6` |  |
| `pg_statviz` | `-` | RPM: `0.9`<br>DEB: `1.1` | Not in default groups; RPM 0.9 and DEB 1.1 have different coverage |
| `pg_strict` | `1.0.5` | `1.0.5` | pgrx 0.19.1 |
| `pg_strom` | `6.1` | `6.1` | EL10 x86_64 / PG14 only; extension SQL version 3.5 |
| `pg_summarize` | `0.0.1` | `0.0.1` | pgrx 0.19.1 rebuild; removed from default groups because upstream provides no license |
| `pg_tde` | `2.1` | `2.2` | Percona; PG17–18 |
| `pg_tiktoken` | `0.0.1` | `0.0.1` | pgrx 0.19.1 |
| `pg_tiktoken_c` | `-` | `1.1` |  |
| `pg_tokenizer` | `0.1.1` | `0.1.1` | pgrx 0.19.1 |
| `pg_trickle` | `0.81.0` | `0.81.0` | pgrx 0.19.1; PG18 |
| `pg_turbovec` | `-` | `1.29.0` | pgrx 0.19.1 |
| `pg_uuid_v8` | `1.0.0` | `1.1.0` | Includes the 1.0-to-1.1 upgrade script |
| `pg_vault_tde` | `-` | `1.7.0` | PG17–18; requires preload; RPM only on EL9/10 |
| `pg_wait_sampling` | RPM: `1.1.11` | RPM: `1.1.11` | Adds RPM; package 1.1.11, SQL version 1.1 |
| `pg_when` | `0.1.9` | `0.1.10` | Packaging moves to pgrx 0.19.1 |
| `pgactive` | DEB: `2.1.7` | DEB: `2.1.7` | DEB only; fixes PG14–18 builds |
| `pgauditlogtofile` | `1.8.4` | `1.8.5` |  |
| `pgautofailover` | `2.2` | `2.2` | Adds six EL / PG18 RPM targets |
| `pgbouncer_fdw` | `1.4.0` | `1.4.0` | Adds DEB package |
| `pgbson` | `2.0.2` | `2.1.0` | RPM package is postgresbson; DEB source package is postgresbson |
| `pgclone` | `4.3.2` | `4.4.2` |  |
| `pgcontext` | `-` | `0.2.0` | PG17–18; pgrx 0.19.1; optional pgvector compatibility bridge |
| `pgdd` | `0.6.1` | `0.6.1` | pgrx 0.19.1 |
| `pgedge` | RPM: `18.4` | RPM: `18.4` | RPM only; fixes PG15–18 ABI |
| `pgextwlist` | `1.19` | `1.20` |  |
| `pgfr_analyze` | `-` | `2.29.2` | pg_flight_recorder subextension; PG15–18 |
| `pgfr_record` | `-` | `2.29.2` | pg_flight_recorder; PG15–18 |
| `pgl_ddl_deploy` | `2.2.1` | `2.2.1` | Adds PG18 DEB and Ubuntu 26.04 / PG14–17 |
| `pglinter` | `2.0.0` | `2.0.0` | pgrx 0.19.1 |
| `pglite_fusion` | `0.0.6` | `0.0.6` | pgrx 0.19.1 |
| `pglogical_ticker` | `1.4.1` | `1.4.1` | Adds six EL RPM / PG14–17 targets |
| `pgmemcache` | `2.3.0` | `2.3.0` | Adds EL8 aarch64 / PG14–15 RPM |
| `pgmemento` | `-` | `0.7.4` | Pure SQL extension |
| `pgml` | `2.10.0` | `2.10.0` | Adds EL10, Debian 13, and Ubuntu 26.04; PG14–17 |
| `pgmnemo` | `0.12.1` | `0.16.1` | PG17–18; requires pgvector 0.7.0 or later |
| `pgmonitor` | `-` | `2.2.0` |  |
| `pgmp` | `-` | `1.0.6` | Requires GMP |
| `pgmq` | `1.11.1` | `1.12.0` |  |
| `pgmqtt` | `0.3.0` | `0.4.1` | pgrx 0.19.1 |
| `pgnodemx` | RPM: `1.7` | RPM: `2.0.1` | RPM only; package 2.0.1, SQL version 2.0; stronger cgroup security |
| `pgpcre` | RPM: `0.20190509` | RPM: `0.20190509` | EL8/9 RPM only |
| `pgrdf` | `0.6.4` | `0.6.20` | pgrx 0.19.1 |
| `pgsentinel` | `1.4.1` | RPM: `1.4.2`<br>DEB: `1.4.0` (U26: `1.4.1`) | RPM 1.4.2; DEB 1.4.0; Ubuntu 26.04 uses 1.4.1 |
| `pgsmcrypto` | `0.1.1` | `0.1.1` | pgrx 0.19.1 |
| `pgspider_ext` | `1.3.0` | `1.3.0` | Adds PG18; DEB supports PG15–18 |
| `pgsqlmock` | `-` | `1.0.1` |  |
| `pgwasm` | `-` | `0.1.0` |  |
| `pgx_ulid` | `0.2.3` | `0.2.3` | pgrx 0.19.1 |
| `pgzint` | DEB: `-` | DEB: `0.2.0` | Debian 13 / Ubuntu 26.04 DEB only; requires Zint 2.14 or later |
| `plisql` | `1.0` | `1.0` | IvorySQL 5.4; PG18 only |
| `pllua` | `2.0.12` | `2.0.12` | Adds six EL / PG18 and EL8 aarch64 / PG14–15 RPM targets |
| `plpgsql_check` | `2.9.2` | `2.10.4` | Preload becomes optional |
| `plproxy` | `2.11.0` | `2.12.0` |  |
| `plprql` | `18.0.1` | `18.0.1` | pgrx 0.19.1 |
| `plruby` | `-` | `2.5.0` | Includes jsonb_plruby, hstore_plruby, and ltree_plruby |
| `plx` | `-` | `1.3.1` |  |
| `polardb-17` | `17.10.1.0-1PIGSTY` | `17.10.1.0-2PGSTY` | PG17 rebuild; release suffix standardized from PIGSTY to PGSTY |
| `polarstore` | `1.2.42-1PIGSTY` | `1.2.42-2PGSTY` | Rebuild; release suffix standardized from PIGSTY to PGSTY |
| `postbis` | `-` | `1.0` | Includes PG14–18 compatibility patch |
| `powa` | `5.1.2` | RPM: `5.1.0`<br>DEB: `5.2.0` | DEB is 5.2.0; RPM remains 5.1.0 |
| `pre_prepare` | RPM: `0.9` | RPM: `0.9` | RPM only; license metadata changed to PostgreSQL |
| `provsql` | `1.10.0` | `1.12.0` |  |
| `q3c` | RPM: `2.0.2`<br>DEB: `2.0.4` | `2.0.5` | Final RPM and DEB are both PGDG 2.0.5 |
| `qdgc` | `-` | `0.1.0` | Includes qdgc_postgis subextension |
| `rdf_fdw` | `2.6.0` | `2.7.0` |  |
| `rdkit` | `202503.6` | `202503.6` | Platforms retain either 202303.3 or 202503.6; runtime versions are not unified |
| `re2` | `0.3.0` | `0.4.1` | PG16–18 |
| `smlar` | `1.0` | `1.0` | Removed from default groups because upstream provides no license |
| `snowflake` | `2.4` | `2.5.0` | pgEdge; PG15–18 |
| `spat` | `0.1.0a4` | `-` | Deprecated upstream alpha project; removed from the packaged extension catalog |
| `spock` | `5.0.6` | `5.0.10` | pgEdge; PG15–18 |
| `sqlite_fdw` | `2.5.0` | `2.5.0` | Adds PG18; EL8 uses the system SQLite |
| `sslutils` | `1.4` | `1.4` | Adds EL8 dual-architecture / PG18 RPM |
| `system_stats` | DEB: `4.0` | DEB: `4.1` | DEB only; covers 10 DEB targets |
| `tdigest` | `1.4.3` | `1.4.4` |  |
| `timescaledb` | `2.28.2` | `2.29.1` | PG16–18 |
| `timescaledb_toolkit` | `1.23.0` | `1.23.0` | pgrx 0.19.1; PG15–18 |
| `timeseries` | DEB: `0.2.1` | DEB: `0.2.1` | DEB only; fixes partman/cron recommended dependencies and docs |
| `typeid` | `0.3.0` | `0.3.0` | pgrx 0.19.1 |
| `tzf` | `0.3.0` | `0.3.0` | pgrx 0.19.1 |
| `unit` | `7.10` | `7.10` | License metadata changed to GPL-3.0-or-later |
| `uri` | RPM: `1.20251029` | RPM: `1.20251029` | RPM only; renamed pguri with Provides/Obsoletes for pg_uri |
| `vchord` | `1.1.1` | `1.1.1` | pgrx 0.19.1 |
| `vchord_bm25` | `0.3.0` | `0.3.0` | pgrx 0.19.1 |
| `vector` | `0.8.4` | `0.8.6` |  |
| `vectorize` | `0.26.2` | `0.26.2` | pgrx 0.19.1 |
| `vectorscale` | `0.9.0` | `0.9.0` | pgrx 0.19.1 |
| `wal2mongo` | `1.0.7` | `1.0.7` | Adds PG17–18 |
| `wrappers` | `0.6.1` | `0.6.2` | pgrx 0.19.1 |
| `zlog` | `1.2.18-1PIGSTY` | `1.2.18-2PGSTY` | Rebuild; release suffix standardized from PIGSTY to PGSTY |

## Observability

- The complete Grafana dashboard set is re-exported through the Pig/Grafana tooling as Dashboard API v2. Four Kafka and five MySQL dashboards are added, and links, variables, and layouts are refreshed for Node, PostgreSQL, Redis, and Infra dashboards.
- MinIO/Silo Overview and Instance dashboards move to Metrics V3. Victoria scrapes `/minio/metrics/v3` and drops high-cardinality samples with a non-empty `bucket` label.
- `pg_exporter` configuration updates to 1.4.0 and fixes the duplicate time series produced by the 1.4.1 `pg_subrel` query.
- PG19 gains `pg_sub_19`, `pg_recovery_state`, `pg_wal_19`, `pg_lock_stat`, and `pg_vacuum_score` collectors. PG10+ gains a `pg_xact_age` transaction-age histogram, replication-slot `idle_timeout`, and WAL Receiver `connecting` state encoding.
- Kafka JMX/protocol exporters and the MySQL exporter join unified service discovery, Victoria scraping, and alert rules. Journald records without a `PRIORITY` field are handled safely.

## Repositories, Offline Bundles, and Supply Chain

- REPO and CACHE use `sow create --pigsty` to generate DNF/APT metadata and the SHA-256 `repo_complete` marker atomically, without injecting fabricated ModuleMD.
- `module_hotfixes` becomes an explicit per-repository choice and is enabled only for EL repositories that must replace system module streams, avoiding indiscriminate DNF module-filter bypasses.
- If `dist/<version>/pigsty-<version>.tgz` already exists, `cache.yml` includes it in the offline repository. It does not implicitly package the current worktree or download source code from the internet.
- RPM exporter package names change from underscores to hyphens, for example `node_exporter` → `node-exporter`; unversioned `Provides/Obsoletes` entries bridge the old names.
- Local Infra repackaging standardizes the `PGSTY` vendor, SPDX license expressions, `1PGSTY` release suffix, `/etc/default/<service>` environment files, vendor units under `/usr/lib/systemd/system`, and legal files under `/usr/share/doc/<package>`.
- Simple binary packages use reproducible upstream archives pinned by SHA-256; vendor-native RPM/DEB files retain their original bytes and metadata. Direct artifacts such as Silo, Grafana, Code, Code Server, and Vector gain pinned URLs and checksums.
- China-region routing is refreshed systematically: operating systems, Docker, Grafana, Percona, MongoDB APT, and uv/PyPI prefer Tencent Cloud; EL/Docker retain Huawei Cloud and Alibaba Cloud fallbacks; MySQL/Kubernetes use USTC; ClickHouse uses Huawei Cloud.

### Infra Package Update Matrix

The table consolidates this cycle's Infra batches into one row per package, showing only the v4.4.0 value, final v4.5.0 value, and essential notes. Intermediate versions are omitted. “Built” or “verified” describes packaging records only; the signed repository index at release time remains authoritative for installable versions.

| Package | Previous | Final | Notes |
|:---|:---|:---|:---|
| `agentsview` | `0.37.5` | `0.40.1` |  |
| `claude` | `2.1.206` | `2.1.227` |  |
| `cloudflared` | `2026.7.1` | `2026.7.3` |  |
| `code` | `1.128.0` | `1.133.0` |  |
| `code-server` | `4.127.0` | `4.132.0` |  |
| `codex` | `0.144.1` | `0.147.0` |  |
| `crush` | `0.84.0` | `0.88.1` | Compliance rebuild from the official tarball that includes the license |
| `dblab` | `0.43.0` | `0.47.4` |  |
| `duckdb` | `1.5.4` | `1.5.5` |  |
| `etcd` | `3.6.13` | `3.7.1` |  |
| `ferretdb` | `2.7.0` | `2.7.0` | Build chain was temporarily renamed ferretdb2, then restored to ferretdb |
| `grafana` | `13.1.0` | `13.1.3` | Includes security fixes |
| `grafana-infinity-ds` | `3.8.0` | `3.11.3` |  |
| `grafana-victorialogs-ds` | `0.29.0` | `0.31.0` |  |
| `headscale` | `0.29.2` | `0.29.3` |  |
| `jmx-exporter` | `-` | `1.6.0` | New noarch package |
| `juicefs` | `1.4.0` | `1.4.1` |  |
| `k3s` | `-` | `1.36.3` | Upstream v1.36.3+k3s1 |
| `k3s-images` | `-` | `1.36.3` | Dual-architecture offline images matching k3s exactly |
| `logcli` | `3.6.7` | `3.7.6` | Updated with the Loki component set |
| `loki` | `3.6.7` | `3.7.6` | Updated with the Loki component set |
| `loki-canary` | `-` | `3.7.6` | New Loki companion component |
| `mcli` | `20260417000000` | `20260806000000.0.0` |  |
| `mcp-toolbox` | `1.6.0` | `1.8.0` | Former genai-toolbox package name and recipe standardized as mcp-toolbox |
| `minio` | `20260618000000` | `20260804000000` | Repository package retained; no longer a v4.5 MINIO backend |
| `mongodb-exporter` | `0.51.0` | `0.52.0` |  |
| `mtail` | `3.0.8` | `3.4.7` |  |
| `node-exporter` | `1.11.1` | `1.12.1` | RPM renamed from node_exporter to node-exporter |
| `nodejs` | `24.18.0` | `24.19.0` | Node.js 24 LTS security update |
| `npgsqlrest` | `3.20.0` | `3.21.0` |  |
| `opencode` | `1.17.18` | `1.18.16` |  |
| `pev2` | `1.22.0` | `1.23.0` |  |
| `pg-exporter` | `1.3.0` | `1.4.1` | Moves to the 1.4 series with synchronized collector configuration |
| `pg-hardstorage` | `1.0.8` | `1.2.1` |  |
| `pg-timetable` | `6.3.0` | `7.0.0` | Major-version upgrade |
| `pgbackrest-exporter` | `0.23.0` | `0.24.0` |  |
| `pgschema` | `1.12.0` | `1.12.2` |  |
| `pgstream` | `1.1.1` | `1.3.1` |  |
| `PGSTY package release` | `mixed` | `1PGSTY` | Standardized release suffix for self-built RPM/DEB packages |
| `pig` | `1.5.1` | `1.8.0` | Extension catalog refresh |
| `postgrest` | `14.14` | `16.1` | Major-version upgrade; minimum PostgreSQL is 14 |
| `prometheus` | `3.13.1` | `3.13.2` | Security and stability fixes |
| `promscale` | `0.17.0` | `0.17.0` | Upstream archived; final version retained |
| `promtail` | `3.6.7` | `3.6.7` | Frozen at 3.6.7; Loki 3.7 no longer publishes Promtail updates |
| `rainfrog` | `0.3.19` | `0.4.3` |  |
| `rclone` | `1.74.4` | `1.75.0` |  |
| `redis-exporter` | `1.86.0` | `1.89.0` | RPM renamed from redis_exporter to redis-exporter |
| `rustfs` | `1.0.0-b8` | `1.0.0-rc.1` | Prerelease package retained in the repository; not a v4.5 MINIO backend |
| `sabiql` | `1.14.0` | `1.15.1` |  |
| `sealos` | `5.1.1` | `5.0.1` | Pinned to the last Apache-2.0 stable release |
| `seaweedfs` | `4.39` | `4.41` |  |
| `silo` | `minio 20260804000000` | `20260806000000.0.0` | Replaces the MinIO server as the only v4.5 object-storage backend |
| `sow` | `0.2.0` | `0.3.0` | Core REPO/CACHE dependency |
| `stalwart` | `0.16.12` | `0.16.17` |  |
| `timescaledb-tools` | `0.19.0-1` | `0.19.0-2` | Includes timescaledb-parallel-copy 0.13.0 |
| `uv` | `0.11.28` | `0.12.3` |  |
| `v2ray` | `5.51.2` | `5.52.0` |  |
| `vector` | `0.56.0` | `0.57.0` |  |
| `victoria-logs` | `1.51.0` | `1.52.0` |  |
| `victoria-metrics` | `1.147.0` | `1.149.0` |  |
| `victoria-metrics-cluster` | `1.147.0` | `1.149.0` |  |
| `victoria-traces` | `0.9.4` | `0.10.0` |  |
| `vip-manager` | `4.2.0` | `5.0.0` | Major-version upgrade; disabled by default after install; configuration is not backward compatible |
| `vlagent` | `1.51.0` | `1.52.0` |  |
| `vlogscli` | `1.51.0` | `1.52.0` |  |
| `vmutils` | `1.147.0` | `1.149.0` |  |
| `xray` | `26.3.27` | `26.3.27` | Candidate 26.7.28 update withdrawn; stable release remains 26.3.27 |

## Platforms, Templates, and Release Engineering

- Recommended platform baselines update to Rocky Linux 9.8/10.2, Debian 12.15/13.6, and Ubuntu 22.04.5/24.04.4/26.04.0. Terraform cloud images and pinned Vagrant box versions are refreshed with them.
- Vagrant's root disk becomes configurable through `root_disk`: 64 GiB by default and 128 GiB for the `all`, `rpm`, `deb`, `oss`, and `pro` build matrices. The existing `disk` setting still means the extra `/data` disk and defaults to 128 GiB. The vagrant user's login shell is standardized on Bash.
- Adds the eight-node `ha/octo` simulation. `ha/trio` becomes a three-node Silo deployment behind VIP/HAProxy; `demo/minio` explicitly selects Silo and narrows its local repository package groups.
- The `safe` and `demo` templates use valid extension aliases. Tuned-profile paths adapt to the operating system, cluster-size comparisons remain compatible with Ansible versions before 2.19, and unused internal flags plus MINIO/INFRA variables are removed.
- The Docker base image updates to Debian 13.6 and is marked v4.5.0. Image publishing becomes manually triggered and builds from tags.
- `docker/Makefile` fixes its data directory at repository-local `./data`; `make purge` no longer accepts an external `DATA` override and has no countdown.
- GitHub Actions updates checkout, CodeQL, Docker build/login, and Cosign in bulk. Release, bootstrap, installation, checksum, and build templates tighten parameter and file handling.
- Release archives generate top-level `pigsty.yml` from `conf/meta.yml`, include Kafka/MySQL playbooks, and remove the old Mongo playbook. The signing workflow creates Cosign signatures only for the `pigsty-<tag>.tgz` source archive, not multi-gigabyte offline bundles.
- README, SECURITY, CONTRIBUTING, AGENTS, and NOTICE align on v4.5, 575 extensions, Silo, Redis/Valkey, and Mongo mode, with updated 2026 copyright and trademark language.

## Compatibility Changes and Upgrade Notes

Before upgrading from v4.4, review these changes carefully:

1. **FERRET split:** Remove the old `ferretdb` systemd service. Deploy the DocumentDB data layer through Mongo configuration mode, then deploy the FerretDB protocol layer with `docker.yml` / `app.yml`. The old `mongo.yml`, `mongo_*` parameters, and dedicated dashboards are gone.
2. **Silo replaces the MinIO server:** `minio_type` accepts only `silo`. Protocol and disk-format compatibility do not constitute migration acceptance; validate backups, in-place compatibility, rollback, and real read/write traffic before switching existing object storage.
3. **`ha/trio` object-storage topology changes:** The new template uses three single-disk Silo members. Do not expand an existing single-node pool in place by simply adding two members; create a new cluster and migrate objects.
4. **HAProxy unit changes:** Pigsty no longer renders `/etc/default/haproxy`, though the unit can read it when present. Use `EXTRAOPTS` only, keep `-S /run/haproxy-master.sock`, and do not add `-f`.
5. **Explicit cluster identity:** Custom inventories must define `pg_cluster`, `redis_cluster`, `minio_cluster`, `kafka_cluster`, or `mysql_cluster` for target hosts. Older inventories that relied only on fixed group names must add these identities.
6. **Full PGSQL playbook is initialization-only:** Do not run the complete `pgsql.yml` against initialized nodes. Use precise tags for routine maintenance; for a full rebuild, validate backups and remove the target member through the formal workflow first.
7. **Valkey is opt-in:** Valkey is installed only with `redis_type: valkey`; module parameters, configuration paths, and monitoring interfaces keep Redis names.
8. **SOW is a core dependency:** REPO/CACHE requires SOW 0.3.0. If an old offline bundle or local repository lacks `sow`, add it from the Pigsty Infra repository first.
9. **Exporter RPM renames:** External automation and private repositories should move from old names such as `node_exporter` and `redis_exporter` to `node-exporter` and `redis-exporter`.
10. **Default extension groups tighten licensing:** Environments that depend on `emailaddr`, `explain_ui`, `oidc_validator`, `pg_summarize`, or `smlar` must install them explicitly and assess licensing and redistribution boundaries independently.
11. **Docker purge semantics change:** `make purge` directly deletes repository-local `./data`; confirm that it contains no container data you need to retain.
12. **Vagrant disk semantics change:** `root_disk` controls the system disk, while `disk` controls the extra `/data` disk. Distributed Silo requires the latter to be a real independent mount.

## Get v4.5.0

Install on a fresh, supported Linux node:

```bash
curl -fsSL https://repo.pigsty.io/get | bash -s v4.5.0
cd ~/pigsty
./bootstrap
./configure
./install.yml
```

A production upgrade is not an overwrite installation. Read the compatibility changes above, resolve the exact target cluster, backup, inventory identity, and live state, then use an explicit `-l` scope for check mode or maintenance operations.
