Skip to content

This is the multi-page printable view of this section. .

Return to the regular view of this page.

Blog

Pigsty articles, engineering design notes, and the complete release archive.

Essays, tutorials, field notes, and project stories collected from VONNG.

Architecture decisions and implementation notes for Pigsty engineering.

Pigsty release records organized by complete x.y.z version numbers.

1 - Article

Pigsty essays, tutorials, field notes, and project stories collected from VONNG.

This column collects every article in VONNG’s dedicated Pigsty section, plus articles in other columns whose front matter explicitly carries the Pigsty tag. Original page resources and available English translations are preserved.

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

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v4.5 is officially out. At the end of the previous release, I said there might be a transitional v4.5 before 5.0. Here it is—except this “transitional” release ended up more packed than many full-fledged major releases.

Here is the short version of what is new in v4.5:

  • 575 PostgreSQL extensions: up from 531, with new additions including pg_lake, pg_jieba, and plruby.
  • Silo object storage: the MINIO module has switched engines and now runs Silo, Pigsty’s own maintained MinIO fork.
  • Valkey: the REDIS module adds Valkey as an engine. One parameter switches it over while preserving the inventory, monitoring, and dashboards.
  • Kafka module: a new pilot module with native KRaft orchestration for multiple clusters, dynamic membership, SCRAM/TLS, and four monitoring dashboards.
  • MySQL module: yes, MySQL. You read that right. It supports MySQL 8.4 LTS as either a standalone instance or a three-node InnoDB Cluster, also as a pilot module.
  • And a long tail of smaller but useful changes: explicit cluster identities, safer removal workflows, pg_exporter 1.4, the SOW repository tool, 51 configuration templates, and more.

Let’s go through them in order.


575 Extensions

Every release gets a new extension count. This time it is 575—46 additions and two removals since v4.4’s 531, for a net gain of 44. The full catalog is still available in the extension list. Here are a few of the more notable arrivals:

  • The complete pg_lake suite: the lakehouse stack that Snowflake open-sourced after acquiring Crunchy Data. It uses DuckDB as a vectorized execution engine and brings Iceberg and Parquet directly into PostgreSQL. This is the most important new development in the PostgreSQL data-lake ecosystem this year, and Pigsty packaged it immediately for PostgreSQL 16–18. On the RPM side, it is currently available only for EL 9/10.
  • pg_jieba and pg_cjk_parser: Chinese and CJK tokenizers. Anyone building Chinese full-text search knows what this means—people who used to compile pg_jieba themselves can finally stop.
  • plruby: the Ruby procedural language, packaged together with its three type-conversion subextensions for hstore, jsonb, and ltree. Another piece of the procedural-language puzzle is in place. I am also curious who will actually write stored procedures in Ruby.
  • pgmemento: auditing and data-change tracking implemented entirely in SQL, giving tables a complete timeline.
  • online_advisor: recommends indexes online based on queries that actually run.
  • pg_turbovec, pgcontext, and pg_tiktoken_c: more depth for vector search and RAG, joined by pgmnemo 0.16 for agent memory. The AI toolkit keeps getting thicker.
  • There are also more specialized additions such as pgwasm for WebAssembly, postbis for bioinformatics sequences, qdgc for geographic grids with a PostGIS subextension, and pg_vault_tde for transparent encryption backed by Vault.

Beyond the additions, this cycle rebuilt almost every Rust extension against pgrx 0.19.1. Many package version numbers look unchanged, but the entire build matrix was rerun behind the scenes. An unchanged version number does not mean no work happened.

Two extensions were removed: pg_analytics, which upstream has archived, and spat, a discontinued alpha project. Five others—emailaddr, explain_ui, oidc_validator, pg_summarize, and smlar—were removed from the default installation groups because upstream provides no license. The packages remain available, but you must install them explicitly and assess the licensing and redistribution boundaries yourself. A distribution can package software for you; it cannot assume your compliance obligations.

Routine upgrades continued as well: Citus 14.2, TimescaleDB 2.29.1, pgvector 0.8.6, pg_search 0.25.2, DocumentDB 0.114, pg_partman 5.5, pgmq 1.12, and more. The complete package change log runs for more than 200 lines; see the release note rather than making me reproduce it here.


Silo: A New Engine for Object Storage

Long-time readers know the MinIO story. Upstream reduced its admin console to little more than a login page, the community edition was effectively abandoned, and I forked it to keep it alive and patch CVEs. I wrote about that in MinIO Is Dead and Two Months into Maintaining a MinIO Fork. That fork eventually got its own name: Silo. Put a grain silo beside the Pigsty, add the pig package manager and the sow repository tool, and the whole family is together.

v4.5 takes that transition to its conclusion: the MINIO module now deploys Silo, and only Silo. The only valid value for minio_type is currently silo. Compatibility should not be a concern: the S3 and Admin APIs, /minio/* routes, MINIO_* environment variables, and on-disk data format all remain unchanged. Only the package, binary, and systemd service names have changed. For existing users, this is closer to swapping in an engine with a new badge while leaving the chassis and controls untouched.

Protocol compatibility does not validate the migration for you, of course. Before switching production object storage, you still need backups, a rollback plan, and real read/write verification.

The Silo transition comes with several related improvements:

  • Startup now verifies three signals: the systemd Invocation ID, ActiveState, and Silo cluster health. It waits up to roughly 600 seconds and no longer mistakes the state of an old process for a successful start of the current one.
  • Object-storage nodes are grouped by minio_cluster identity. One inventory can declare multiple clusters, each with its own minio_alias and minio_endpoint.
  • The ha/trio high-availability template replaces its single-node object store with a three-node, single-drive Silo cluster using EC:1, exposed on port 9002 through a VIP and HAProxy.
  • Distributed Silo requires /data/minio to be a separate filesystem. A normal directory on the root filesystem is rejected outright—this guardrail is there to prevent the all-too-common mistake of putting production object storage on the root volume.

What about RustFS? We did implement a RustFS backend during this development cycle, then pulled it before release. It is not quite ready; we will revisit it once it reaches a genuinely stable GA release. The repository still contains the RustFS 1.0.0-rc.1 package if you want to experiment, but it is not a backend supported by the v4.5 MINIO module.


Valkey: An Alternative to Redis

I have written plenty about the Redis licensing drama, including Redis Going Non-Open-Source Is a Disgrace to “Open Source” and Public Clouds. Redis 8 later returned under the AGPL, but the community fork Valkey has developed into an ecosystem of its own, backed by the Linux Foundation and packaged by every major distribution. Users kept asking whether Pigsty could run Valkey.

Now it can: set redis_type: valkey. That is all it takes.

We deliberately designed this as a transparent switch. Pigsty installs valkey-server and valkey-cli, while configuration paths, data directories, service names, monitoring jobs, and module parameters all stay under the redis namespace. Existing inventories, dashboards, and alert rules require no changes. The engine choice applies per cluster, so do not mix engines within one cluster. Before converting an existing Redis cluster to Valkey, rehearse in a test environment and verify data and replication compatibility for yourself. For an idea of how deep the official-package rabbit hole goes, see A Packaging Patch Has Been Corrupting Valkey’s Memory Accounting Since 2017.

The Redis/Valkey systemd units now use Type=notify, and the startup timeout has been extended to 1,800 seconds so systemd no longer kills large instances while they load data. Topology construction, password handling, and removal safeguards were hardened as well.


Kafka: From Package to Module

Why should a PostgreSQL distribution manage Kafka? Because in real data architectures, a Kafka cluster is very often sitting next to PostgreSQL. Change data capture, message queues, and event streams all need to run somewhere. Pigsty already shipped Kafka packages—and kafka_fdw—but deployment was manual. v4.5 adds a complete KAFKA module.

The module is based on Kafka 4.3, runs pure KRaft with no ZooKeeper, and provides orchestration built from scratch in the Pigsty style:

  • kafka_cluster and kafka_seq define cluster identity. Nodes can take combined, broker, or controller roles, and one inventory can contain multiple Kafka clusters.
  • Dynamic KRaft quorum management covers controller onboarding, broker admission, member retirement, and three-stage replacement of failed members, all as standardized playbook workflows.
  • Security includes SCRAM-SHA-512 and TLS. Credentials and certificates can be rotated, followed automatically by partition health checks.
  • Monitoring is comprehensive: JMX Exporter plus Kafka Exporter, alert rules, and four Grafana dashboards for Overview, Instance, Topic, and Consumer views.
  • Dangerous operations follow strict rules. kafka-rm.yml requires an explicit scope through -l, then validates data directories and surviving nodes before stopping services. An incomplete --limit is rejected outright, eliminating the chance of touching only half the quorum by mistake.

To try it, use the ready-made conf/demo/kafka.yml template.

Kafka is currently a pilot module. Keep one architectural constraint in mind: the Kafka protocol requires clients to connect directly to every broker, so its data plane cannot sit behind HAProxy, a VIP, or a Layer 4 load balancer. That is not a Pigsty limitation; it is simply how Kafka works.


MySQL: Bet You Didn’t See That Coming

What happened to Postgres Is Eating the Database World? Why turn around and ship a MySQL module in Pigsty?

Easy. Even world domination has an order of operations. The installed base of MySQL is enormous. Many users put new systems on PostgreSQL while still having to maintain legacy MySQL applications. Others have committed to migrating, but still need someone to operate dozens of MySQL clusters until that migration finishes. Instead of making them build a separate monitoring, backup, and high-availability stack for legacy systems, Pigsty can manage them on the same foundation. Monitoring, alerting, backup, recovery, and cluster orchestration are generic infrastructure anyway.

Bring them into the fold first; digest them later. Perfectly reasonable.

The new pilot MYSQL module in v4.5 looks like this:

  • It targets MySQL 8.4 LTS, using packages from the official community repository together with Percona XtraBackup.
  • It supports either a standalone instance or a three-node InnoDB Cluster using Group Replication, with MySQL Shell and MySQL Router. Cluster membership must be exactly one or three nodes; nothing else is accepted.
  • Users and databases are provisioned declaratively through mysql_users and mysql_databases. Scheduled full backups use XtraBackup, and TLS is enabled by default.
  • mysql_parameters exposes tunables, but settings reserved for replication, TLS, and the platform are protected. Prefixes such as loose_ and skip_ cannot bypass those protections.
  • Five dashboards cover Overview, Cluster, Instance, Replication, and Alert views. mysqld_exporter plugs into the unified service-discovery and alerting system.
  • The mysql-rm.yml removal playbook is the most conservative of all the modules: if a target host has no MySQL identity, it fails immediately rather than “helpfully” cleaning anything up.

The demo template is conf/demo/mysql.yml. If what you really want is for PostgreSQL to speak the MySQL protocol, Pigsty also offers OpenHalo. As for whether PostgreSQL or MySQL is better, I will leave that for another essay: PostgreSQL vs. MySQL in 2026.


The Rest of the List

Those are the headline changes. Here are the smaller ones still worth knowing about.

The FERRET Module Is Split Up

The standalone FERRET module and its mongo.yml playbook have been removed. MongoDB compatibility is now divided into two layers: PostgreSQL with the DocumentDB extension provides the data layer, configured through the conf/mongo.yml template, while FerretDB runs as a Docker application and provides the protocol layer. The old ferretdb systemd service, dedicated monitoring, and dashboards are no longer included. This makes the division of responsibility clearer: data belongs to the database, and protocol translation belongs to the container.

Safer Orchestration

This release invests heavily in making sure playbooks do not cause collateral damage:

  • Initialization and removal playbooks for PGSQL, REDIS, MINIO, KAFKA, and MYSQL now select members by explicit cluster identity—parameters such as pg_cluster—instead of relying only on inventory group names. A playbook run against the wrong group skips unrelated hosts rather than “helpfully” installing something on them.
  • PITR and removal now delete only the etcd subtree bounded by /<cluster-name>/. Previously, if one cluster name was a prefix of another—pg-test and pg-test2, for example—cleanup could delete the neighboring cluster’s metadata. It cannot anymore.
  • The initial pgBackRest backup writes its marker file only after the backup command actually succeeds. No more markers claiming that a backup exists when it does not.
  • Removal workflows across all modules now stop services before deleting data. Kafka, MySQL, and object storage also perform additional checks on data directories, quorums, and surviving members.
  • The full pgsql.yml playbook is now explicitly marked for first-time initialization only. It restarts Patroni/PostgreSQL and reapplies configuration and initialization SQL; it is not a day-to-day convergence tool. Do not rerun the whole playbook against a production cluster.
  • DBSU SSH keys are exchanged among the actual cluster members, correctly covering cross-group topologies such as Citus. Pigsty-rendered systemd units now live consistently under /etc/systemd/system, and permissions are tighter for sensitive configuration and privileged files.

None of these changes is a new feature. Every one of them corresponds to a real class of production incident.

Observability

  • The entire Grafana dashboard set was re-exported through the pig toolchain in Dashboard API v2 format. Four Kafka dashboards and five MySQL dashboards were added, while the Node, PGSQL, Redis, and Infra dashboards were refreshed.
  • pg_exporter moves to the 1.4 series. It includes new PostgreSQL 19 collectors for subscriptions, recovery status, WAL, lock waits, and vacuum pressure. PostgreSQL 10 and later also gain a pg_xact_age transaction-age histogram, making the remaining distance to transaction ID wraparound directly visible.
  • The MinIO/Silo dashboard now uses the Metrics V3 endpoint and drops high-cardinality samples labeled by bucket, substantially reducing time-series load for users with large numbers of buckets.

Repositories and Supply Chain

  • Local software repositories are now generated by SOW, the repository-management tool previewed at the end of v4.4—named, naturally, after a mother pig. sow create --pigsty atomically generates DNF/APT metadata and a SHA-256 completion marker, and the old injected fake ModuleMD metadata is gone entirely.
  • Offline package bundles can now include versioned source packages. Pigsty-built packages consistently use SHA-256-pinned inputs, SPDX license expressions, and the 1PGSTY release suffix.
  • Exporter RPM names now use hyphens instead of underscores (node_exporternode-exporter), with a smooth transition from the old names through Provides/Obsoletes.
  • Mirror routing for China has been completely refreshed: Tencent Cloud is preferred, with Huawei Cloud, Alibaba Cloud, and USTC as platform-specific fallbacks.

Kernels and Platforms

  • The default PostgreSQL version is now 18.6. Four standard Patroni templates add an output_plugin_libraries allowlist for logical decoding plugins—pgoutput, test_decoding, and wal2json—and Patroni automatically filters out the parameter on older PostgreSQL versions.
  • The PostgreSQL 19 beta template now supports backups through pgBackRest 2.59. In v4.4, pgBackRest could not yet recognize the PostgreSQL 19 control file; PostgreSQL 19 test environments can now take proper backups.
  • Percona PostgreSQL 18 TDE enables cluster mode. IvorySQL fixes default-database initialization and enables compatible WAL compression.
  • OS baselines move to Rocky Linux 9.8/10.2, Debian 12.15/13.6, and Ubuntu 22.04.5/24.04.4/26.04. The Docker base image moves to Debian 13.6.
  • There are now 51 configuration templates, including the new demo/kafka, demo/mysql, and the eight-node ha/octo simulation environment. ha/trio now uses a three-node Silo topology.
  • The Vagrant root-disk size is configurable through root_disk, which defaults to 64 GB. disk continues to represent the additional /data data disk. VM login shells are now consistently Bash.

Component Versions

Component v4.4.0 v4.5.0 Notes
pig 1.5.1 1.8.0 Extension catalog refreshed
sow 0.2.0 0.3.0 Core dependency for local repos
silo - 20260806 Replaces the MinIO server
pg_exporter 1.3.0 1.4.1 PostgreSQL 19 metrics support
etcd 3.6.13 3.7.1
grafana 13.1.0 13.1.3 Includes security fixes
victoria-metrics 1.147.0 1.149.0 Entire Victoria suite updated
loki 3.6.7 3.7.6 promtail remains frozen at 3.6.7
postgrest 14.14 16.1 Major-version upgrade
pg-timetable 6.3.0 7.0.0 Major-version upgrade
vip-manager 4.2.0 5.0.0 Configuration is not backward-compatible
jmx-exporter - 1.6.0 Added for Kafka monitoring
k3s - 1.36.3 Added with matching offline images
duckdb 1.5.4 1.5.5

For the complete Infra and extension package change logs, see the release note.


Upgrade Notes

Before upgrading from v4.4, work through this list. Every item can bite:

  1. minio_type accepts only silo: the protocol and disk format are compatible, but the package, binary, and service names have changed. Do not switch production object storage without tested backups and rollback procedures.
  2. The ha/trio object-storage topology has changed: the new template uses three single-drive Silo nodes. You cannot expand an existing single-node pool in place simply by adding two machines; build a new cluster and migrate the data.
  3. FERRET is split up: the mongo.yml playbook, mongo_* parameters, and dedicated dashboards are gone. Redeploy using the Mongo configuration template plus the Docker application.
  4. Cluster identities are required: custom inventories must define pg_cluster, redis_cluster, minio_cluster, kafka_cluster, or mysql_cluster as appropriate on every target host.
  5. pgsql.yml is only for initial provisioning: use precise tags for routine maintenance on initialized clusters; do not rerun the entire playbook.
  6. Valkey is opt-in: without redis_type: valkey, Pigsty still deploys Redis. Engine changes apply per cluster; rehearse before switching.
  7. SOW is now a hard dependency of REPO/CACHE: if an older offline bundle or local repository lacks sow 0.3.0, install it from the Pigsty Infra repository first.
  8. Exporter RPMs have been renamed: external automation and private repositories should migrate from names such as node_exporter and redis_exporter to the new hyphenated package names.
  9. Five unlicensed extensions left the default installation groups: environments that depend on emailaddr, explain_ui, oidc_validator, pg_summarize, or smlar must install them explicitly.
  10. HAProxy unit semantics have changed: Pigsty no longer renders /etc/default/haproxy. If you override EXTRAOPTS, preserve the master-socket option and do not put -f in it.
  11. make purge deletes ./data immediately: cleanup under the Docker directory no longer has a countdown and no longer accepts an external DATA variable. Check the target yourself before running it.
  12. Kafka and MySQL are pilot modules: Kafka clients must be able to reach every broker directly; MySQL clusters must contain exactly one or three members.

Get v4.5

On a fresh, supported Linux node:

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

Users in mainland China can replace repo.pigsty.io with repo.pigsty.cc. A production upgrade is not a matter of installing over the existing deployment: read the upgrade notes above, verify inventory identities, backups, and the actual runtime state, then roll out changes with an explicit -l scope.


Closing Thoughts

The theme of v4.4 was “from integration to distribution.” The theme of v4.5 might be “expanding boundaries.” Inside the PostgreSQL ecosystem, the extension catalog has grown to 575. Looking outward, object storage, caching, message queues, and even MySQL now share the same orchestration, monitoring, and delivery system.

Some may ask why a PostgreSQL distribution should cover so much. My view is that users never really want “a database”; they want an entire data infrastructure stack that can run their business. PostgreSQL sits at its core, but everything around that core—caches, object storage, message queues, and legacy databases—still needs to be managed to the same standards. Pigsty is a pigsty, after all, and it was never home to just one pig.

The next stop is 5.0. PostgreSQL 19 is due for release in September, and Pigsty 5.0 will arrive with full PostgreSQL 19 support. The groundwork is already in this release: PostgreSQL 19 metrics in pg_exporter, parameter placeholders in the Patroni templates, and backup support in pgBackRest. SOW, built in preparation for the enterprise edition’s conservative package repository, is now a formal dependency as well. See you in September.

GitHub Release | Release Note

1.2 - SOW: Postpartum Care for 100,000 Packages

Originally published on VONNG.

Today, let’s talk about Postpartum Care for Sows—a Chinese meme for the sort of absurdly specialized practical topic nobody expects to discuss. This time, the sow in question is my new open-source project, SOW.

When you maintain a PostgreSQL distribution, compiling the software is rarely the most painful part. The real pain is dealing with everything the build produces.

Pigsty maintains hundreds of components across multiple Linux distributions, CPU architectures, and major PostgreSQL versions. Multiply those combinations out, and the repository ends up with more than 100,000 artifacts: RPMs, DEBs, indexes, signatures, checksums, snapshots, and piles of metadata that exist only to keep package managers happy.

Users see apt install or dnf install. Maintainers see something else entirely. You update one package and must guarantee that the other 99,999 objects were not accidentally deleted. You change one index and must ensure that users around the world never catch the repository halfway through the cutover, with half the old state and half the new. At small scale, these look like scripting problems. At 100,000 artifacts, they abruptly become database, distributed systems, and software supply-chain problems.

That is why I built SOW, a self-contained APT/YUM repository manager written in Go.

SOW project homepage

If all you need is to turn a directory of RPMs and DEBs into a usable repository, one command is enough:

sow create /www/pigsty

For a repository you intend to maintain over time, SOW also provides Managed mode. It projects one package payload into multiple distribution views, records desired and built state, creates immutable snapshots, computes exact changesets, and publishes incremental updates to a filesystem or object store.

In one sentence: SOW puts the small job of “generating repository indexes” and the much larger job of “governing a long-lived software repository” into one self-contained binary.

I built this tool entirely to solve my own problems. But if you also maintain a large software repository spanning multiple Linux distributions, it should help you too—though admittedly, there probably aren’t many of us.


Why SOW?

The name deserves an explanation. We previously built a companion project, Pig—PostgreSQL Install Genius, the package manager for the PostgreSQL ecosystem. If a little Pig installs the packages, then the tool that produces, stores, organizes, and distributes those artifacts naturally has to be its mother: SOW.

A USB hub shaped like a sow

It also expands neatly to Software Object Warehouse, a name that fits naturally into the software supply chain. Better yet, the pig metaphor has roots in industrial history. In traditional pig-iron casting, molten iron flowed down a central channel and branched into rows of smaller molds. The cooled ingots were called pigs, while the main runner that fed them was the sow. Seen from above, one large channel feeding rows of ingots looked like a sow nursing her piglets.

The historical origin of the sow and pig terminology in pig-iron casting

Why Build Another Repository Tool?

The immediate trigger was Pigsty’s offline installation. Pigsty first downloads the required RPMs and DEBs, then turns them into a local offline repository. Historically, RPM systems relied on createrepo_c, while Debian and Ubuntu relied on dpkg-dev. The output is only a few XML files, Packages indexes, and compressed metadata, yet preparing the toolchain pulls in hundreds of megabytes of dependencies.

That is cumbersome enough on Linux and even uglier on macOS. You have to start different Linux containers, mount the same directory into each one, run the RPM and DEB tools separately, then copy the results back. Bringing in hundreds of megabytes of tooling and a fleet of containers to generate a few megabytes of metadata is hardly elegant.

Pigsty replacing the RPM and DEB repository toolchains with SOW

In Pigsty 4.5, I removed that clutter. SOW is a self-contained binary only a few megabytes in size. It runs directly on Linux and macOS, understands both RPM and DEB package formats, and implements the APT and DNF repository specifications. It has no daemon and requires no separate language runtime.

But installing fewer tools was only the surface problem. Four deeper problems convinced me to keep building SOW as the repository grew.

The same noarch RPM may appear in repositories for several architectures, and the same package may belong to beta, latest, and stable views. On a local disk, hard links let many paths share one inode. Upload them to Cloudflare R2, Alibaba Cloud OSS, or another object store, and every object key incurs real storage and upload costs. Identical content does not make the cloud treat those keys as one object.

Second, 100,000 Files Make Even a Comparison Expensive

A repository update may change only a few dozen packages, yet traditional synchronization tools often have to walk, compare, and verify more than 100,000 files to prove it. A full comparison can easily take more than ten minutes. The actual transfer may take seconds; almost all the time goes into proving that nothing changed.

Traditional repository synchronization spends most of its time walking and comparing files

Third, a Live Repository Must Never Expose a Half-Built State

An RPM repository is more than a directory of .rpm files. Clients read repomd.xml first, then follow it to primary, filelists, and the package payloads. APT has the same constraint: Release, InRelease, Packages, and by-hash files form a strict graph of references.

If you publish them in the wrong order, a client may see a new pointer before the object it references exists. To the maintainer, that is only a few seconds during an upload. To a user who happens to arrive during that window, it is an irreproducible 404, checksum failure, or aborted installation.

SOW’s self-contained binary and incremental publishing model

Fourth, Directories Have No Versions, but Distributions Need Them

The deeper problem surfaced when I wanted to add repository channels. How do you maintain beta, latest, and stable at the same time? Keep a monthly snapshot? Answer “which packages were added last Wednesday?” Roll back safely? Determine which old objects are no longer referenced by any snapshot and may be deleted?

You can script each requirement in isolation. Put them together, however, and those scripts metastasize into a shadow database with no transactions, schema, or audit trail. There are already tools such as createrepo_c, dpkg-scanpackages, reprepro, and aptly, along with general-purpose synchronization and object-storage tools. But I could not find a lightweight open-source tool that brought RPM and DEB support, a single package pool, immutable snapshots, atomic publishing, and incremental delivery into one clear model.

Fortunately, building your own tools has never been cheaper.


Two Levels of Complexity, Two Modes

SOW does not assume that every repository needs the same degree of governance. It splits the problem into Plain and Managed modes: small problems stay small, while large ones get the full state machine.

Plain: The Package Directory Is the Truth

Plain mode has one central command:

sow create /srv/repo

# Pigsty offline-repository compatibility mode
sow create /srv/repo --pigsty

The RPMs and DEBs in the directory are the sole source of truth. repodata/, Packages, and Packages.gz are projections that can be discarded and rebuilt at any time. SOW scans top-level packages concurrently. By default, it opens each package only once, computing its SHA-256, parsing it, and extracting every fact needed for rendering in the same pass before generating metadata for both repository formats.

The output first goes into a private staging area on the same filesystem. SOW validates it with its own parsers before replacing the public files. Finally, it compares the file set and stat snapshots again to confirm that no package was added, removed, or replaced during the build. It does not rehash every large package merely for extra reassurance.

Documentation for a SOW Plain repository

Plain mode does not maintain an operation log or attempt heavyweight transaction recovery. If the process is interrupted, run the same sow create command again. The package directory is intact, the indexes are derived state, and rebuilding is cheaper than recovery.

With --pigsty, SOW also writes a repo_complete completion marker at the very end. Until that marker exists, consumers know the repository is not ready. It is a tiny but extremely useful commit protocol.

This mode solves Pigsty’s original problem: replace two toolchains and several containers with one small binary, then quickly produce a repository that real APT, DNF, and YUM clients can consume.

Managed: The Repository Is a State Machine, Not a Directory

A long-lived repository cannot look only at “what is in the directory now.” It must also know what you want, what it published successfully last time, and why the two differ.

SOW’s Managed model has four layers:

The four layers of SOW’s Managed mode

A Workspace is the configuration and discovery boundary. A Repository is the ownership boundary. A Dist is a named set of RPM or DEB members. An Architecture View is only a rendered result and does not own package payloads. The most important invariant is this: within one Repository, every package has exactly one canonical payload and no duplicates.

repo/pool/...                              canonical package payload
repo/dists/el9/x86_64/repodata/...         RPM metadata view
repo/dists/trixie/main/binary-amd64/...    APT metadata view

A noarch RPM or all DEB can appear in several architecture indexes without copying its payload. Beta and stable can reference the same package object without creating a second cloud object key. APT and DNF repositories can also live under the same directory hierarchy.

SOW’s package pool with RPM and APT metadata views

The boundary of “store only one copy” must be stated precisely: it is one Repository or one publication prefix, not an entire Workspace, bucket, or the whole world. SOW does not deduplicate implicitly across Repositories, because deduplication must not destroy ownership boundaries. Deleting one repository must never remove a shared object that another repository still needs.


Desired, Built, and Generation

Managed mode divides repository state into three concepts:

State Meaning
Desired The membership set requested by configuration and add/remove operations
Built The last public view that was fully rendered, validated, and committed successfully
Generation An immutable manifest of a particular Built state

This distinction may sound academic. In practice, it exists specifically to handle failure.

Suppose you add 5,000 packages in one operation. Desired has changed, but the build is killed halfway through with SIGKILL. Without this separation, the system is left staring at a directory tree with no idea how far the update got. With it, SOW can state the truth: the intent has changed, the previous Built Generation remains intact and continues to serve users, and the new operation is awaiting recovery.

A Generation does not copy the entire repository. It stores an immutable manifest, metadata, and a set of package-payload references; many snapshots can reference the same Pool objects. The exact difference between two Generations is a Changeset: which payloads to add, which metadata to replace, which pointers to switch, and which old objects may be deleted after their retention period.

sow status  -r pigsty
sow changes -r pigsty
sow log     -r pigsty

Incremental synchronization therefore no longer begins with “scan 100,000 files again.” It begins with “compare two known Generations.”

SOW’s capability matrix for Plain and Managed modes

The Secret to Atomic Cutovers: Move the Pointer Last

A software repository has no global transaction spanning multiple files or objects. SOW does not pretend otherwise. Instead, it turns publication order into a protocol whose safety can be reasoned about:

payload  →  metadata  →  pointer  →  delete
 objects      indexes      entry points   retired objects

First, place immutable package payloads. Next, write checksum-addressed metadata and by-hash indexes. Only after everything is in place does SOW switch the client entry points: repomd.xml, Release, and InRelease. Old objects may be deleted only after the old pointers no longer reference them and both retention and evidence gates have passed.

As a result, whenever a client follows an active pointer, the content it references already exists. Within one protocol view, readers see either the complete old Generation or the complete new one, never a torn tree.

On a local POSIX filesystem, this protocol relies on same-filesystem staging, fsync, atomic rename, stable-path locks, and a durable operation log. Before any Managed write command begins its own work, it checks for any unfinished prior operation and recovers it. Recovery decides whether to roll back or roll forward solely from evidence already persisted on disk. If the evidence conflicts, SOW stops and fails closed rather than offering a repair --force command that might guess wrong.

Object stores do not support atomic commits across several keys. SOW therefore persists a commit intent first, advances the protocol pointers in deterministic order, and records an Applied Checkpoint for each target. A filesystem target and an R2 target each have their own evidence; success on the former is never mistaken for success on the latter. If R2 lacks sufficient proof for a safe conditional delete, garbage collection reports candidates but does not risk deleting remote objects.

This is the essential difference between SOW and a single rclone sync command. Moving files is easy. The hard parts are knowing what to transfer, when the operation counts as committed, which direction recovery should take after failure, and what is truly safe to delete.


At 100,000 Objects, Performance Needs Proof

Most of the work in SOW 0.3 was not adding more features. It was making an already sound model work at real repository scale.

The Plain path now reads, hashes, and parses each package in a single pass, using bounded concurrency through --jobs. Identical input produces byte-for-byte identical metadata. When nothing needs updating, SOW returns no-op and does not replace a public inode merely to bump its timestamp.

The Managed path caches parsed “package facts” in SQLite, keyed by their immutable SHA-256 digest. A new package is fully authenticated and parsed once on ingestion. Later builds load facts in batches and compute the membership projection in memory. A warm build still walks the public namespace, but for unchanged Pool files it checks only the device, inode, size, mtime, and ctime fingerprint instead of reading every payload again. If the fingerprint drifts, SOW falls back to one authoritative SHA-256 pass and repairs the cache automatically. When you need a full cryptographic audit, run sow check explicitly.

Optimizations like these matter only when they show up in the numbers.

In the project benchmark, membership expansion for a Dist with 5,000 objects fell from about 4.1 seconds to 33 milliseconds. At 50,000 objects, the old implementation still had not finished after ten minutes; the new one takes about 300 milliseconds. Payload promotion now uses bounded, single-writer group commits, capped at 512 objects or 1 GiB per batch. This both reduces fsync storms and prevents file-descriptor use and recovery state from growing without bound as the repository expands.

These numbers are not there to decorate a benchmark slide. They simply demonstrate that once a repository truly holds 100,000 artifacts, “the state model is correct” is only the passing grade. Whether routine small changes remain cheap enough determines whether the tool stays viable over time.


Tearing Down V1 and Rebuilding from a Minimal End-to-End Core

SOW took a while to build. Midway through, I tore it down almost completely and started over.

That original implementation remains archived as v0.1.0. It was ambitious: Git refs managed repository views, a SHA-256 CAS stored artifacts, and the same system handled upstream synchronization, multi-target cloud publishing, verification, repair, garbage collection, a Cloudflare Worker, CDN purges, edge validation, and production migration.

Many of those features worked, and some paths passed acceptance tests against real APT and DNF clients and a non-production R2 environment. But the flaw was equally clear: the repository model, cloud provider, CDN, edge runtime, and migration workflow were too tightly coupled. Proving one feature correct required half of the rest of the system; every small change dragged a long acceptance matrix behind it.

In the end, I shelved it.

I did not abandon the goal, only the route to it. The worst fate for an infrastructure tool is to have a little of everything without any layer that can be explained and verified on its own. So the second version rebuilt the smallest self-contained slices first:

  • P0 / Plain Create: one directory in, one working repository out;
  • P1 / Managed Control Plane: Workspace, Repository, Dist, Membership, Build, Generation, Check, Changes, and Operation Log;
  • More complex synchronization, remote publishing, CDN, and provider control planes went back into separate acceptance queues, one capability at a time.

v0.2.0 established today’s Plain + Managed foundation: a single package pool, metadata views, deterministic builds, locks, logs, crash recovery, Generations, and publication to filesystems and R2.

v0.3.0 introduced no new conceptual layer. Instead, it removed the old V1 runtime, tightened the cloud-transfer boundary, and fixed repeated reads, per-object queries, payload commits, and observability at large scale in both Plain and Managed modes. The current release binary depends only on the new V2 core. The old implementation remains in Git history and the v0.1.0 / v0.2.0 tags as a record of what we learned, not as a second source of truth.

This path looks slower than building everything for one grand reveal, but it is faster. Every layer has an independent contract, explicit failure semantics, and acceptance tests against real clients. The next layer rests on solid ground, not on an increasingly unreadable wish list.

SOW command index

Where SOW Goes Next

SOW 0.3 can create repositories, manage membership and snapshots, calculate changesets, and publish to filesystems and R2. It is still some distance from the complete software-artifact control plane I have in mind.

The roadmap has four main tracks:

  1. Upstream repository synchronization. Consume upstream APT/YUM indexes directly, verify signatures and digests, fetch only missing artifacts, and bring mirror results into the same Package Object, Membership, and Generation model.
  2. More complete incremental delivery. Today, changes and target checkpoints already make changesets explicit and reusable, so SOW can publish only the delta. Next comes support for more object stores and synchronization providers, with large remote inventories, resumable transfers, conditional writes, and safe-deletion evidence forming a reliable end-to-end system.
  3. CDN and cache control. A CDN purge is not merely “call an API.” It must be bound to an exact Generation, cache TTL, receipt, and failure-recovery protocol. V1 proved this path can work, but it will return as an independent, testable module rather than being welded back onto the repository core.
  4. Version and retention policies. Dist, Generation, retain, and target can already express beta, latest, stable, and monthly snapshots. Higher-level policy orchestration will eventually make common release cadences possible without hand-wiring them through external scripts.

Most of these capabilities existed in some form in the first version. I will not port the old code wholesale. As with 0.2 and 0.3, I will bring back one sharply bounded, independently testable capability at a time.

No more disappearing to build the grand design in one shot. Ship small, complete systems continuously.


The Pig Family Keeps Growing

SOW is part of Pigsty’s increasingly elaborate porcine universe. The naming scheme keeps getting more ridiculous—and more complete:

  • Pigsty: the sty, responsible for installing and managing the PostgreSQL ecosystem;
  • SOW: the mother pig, responsible for organizing, building, and publishing software repositories;
  • Boar: the male pig, a graphical control plane for Pigsty now under development;
  • Silo: the grain bin, responsible for S3-compatible object storage;
  • Oink: the sound pigs make, powering the documentation and website framework;
  • Snort: the pig rooting around, collecting logs and monitoring metrics.

The names are jokes first, of course. But behind them, a complete chain is taking shape: SOW organizes the artifacts; Silo stores them; Pigsty installs them into running systems; Snort watches those systems; and Oink explains everything. SOW fills the part of that chain that was easiest to overlook.

A software repository looks like a directory that Nginx can serve. But once it carries 100,000 objects across multiple operating systems and architectures for countless users, it is really a headless database. It has objects, relationships, versions, transactions, logs, garbage collection, and commit pointers that absolutely must be correct.

SOW makes those hidden rules explicit. It replaces the hopeful assumption that “the legacy scripts are probably fine” with an engineering contract backed by checks, recovery, and auditability. If all you want is an offline repository, start with one command:

sow create /srv/repo

If you also maintain a long-lived software distribution, visit the SOW project site or go straight to the documentation to see what lies beneath.

SOW is licensed under the Apache-2.0 license. The current v0.3.0 provides amd64 and arm64 archives for Linux and macOS, plus RPM and DEB packages for Linux. Get it from the download page, or browse the source code.

A hundred thousand packages aren’t frightening. Treating them as nothing more than a hundred thousand files is.

1.3 - Pigsty v4.4: From Integration to Distribution

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v4.4 is officially out. On the surface, this is a routine maintenance release: PostgreSQL 18.4, 531 extensions, a PostgreSQL 19 beta, and 14 validated offline installation artifacts. The changes really worth discussing, however, are concentrated in the software repository and command-line tooling.

Pig 1.5 completes a redesign of the command line for day-to-day PostgreSQL operations. Cloning a database, forking an instance, performing point-in-time recovery—actions once scattered across Ansible, shell scripts, Patroni, and pgBackRest—now share one consistent CLI.

At the same time, we reorganized the PostgreSQL kernel forks in the repository: adding Babelfish PG 18, filling out pgEdge PG 15–18, AgensGraph PG 17, and OrioleDB PG 16–18, and providing our own packages for PolarDB and IvorySQL.

This release also updates the self-hosted Supabase template to the latest upstream versions and resolves a batch of compatibility issues. It adds one-click deployment templates for Immich, a self-hosted photo library; JumpServer, a bastion host; and Maybe, a personal finance manager.


Pig 1.5: One Interface for Operations

pig began as a PostgreSQL extension package manager, then gradually took on Pigsty installation, software repository, and PostgreSQL management duties. By version 1.5, it is no longer merely a tool that “can run lots of commands.” It is becoming a coherent interface for operating PostgreSQL.

Command Boundary Typical Uses
pig pg Local PostgreSQL primitives Start/stop, status, connect, maintenance, database cloning, local PGDATA forks
pig pt Patroni cluster operations Restart, rebuild replicas, switchover, failover, configuration, and logs
pig pb Low-level pgBackRest primitives Backups, repositories, backup sets, cleanup, and low-level restore
pig pitr Recovery orchestration Coordinate Patroni, PostgreSQL, and pgBackRest to perform PITR

The most important change in this round is not the number of commands, but the separation of responsibilities. In the past, these operations depended largely on DBAs remembering SOPs and command aliases: which tool to call, what to do next, and what side effects to expect. That operational knowledge is now encoded directly in the commands, with high-risk operations consistently proceeding through the same chain:

state → plan → precheck → execute → verify → result → next_actions

Results and help at every stage can be emitted as human-readable text or as JSON/YAML for machines and agents. Through this Agent-Native interface, DBAs, scripts, and agents can all use the same entry point and receive the context, risk assessment, and suggested next steps they need.

Enough abstraction. Let’s look at a few concrete examples.


Clone: Branch a Single Database

The new pig pg clone command can clone a single database quickly.

pig pg clone meta meta_dev --plan   # Preview the plan
pig pg clone meta meta_dev -y       # Create the database copy

There is an often-overlooked boundary here: CREATE DATABASE ... TEMPLATE terminates existing sessions on the source database. In other words, database cloning is fast, but it is not impact-free. The point of --plan is to lay out those side effects before you take action.

These cheap branches are extremely useful for development and testing, data analysis, model experiments, and counterfactual reasoning by agents. Production stays untouched while experiments run against the copy. If you break it, delete it and create another branch. For details, see Instantly Clone a PostgreSQL Database—No Black Magic Required.


Fork: Sandbox an Entire Instance

Database cloning creates a copy of one database. pig pg fork works at the level of an entire PostgreSQL instance: a physical, PGDATA-level fork.

pig pg fork init dev --start        # Fork to /pg/data-dev and start it
pig pg fork list                    # List local forked instances
pig pg fork stop dev                # Stop a forked instance

Pig writes metadata for managed forks and provides list, start, stop, and rm lifecycle commands. On CoW-capable XFS, a new fork initially consumes virtually no additional space; only newly written or modified blocks use capacity afterward. Pig also assigns a free port automatically, allowing the forked instance to run alongside the original.

This is especially useful in two situations: preserving a low-cost local branch before a large-scale operation that is difficult to roll back, and starting an out-of-band instance during incident recovery to verify a PITR target and inspect data quickly.


Go Back in Time: Recovery Starts with a Plan

The most dangerous part of database recovery has never been the absence of one command. It is the number of steps, the blurry boundaries, and the ease of making mistakes under incident pressure.

Pig 1.5 draws a clear line between low-level recovery and high-level orchestration:

  • pig pb restore is the low-level pgBackRest recovery primitive, responsible only for files and the recovery target.
  • pig pitr is the recovery orchestrator for Pigsty/Patroni environments, coordinating Patroni, PostgreSQL, and pgBackRest.
pig pitr -t "2026-07-10 12:00:00+08" --plan
pig pitr -t "2026-07-10 12:00:00+08" -y

Recovery commands must now specify an explicit target: the latest state, a backup consistency point, a timestamp, an LSN, a transaction ID, or a named restore point. Omitting the target can no longer be interpreted as some dangerous default. Structured output no longer counts as confirmation either; automation that performs destructive operations must explicitly pass -y/--yes.

For managed data directories, pig pitr checks the environment, stops Patroni and PostgreSQL, runs the pgBackRest restore, starts PostgreSQL according to policy, verifies the recovered state, and finally reports follow-up actions. A human operator or higher-level automation then validates the data, returns the instance to Patroni control, and switches traffic.

The point is not “one-click recovery.” It is to codify the SOP most likely to go wrong during an incident: review the plan, execute it, then verify the result.


PostgreSQL 18.4, 19 Beta, and 531 Extensions

The operational interface is the through line of this release, but the distribution’s foundation has not stood still.

Pigsty v4.4 makes PostgreSQL 18.4 the production default and adds a minimal PostgreSQL 19 beta template for evaluation. PG 19 beta1 is not production-ready, and pgBackRest 2.58 as shipped with v4.4 cannot recognize its control-file format, so this template is strictly for experimentation and evaluation.

Pigsty’s PostgreSQL extension catalog grows from 510 in v4.3 to 531. By category, pg_ducklake brings DuckDB, Parquet, and lakehouse capabilities into PostgreSQL; pg_stat_plans and pg_stat_backtrace improve observability for query plans and process call stacks; and the upgraded pgmnemo and newly added psql_bm25s target agent memory and BM25 full-text search, respectively.

Meanwhile, OrioleDB expands to PG 16–18 and now defaults to PG 18; pgEdge covers PG 15–18; Babelfish covers PG 17–18; IvorySQL enters the 5.x line; AgensGraph moves to PG 17; and Cloudberry and PolarDB both receive reorganized paths and packages.

These details may look miscellaneous, but this is the work of a distribution: keeping the PostgreSQL mainline, extension ecosystem, and kernel forks simultaneously usable, installable, and upgradeable.


Application Updates: Immich, JumpServer, Maybe, and Supabase

This release adds templates for Immich, JumpServer, and Maybe, and updates Supabase.

Immich: Put Your Photo Library on Real PostgreSQL

Immich is an open-source, self-hosted photo and video management service—think Google Photos or iCloud Photos in your own home. It provides automatic mobile backup, albums, maps, face recognition, and semantic search. Its backend uses PostgreSQL, vector search, caching, and machine-learning services. Smart search and face recognition require VectorChord’s vchord extension, which Pigsty provides directly.

Immich still stores original photos in a filesystem directory and does not support object storage directly. If you want to separate the storage pool, JuiceFS can mount MinIO or S3 as a local filesystem.

JumpServer: Bring the Bastion Host into the Stack

Bastion hosts are a hard requirement for many enterprises, and JumpServer is one of the common open-source choices. JumpServer 4.x stores its core metadata in PostgreSQL, so Pigsty now provides a matching deployment template.

Maybe also joins the application catalog in this release. It is a personal finance and asset management tool. The three templates serve different purposes, but they share the same principle: applications can run in containers without letting their data drift along with the containers.

Supabase: Updating Means More Than Swapping Images

Supabase moves quickly. It also has the most components—and the most opportunities for compatibility problems—of any Pigsty application template. v4.4 brings Studio, Auth, PostgREST, Realtime, Storage, Analytics, Edge Runtime, and the rest of the stack up to their July 2026 upstream versions, along with a coordinated round of adjustments.

Analytics now lives in a dedicated _supabase database and _analytics schema, keeping log-analysis tables separate from application objects. We added a pg_stat_statements compatibility view for Studio so its query-performance page works correctly. We also adapted the stack for the new Publishable Key and Secret Key, and adjusted Kong routes, sensitive Realtime endpoints, S3-compatible APIs, and service health checks.

With an application like Supabase, getting one container to start means nothing. The job is done only when more than a dozen components can be upgraded together and still work together. v4.4 fixes exactly these unglamorous issues that determine whether the template is actually usable.


No More Manually Entering the VIP Interface

Another change I particularly like is automatic VIP interface detection.

Previously, vip_interface and pg_vip_interface defaulted to eth0. Enabling a NODE/PG VIP required users to configure the interface name manually, which was tedious.

v4.4 adds automatic detection and changes the defaults to auto: Pigsty takes each node IP from the inventory, resolves the actual network interface that owns it, and passes that result to Keepalived or VIP Manager. Explicit configuration is still supported, but most users no longer need to log in, run ip addr, and come back to fill in a parameter. This feature is only a few lines of configuration, yet it directly prevents an entire class of deployment failures. The experience of a distribution is often defined by small details like this.


Backups Now Default to Zstandard

pgBackRest previously used LZ4 compression by default. LZ4 is fast and offers high throughput, and it remains a good fit for wal_compression. Backup repositories, however, care more about compression ratio, so v4.4 changes pgBackRest’s default algorithm to Zstandard. In testing, a small increase in decompression overhead improved the compression ratio from 2.x to 3.x and saved roughly another third of the backup space. That is an excellent trade.

The switch also exposed a problem: the official IvorySQL kernel was not built with options such as --with-lz4 and --with-zstd, so it could use neither LZ4 nor Zstandard. That led directly to the next change: standardizing how PostgreSQL kernel forks are built.


Standardizing PostgreSQL Kernel Fork Builds

Pigsty supports many flavors of the PostgreSQL kernel. PolarDB and IvorySQL previously used packages built upstream. IvorySQL’s official build omitted several important compile-time options, while PolarDB had no Ubuntu 26.04 packages. I reported both issues upstream. Ubuntu 26.04 build support has now been merged in PolarDB #650, and IvorySQL #1377 confirms that the missing options will be added in the next release. The upstream binary packages, however, will take another release cycle.

I was not going to wait that long. Since I already build so many kernel forks myself, two more will not hurt—and this is a good opportunity to standardize the FHS layout once and for all. Take PolarDB: the upstream package is named polardb-for-postgresql and installs to /u01/polardb_pg_17; Pigsty’s package is named polardb-17 and installs to /usr/polar-17. The default port, runtime search paths, development headers, and extension build tooling are standardized along with it.

To make PolarDB builds reproducible, we also split its PFSD development library into a separate polarstore package. The open-source edition also removes the PolarDB Oracle-compatibility kernel and its dedicated monitoring configuration; this closed-source compatibility path is no longer listed as built-in support.

This work also prepares for the next step. Pigsty’s 500-plus extensions currently target mainly vanilla PostgreSQL. Next, I want to extend the build matrix—“5 vanilla PG major versions × 16 Linux platforms, including online-only EL8 on both architectures”—to more than a dozen PostgreSQL kernel forks, giving them access to the complete PostgreSQL extension ecosystem instead of leaving each one to bundle a handful of extensions piecemeal in RPMs or Docker images. That is what a Meta Distribution should look like.


Closing Notes and What’s Next

Most of the work involved in building a distribution does not make for a pretty demo: rename packages, straighten out directories, add dependencies, fix build scripts, then run all 14 deployment tests. But if nobody does that work, “out of the box” is just advertising copy.

Bring upstream diversity under one set of engineering conventions, and leave the last-mile headaches to the distribution. That is Pigsty v4.4.

With Pigsty 4.4 complete, we have already begun preparing version 5.0. There may be a transitional 4.5 release before 5.0.

Version 5.0 will ship alongside full support for PG 19 this September. PG 19 introduces many powerful features, and Pigsty 5.0 will make targeted adjustments to take full advantage of them. Some of the groundwork is already done. For example, this release updates pg_exporter to 1.3.0, adding support for new PG 19 monitoring metrics; Patroni parameter templates have also reserved the necessary positions and placeholder values for PG 19 changes.

Pigsty 5.0 will have a dedicated enterprise software artifact repository with a different policy from the open-source edition: more conservative updates, retention of every historical package version, debug packages and hotfix packages, plus regular snapshots. To make that possible, we built a repository management tool that unifies repository operations across APT and DNF. We call it sow—a female pig—a natural counterpart to Pig, the package manager and resident piglet.

We are also trying a few interesting things. One is rewriting Patroni in Go; for the first phase, at least, we have rewritten Patroni’s client tool to provide a better management experience. We call this project Boar—as in a male pig. Together with sow and Pig, it completes the family, right at home in Pigsty.

GitHub Release | Release Note


v4.4.0 Release Notes

Pigsty v4.4.0 is a maintenance release focused on PostgreSQL 18.4, preview support for PostgreSQL 19 beta, 531 extensions, kernel variant updates, and broader platform coverage.

Released on 2026-07-10. See the GitHub release and the complete changes since v4.3.0.

Highlights

  • PostgreSQL 18.4 / 19 beta: PostgreSQL 18.4 is now the production default, with a minimal PostgreSQL 19 beta template available for evaluation.
  • 531 extensions and kernel updates: The extension catalog adds 21 extensions, with major PostgreSQL kernel variants updated across the supported platform matrix.
  • Pig 1.5.1 and safer operations: New clone, fork, and PITR workflows, plus automatic VIP interface discovery, pgBackRest Zstandard compression, and dedicated Patroni log collection.
  • Security, applications, and tooling: Hardened handling of sensitive configuration and repository security automation, new application templates, a redesigned infrastructure portal, and optional Codex support.
  • Platform validation: All 14 offline deployment tests across seven operating-system baselines on x86_64 and aarch64 passed.
  • Offline artifacts: The Community Edition publishes six dual-architecture offline bundles on GitHub for Debian 13, EL 10, and Ubuntu 24.04; prebuilt bundles for the other validated baselines are available through the Professional Edition.

Compatibility Changes

  • Newly generated pgBackRest configurations now use compress-type=zst; preserve any intentional local customizations before rendering them again. #744
  • Patroni logs now use /pg/log/patroni and job=patroni; custom log queries and alerting rules that use the old syslog selector must be updated accordingly.
  • VIP interface defaults have changed to auto, dnsmasq records have moved to /etc/dnsmasq.d/pigsty, and Pigsty now manages /etc/default/haproxy; nonstandard network environments should preserve explicit overrides.
  • The default etcd backend quota has been reduced from 16 GiB to 8 GiB; check current backend usage before applying the new configuration.
  • pig automation scripts must pass -y/--yes when running destructive commands; both pig pb restore and pig pitr require exactly one explicit recovery target. See the pig v1.5 release notes.
  • Supabase Analytics now uses the _supabase database and _analytics schema; create these objects before switching an existing deployment to the new stack.

Security and Operations

  • The pg-pitr wrapper adds safer recovery-target selection, timeline and dry-run support, and stronger checks for unsafe recovery targets.
  • Ansible output no longer exposes sensitive application configuration, generated .env files are set to mode 0600, and Grafana no longer prints the administrator password.
  • The dbsu sudo policy adds controlled log-viewing permissions; the repository also adds a security policy, CodeQL, Dependabot, pinned GitHub Actions dependencies, and release-signing automation.

Applications and Tooling

  • Added Immich, Maybe, and JumpServer templates, and updated Supabase, Dify, InsForge, Registry, Jupyter, Kong, Odoo, Teable, Mattermost, and related startup scripts.
  • Redesigned the bilingual Chinese/English infrastructure portal; the experimental VIBE module can install Codex CLI on demand, while Claude Code remains its default managed coding agent.
  • Removed the legacy FerretDB Compose template; the FERRET module remains available.

Bug Fixes

  • Fixed EL10 PostgreSQL/libpq package-provider conflicts, EPEL path handling, and PGDG minor-version repository rules. #752
  • bootstrap now reuses an existing /www directory, and Redis Sentinel HA password rendering has been fixed. #753 #748
  • Corrected RPM package names and package groups for pg_http, pg_gzip, apache-age, and odbc_fdw. #750
  • Prevented services from starting unexpectedly during package installation on Debian and Ubuntu, and improved EL9 aarch64 Patroni package handling.
  • Fixed VirtualBox private-network routing and default-interface selection.
  • Fixed shell compatibility and Vector log-lifecycle issues, along with PG 19 io_workers, Teable HBA, and several application runtime defaults.

PostgreSQL and Extension Package Changes

This release adds 21 extensions, refreshes the PostgreSQL 18.4 package set, introduces a PostgreSQL 19 beta template, and updates the major kernel variants. The versions below follow the final repository metadata; versions included in offline bundles were also cross-checked against the v4.4.0 artifacts. PostgreSQL major-version ranges indicate coverage in the extension catalog and software repositories.

PostgreSQL RPM Changes · PostgreSQL DEB Changes · Infrastructure Package Changes

Package Old Version New Version Notes
polardb-17 17.9.1.0 17.10.1.0 PG 17; new RPM package
agensgraph-17 2.16.0 2.17.0 PG 17.10
openhalodb-14 1.0-beta 1.0-2 OpenHaloDB
babelfish-17 5.4.0 5.4.0 PG 17.7; rebuilt
babelfish-18 - 6.0.0 PG 18.3
pgedge 17.9 / 18.3 15.18 / 16.14 / 17.10 / 18.4 Added PG 15/16; updated PG 17/18; Spock 5.0.10
ivorysql-18 5.0 5.4 PG 18; new RPM package
cloudberry 2.1.0-1 2.1.0-2 / 2.1.0-3 DEB/RPM rebuild; RPM path is /usr/cloudberry
cloudberry-backup 2.1.0-1 2.1.0-2 / 2.1.0-3 Backup subpackage
cloudberry-pxf 2.1.0-1 2.1.0-2 / 2.1.0-3 PXF subpackage
pg_ducklake - 1.0.0 PG 14-18
psql_bm25s - 0.4.13 BM25 search; PG 17-18
mongo_fdw 5.5.3 5.5.3 New DEB package; PGDG RPM already available; PG 14-18
multicorn 3.2 3.2 New DEB package; PGDG RPM already available; PG 14-18
pg_orca - 1.0.0 PG 18 only
pg_sorted_heap - 0.14.0 PG 16-18
pg_stl - 1.0.0 PG 16-18
fsm_core - 1.1.0 PG 15-18
pg_projection - 1.0.0 PG 14-18
graph - 0.1.7 PG 14-18
jsonschema - 0.1.9 PG 14-18
pg_durable - 0.2.2 PG 14-18
pg_stat_log - 0.1 PG 18 only
pg_stat_plans - 2.1.0 PG 16-18
pg_task 1.0.0 2.1.29 PG 14-18; fixes pcre2grep dependency
pg_stat_backtrace - 1.0.0 PG 14-18; depends on libunwind
pg_mockable - 1.1.0 PG 14-18
db2fce - 0.0.17 PG 14-18
pg_uuid_v8 - 1.0.0 PG 14-18
pg_extra_time 2.0.0 2.1.0 PG 14-18
pg_pinyin 0.0.2 0.0.4 PG 14-18
passwordpolicy - 2.0.5 PG 14-18
pgdisablelogerror - 1.0 PG 14-18
plpgsql_wrap - 1.0 PG 14-18
timescaledb 2.26.4 2.28.2 PG 15-18
documentdb 0.110 0.113 PG 15-18
citus 14.0.0-4 14.1.0 PG 16-18
pgvector 0.8.2 0.8.4 PG 14-18
orioledb 1.7-beta15 1.8-beta16 Built for PG 16/17/18
pg_search 0.23.1 0.24.0 PG 15-18
pg_textsearch 1.1.0 1.2.0 BM25 full-text search; PG 17-18
storage_engine 1.3.4 2.4.0 Updated to PGXN 2.x; PG 15-18
pg_clickhouse 0.2.0 0.3.2 PGXN version update; ClickHouse integration
provsql 1.2.3 1.10.0 PGXN version update; PG 14-18
pgclone 4.0.0 4.3.2 PGXN version update; PG 14-18
biscuit 2.2.2 2.4.0 DEB / 2.4.1 RPM PG 16-18
pgmnemo 0.7.2 0.12.1 PG 14-18
rdf_fdw 2.5.0 2.6.0 PG 14-18; libcurl compatibility patch
roaringbitmap 1.1.0 1.2.0-2 PG 14-18; fixes llvm-lto packaging
plpgsql_check 2.9.0 2.9.2 PG 14-18
timescaledb_toolkit 1.22.0 1.23.0 PG 15-18; pgrx 0.18.1
wrappers 0.6.0 0.6.1 PG 14-18; pgrx 0.18.1
pgrdf 0.5.0 0.6.4 PG 14-17; pgrx 0.18.1
pg_graphql 1.5.12 1.6.1 PG 14-18; pgrx 0.18.1
pg_anon 3.0.13 3.1.1 PG 14-18; pgrx 0.18.1
pg_kazsearch 2.0.0 2.2.0 PG 16-18; pgrx 0.18.1
pg_session_jwt 0.4.0 0.5.0 PG 14-18; pgrx 0.18.1
pg_tzf 0.2.4 0.3.0 PG 14-18; pgrx 0.18.1
pg_vectorize 0.26.1 0.26.2 PG 14-18; pgrx 0.18.1
pglinter 1.1.2 2.0.0 PG 14-18; pgrx 0.18.1
pgmqtt 0.1.0 0.3.0 PG 14-18; pgrx 0.18.1
etcd_fdw 0.0.0 0.0.1 PG 14-18; pgrx 0.18.1
pg_http 1.7.0 1.7.1 PG 14-18; RPM renamed to pgsql_http_$v
pg_gzip 1.0.0 1.1.0 PG 14-18; RPM renamed to pgsql_gzip_$v
age 1.7.0 1.7.0 PG 17-18; RPM renamed to age_$v
pg_trickle 0.40.0 0.81.0 PG 18 only
re2 0.1.1 0.4.0 PG 16-18
pg_background 1.9.2 2.0.2 DEB / 2.0 RPM PG 14-18
firebird_fdw 1.4.1 1.4.2 PG 14-18
pg_net 0.20.2 0.20.3 DEB and EL10 RPM updated; EL8/9 RPM stays at 0.9.2
pg_dirtyread 2.7 2.8 PG 14-18
pg_stat_ch 0.3.6 0.3.6 PG 16-18; rebuilt
pggraph 0.1.5 0.1.7 PG 14-18
pgsql_tweaks 1.0.2 1.0.5 PG 14-18; PGDG RPM also contains 1.0.3
pgfincore 1.3.1 1.4.0 PG 14-18
toastinfo 1.5 1.7 PG 14-18
pg_ivm 1.14 1.15 DEB / 1.14 RPM PG 14-18
timeseries 0.2.0 0.2.1 PG 14-18

Infrastructure Package Changes

Package Old Version New Version Notes
pig 1.4.1 1.5.1
pg_exporter 1.2.2 1.3.0
pgschema 1.9.0 1.12.0
pgstream 1.0.1 1.1.1
pg-hardstorage - 1.0.8
codex 0.125.0 0.144.1
claude 2.1.123 2.1.206
opencode 1.14.30 1.17.18
agentsview 0.26.0 0.37.5
genai-toolbox 1.1.0 1.6.0 Package name is mcp-toolbox
crush 0.64.0 0.84.0
code 1.118.1 1.128.0
code-server 4.117.0 4.127.0
victoria-metrics 1.142.0 1.147.0
victoria-metrics-cluster 1.142.0 1.147.0
vmutils 1.142.0 1.147.0
victoria-logs 1.50.0 1.51.0
vlagent 1.50.0 1.51.0
vlogscli 1.50.0 1.51.0
victoria-traces 0.8.2 0.9.4
prometheus 3.11.3 3.13.1
alertmanager 0.32.1 0.33.1
pushgateway 1.11.2 1.11.3
node_exporter 1.11.1 1.11.1 Backfilled the tarball cache; corrected version metadata
redis_exporter 1.82.0 1.86.0
mongodb_exporter 0.50.0 0.51.0
grafana 13.0.1 13.1.0
grafana-victorialogs-ds 0.26.3 0.29.0
grafana-victoriametrics-ds 0.24.0 0.25.2
vector 0.55.0 0.56.0
minio 20260417000000 20260618000000
seaweedfs 4.22 4.39
rustfs 1.0.0-b1 1.0.0-b8 Prerelease line
duckdb 1.5.2 1.5.4
kafka 4.2.0 4.3.1
etcd 3.6.10 3.6.13
restic 0.18.1 0.19.1
juicefs 1.3.1 1.4.0
tigerbeetle 0.17.2 0.17.9
tigerfs 0.6.0 0.7.0
caddy 2.11.2 2.11.4
cloudflared 2026.2.0 2026.7.1
headscale 0.28.0 0.29.2
v2ray 5.48.0 5.51.2
nodejs 24.15.0 24.18.0
golang 1.26.2 1.26.5
hugo 0.161.1 0.164.0
uv 0.11.8 0.11.28
rclone 1.73.5 1.74.4
asciinema 3.2.0 3.2.1
stalwart 0.16.2 0.16.12
maddy 0.9.3 0.9.5
dblab 0.38.0 0.43.0
npgsqlrest 3.12.0 3.20.0
postgrest 14.10 14.14
sabiql 1.11.1 1.14.0
pev2 1.21.0 1.22.0
rainfrog 0.3.18 0.3.19

Validation and Checksums

All 14 offline deployment tests covering EL9/10, Debian 12/13, and Ubuntu 22/24/26 across x86_64 and aarch64 are complete, with failed=0 and unreachable=0 in every case; EL8 remains available for online installation only.

The MD5 checksums below cover all 14 validated artifacts. Six Community Edition artifacts are uploaded to GitHub, while the other eight are delivered through the Professional Edition; GitHub records SHA-256 digests for the uploaded Community Edition artifacts.

7de8b932412f1863fd9c033a7be355d7  pigsty-pkg-v4.4.0.d12.aarch64.tgz
2e5006a8d35eb1c087dc0ed11cf14d14  pigsty-pkg-v4.4.0.d12.x86_64.tgz
955308c00d3890f6e82a6a83bc624760  pigsty-pkg-v4.4.0.d13.aarch64.tgz
350f31c66de0aafff3bd91c2c9d740a0  pigsty-pkg-v4.4.0.d13.x86_64.tgz
0b4817a8edbab0bdf37ecee730fb0412  pigsty-pkg-v4.4.0.el10.aarch64.tgz
4584a61e4456749e68d86e4817cfe526  pigsty-pkg-v4.4.0.el10.x86_64.tgz
21621daf510a532829c36464d48f9198  pigsty-pkg-v4.4.0.el9.aarch64.tgz
504afd5030e2738a25e1b4c570d0e654  pigsty-pkg-v4.4.0.el9.x86_64.tgz
461c999424dee587ca33fe1a63df40d7  pigsty-pkg-v4.4.0.u22.aarch64.tgz
20ccc5ab8f9f4648b05bcd304f9fb5fc  pigsty-pkg-v4.4.0.u22.x86_64.tgz
d092c48ee55116ed5e2c99a3d909ccdd  pigsty-pkg-v4.4.0.u24.aarch64.tgz
24fa5399d8421305961fcaf91325b382  pigsty-pkg-v4.4.0.u24.x86_64.tgz
36f69b699d8b3041d35384970e157631  pigsty-pkg-v4.4.0.u26.aarch64.tgz
330047d117b20f04317dce506edd5d9a  pigsty-pkg-v4.4.0.u26.x86_64.tgz
3077203c0c656ec99abc32b227f6566b  pigsty-v4.4.0.tgz

1.4 - Instantly Clone PostgreSQL Databases—No Black Magic Required

Originally published on VONNG.

Six months ago, on January 8, 2026, I wrote Git for Data: Instant PostgreSQL Database and Instance Cloning, introducing a new feature in PostgreSQL 18 and Pigsty v4.0: instant database cloning. With filesystem copy-on-write (CoW) and PostgreSQL 18’s new file_copy_method = clone setting, you can clone a huge database in seconds without consuming additional storage.

This is a particularly good fit for AI agents. As I wrote in What Kind of Database Do AI Agents Need?, ultra-low-cost database cloning is critical for counterfactual experiments. So when Pigsty 4.0 shipped, I added this capability to its PostgreSQL database provisioning workflow.

Today I saw an article from Aliyun announcing support for this feature in Alibaba Cloud RDS for PostgreSQL. I couldn’t help laughing: that took them long enough. The feature itself is not complicated. It requires no kernel patch—just enable one setting in PostgreSQL 18 and add a STRATEGY option when creating the database. But simple as it sounds, a robust implementation still has a few edge cases to handle.

A Few Improvements

Previously, cloning a database through Pigsty’s IaC-style workflow was still somewhat cumbersome: first define the clone with another database as its template, then run the database creation workflow.

So for the Pig v1.5 release, I turned database cloning into one simple command: pig pg clone. If you have a database named meta, just run pig pg clone meta, and it automatically creates a clone.

Running pig pg clone

You can, of course, customize its behavior with options—for example, by specifying the branch name. If you do not provide one, Pig generates names sequentially by appending an underscore and a number.

List of cloned databases

The command automatically detects whether instant cloning is both enabled and supported. At the moment, Pigsty on XFS satisfies those prerequisites. If so, Pig performs an instant clone. If not, it warns you, waits for confirmation, and performs a conventional clone instead. Use -y to skip the confirmation.

As long as the underlying filesystem supports CoW, such as XFS, cloning a database takes essentially constant time—usually a few hundred milliseconds—and consumes no additional space. New storage is allocated only for blocks actually dirtied by subsequent writes.

Agent-Native CLI

This command-line tool is built specifically for DBAs and DBA agents. You could already clone a database with an Ansible playbook or Pigsty’s /pg/bin/pg-clone shell script, but neither is as convenient as using the pig CLI directly.

For example, before executing an operation, you can use --plan to print the plan. It tells you what Pig will do and what risks are involved. You can also use -o json or -o yaml to return results in JSON or YAML.

Plan output from pig pg clone

Incidentally, both normal command output and help output are available as text, JSON, or YAML. That is especially useful to agents: they can explore the CLI and retrieve exactly the structured help they need. Every command in pig supports this.

Structured help from pig pg clone

I call this design an Agent-Native CLI, and I have written about it before.

Instance-Level Forks

Database cloning is not the only related new feature worth mentioning. In Git for Data: Instant PostgreSQL Database and Instance Cloning, I also covered instant instance-level cloning, which I call a “fork.”

Running pig pg fork

Run pig pg fork dev, and Pig creates an instance named dev from the current instance, assigning it a new random port. This is extremely useful when recovering from an accidental deletion: first create a temporary fork without consuming additional storage, then quickly run an incremental PITR on the fork to roll back and validate the result. Once you know the recovery is correct, perform it on the main instance.

PITR with pig is now very convenient as well. The example below performs an end-to-end point-in-time recovery to a specific timestamp, making PITR about as foolproof as it gets. You can still use pig pgbackrest when you want precise control over every operation.

Running pig pitr

This release of the pig CLI adds many management features, including operations for PostgreSQL, Patroni, and pgBackRest. They are now all exposed as Agent-Native CLI commands like pg clone and pg fork, making them equally convenient for human DBAs and AI agents. I will write a dedicated article about them in a few days.

Further Reading

1.5 - What Is a PostgreSQL Distribution?

Originally published on VONNG.

People often ask me: what exactly is Pigsty?

My usual answer is: a PostgreSQL distribution.

The next question is usually: what, then, is a “PostgreSQL distribution”?

That is a good question. And the best place to begin is not databases, but operating systems.


I. Start with Linux Distributions

When most people hear “distribution,” they think of Linux distributions: Red Hat, Debian, Ubuntu, SUSE, Arch, and so on. But if Linux already exists, why do we need Linux distributions? What exactly is the relationship between the two?

The answer is simple: Linus Torvalds only writes the kernel.

Compile the Linux kernel and you still do not have a usable machine. There is no shell, init system, C standard library, coreutils, package manager, networking toolkit, user space, or security-update policy. The kernel schedules hardware and exposes system calls, but an industrial-scale gulf separates that from “a usable operating system.”

Someone has to bridge that gulf, and there are countless ways to do it. glibc or musl? systemd or OpenRC? apt, dnf, or pacman? A release every six months, or rolling releases? What should the default security policy be? How are packages signed? How are vulnerabilities patched? How long are versions maintained? Which services are enabled by default? The accumulated answers to those questions are what make a distribution.

A distribution, then, does not merely deliver a kernel. It delivers an integrated set of decisions—and the credibility of an organization willing to stand behind those decisions over time.

Nobody says Debian, Red Hat, and Ubuntu are competing with Linus over who writes the better kernel. They compete at a different task: turning a shared kernel into a system that is more reliable, consistent, and easier to ship.

The kernel is a commons; the distribution is industrialized delivery. The real value and competition sit not in the kernel, but in the distribution layer. Nobody competes with Linus to write a “better kernel,” yet Red Hat, Debian, and Ubuntu have spent three decades competing over how best to integrate that kernel into a usable system.

That is the key to understanding PostgreSQL distributions.


II. Apply the Analogy to PostgreSQL—Carefully

PostgreSQL is often described as the Linux kernel of the database world. But if you map the Linux analogy directly onto PostgreSQL, it breaks almost immediately.

PostgreSQL is not the Linux kernel. Compile PostgreSQL from source, run initdb, and it works. The SQL engine, transactions, MVCC, WAL, replication protocol, psql, and client libraries are all there. The official PGDG repositories also ship prebuilt binaries that users can install and start directly.

The Linux kernel is not useful on its own, but the PostgreSQL kernel can run independently. That raises an obvious question: if PostgreSQL already works by itself, what problem is a PG distribution supposed to solve?

kernel-distro.webp

A standalone PostgreSQL instance is an excellent database kernel. A production system, however, needs more than “it starts.” If the primary fails, what takes over? Who notices when a backup is corrupt? Can you recover an accidentally deleted row to a specific point in time? How does the connection pool redirect traffic? How are certificates rotated? How are metrics collected and alerts evaluated? How are extension versions managed? How is configuration drift corrected? How do upgrades work? How is a new replica provisioned? After recovery, what closes the loop and returns the system to a healthy steady state?

Neither initdb nor yum install postgresql answers those questions.

That is where a PG distribution earns its keep. It does not turn PostgreSQL into a usable database—PostgreSQL already is one. It integrates the PostgreSQL kernel into a production-ready data service.


III. The Three Layers of a PG Distribution

A serious PG distribution has at least three jobs: selection and integration, build and distribution, and orchestration and control.

All three matter, but their marginal value is not equal. The further down the list you go, the closer you get to the real battleground.

1. Selection and Integration: Make Decisions for the User

Production PostgreSQL is not a bare postgres process. You need backups, high availability, connection pooling, monitoring, logging, alerting, object storage, extensions, an access-control model, and sensible defaults. Every category offers a long list of choices.

For backups, you might use pgBackRest, Barman, WAL-G, pg_basebackup, or a hand-rolled script built on PostgreSQL’s backup primitives. For high availability, there is Patroni, repmgr, Pacemaker, or even Pgpool-II pressed into service for primary/standby failover. Monitoring might mean Prometheus, VictoriaMetrics, Grafana, Zabbix, or any number of combinations.

pg-distro.webp

This layer tests a distribution author’s judgment, experience, and sense of responsibility. Being opinionated does not mean making arbitrary choices for users. It means having learned from enough failures to know which paths are sound—and which are better.

To be fair, differentiation at this layer is narrowing. Good tools used for long enough tend to produce community consensus: Patroni is increasingly hard to avoid for HA, pgBackRest for backups, and combinations such as Prometheus and Grafana for monitoring. Selection still matters, but “I chose the right components” is no longer much of a moat by itself.

Choosing well is not enough. You also have to deliver those choices reliably.

2. Build and Distribution: A Supply Chain Is Trust, Not a Gimmick

The second layer is build and distribution. It is often underestimated because users see a package name, not the unglamorous work behind it: multiple operating systems, architectures, versions, and extensions; dependency resolution; ABI compatibility; GPG signing; CVE response; repository availability; and version lifecycle management.

PGDG already provides a formidable piece of public infrastructure. Its YUM and APT repositories deliver prebuilt PostgreSQL binaries, more than a hundred extensions, and several critical ecosystem components. It is an excellent commons.

Precisely because that commons is so good, differentiation at the build-and-distribution layer requires something more. Pigsty’s own repository, for example, fills in a large part of the missing extension catalog—another 300 extensions—along with infrastructure packages. It ships native RPM and DEB packages across 16 Linux distributions and has been maintained continuously for almost four years.

pgext.webp

Long-term credibility in packaging, fast patching, a stable supply chain, and a sustained track record of reliable maintenance do form a barrier—and that barrier compounds over time. But this is a defensive capability. It can make users comfortable basing production systems on your repository, yet by itself it rarely explains why they must choose you.

What truly separates a distribution from an “install some packages” script is the next layer: orchestration and control.

3. Orchestration and Control: Turn Static Packages into a Living System

The hardest part of a distribution is orchestration and control. Judgment about component selection is converging, while build and distribution are largely defensive. Orchestration and control are where implementations are tested against one another in the real world. The challenge fits into one sentence: How do you turn all these static packages into a dynamically running service?

Think of a software repository as a supplier of flour, eggs, and butter. It does not bake them into a cake. Even if every package comes with a detailed recipe—that is, documentation—you are still a long way from a finished cake. And some production systems do not merely need a cake; they need an automated cake factory.

The gap between many established open-source distributions and cloud RDS offerings lies precisely in this last mile. One gives you a collection of installed packages. The other sells a ready-to-use service with automated operations and self-healing. The indispensable step between them is orchestration.

Orchestration is the act of “cooking”: turning something static, like software on a DVD, into a live, dynamic system. It must handle everything the PostgreSQL kernel leaves behind after initdb, and everything a package repository never attempts to manage: which components start in what order and what depends on what; how a failed primary is detected, a new leader elected, traffic redirected, pooler connections reestablished, and a replacement replica provisioned—the entire closed loop of failure recovery; and, most importantly, how the whole system remains at its declared desired state and automatically corrects any drift.

pgsql-infra.webp

Orchestration and control form a moat precisely because there is no commons at this layer. Nobody turns the flour and eggs into a cake for you. Every distribution has to do that work itself, and the difference in results is immediately obvious.


IV. Two Paths to Orchestration: Kubernetes-Native and Linux-Native

Once orchestration becomes the central problem, the question is: at what layer should the control plane live?

There are two mainstream answers, and they define the two principal tracks for PG distributions today. The essential distinction is where orchestration and control are implemented: one path builds on Kubernetes as a common substrate; the other returns to the Linux operating system and builds upward from there. Neither is universally better. They make different tradeoffs.

Path One: Kubernetes-Native

This path treats the database as a first-class citizen on Kubernetes and uses the Operator pattern for orchestration. You submit a declarative custom resource defined by a CRD, and the Operator’s reconciliation loop continuously drives actual cluster state toward the desired state. Provisioning, monitoring, failover, and scaling all happen at the Kubernetes layer.

This is currently the busiest and most crowded track. Its players include CloudNativePG, led by EDB, with roughly 8,900 stars and currently the leading PG Operator; the Zalando Postgres Operator, with about 5,200; Crunchy PGO, with about 4,400; KubeBlocks, with about 3,100; and a longer list including StackGres, Kubegres, Tembo, KubeDB, and the Percona Operator.

The advantages are clear: a unified control plane, a declarative API, smooth GitOps integration, and an easy interface for platform teams. For organizations that already treat Kubernetes as their operating system, putting databases on Kubernetes is a natural extension.

The cost is equally clear. You are not merely adding a PG Operator. You are adopting the entire Kubernetes control plane, storage and network abstractions, scheduling model, authorization model, failure model, and cognitive load. The real entry cost is not the Operator itself, but whether your organization has already paid the Kubernetes tuition.

cloudnative-pg.webp

Path Two: Linux-Native

This path does not put the database inside Kubernetes. It returns to the operating system: run directly on Linux, on physical or virtual machines; install RPM or DEB packages; manage services with systemd; and drive administration with Ansible or a similar infrastructure-as-code tool.

There are fewer open-source players on this track: Pigsty, with roughly 5,200 stars; Autobase, with about 4,300; pgEdge, with about 700; and EDB TPA, with about 90. Alongside them is a full roster of commercial distributions without public star counts but with substantial enterprise weight: EDB Postgres Advanced Server—EDB’s flagship and arguably the Red Hat of the PostgreSQL world—Percona Distribution, CYBERTEC PGEE, ClusterControl, and others.

The advantages are a shorter path, fewer dependencies, and closer proximity to the database itself. There is no extra abstraction layer, the failure domain is smaller, behavior is more predictable, and DBAs can understand and take over the system directly. The cost is that Kubernetes is no longer providing desired-state reconciliation, idempotent execution, failure recovery, or upgrade orchestration. You have to implement those capabilities yourself while also confronting the differences across more than a dozen major versions of mainstream Linux distributions. It is continuous, unglamorous work.

Pigsty’s Choice

Both paths are reasonable. The right one depends on where your team already stands and where it makes sense to place the complexity. Pigsty chose the Linux-native path. I have explained the reasoning at length in Should Databases Be Deployed in Kubernetes? and Is Containerizing Databases a Good Idea?. My view is that this path better fits the nature of databases. It is difficult, but correct.

And on that difficult path, Pigsty has moved to the front of the pack. Measured by GitHub stars, it is now the leading Linux-native project, with 5,200 versus roughly 4,300 for Autobase. Across the entire PostgreSQL distribution landscape, including Kubernetes-native projects, it ranks second only to EDB’s CloudNativePG.

distro-star.webp

Ask a mainstream AI model today, “How should I self-host an enterprise-grade PostgreSQL service on Linux?” and Pigsty is generally its first recommendation. For a project led by an independent developer and unaffiliated with any cloud vendor, reaching that point has not been easy.


V. One Step Further: A Meta-Distribution

The story could end there. But Pigsty does something else that pushes at the boundary of the term “PG distribution.”

The industry usually assumes that a distribution is built around one fixed kernel. Debian and Red Hat are built around Linux. Traditional PG distributions are built around the vanilla PostgreSQL kernel. A distribution and its kernel are almost inseparable.

The PostgreSQL world, however, contains some unusual variants. OrioleDB replaces the storage engine. Babelfish adds SQL Server protocol compatibility. PolarDB for PostgreSQL implements a RAC-style architecture. IvorySQL supports Oracle syntax. openHalo is MySQL-compatible, while Percona TDE adds transparent encryption. These projects modify the PG kernel. Strictly speaking, they are no longer “pure PostgreSQL,” but distinct species and subspecies within the PG-compatible family. Traditionally, every variant would need to build its own operational stack.

Pigsty takes another approach: extract the orchestration and control foundation, and make the kernel itself a replaceable layer. This is the natural consequence of taking the third layer far enough. Once the control plane is sufficiently flexible and no longer hard-wired to a specific kernel, replacing that kernel becomes a matter of swapping a build artifact and a configuration template. We build binary packages and provide configuration templates for these different PG forks, allowing users to run different kernels on the same foundation. Pigsty currently supports more than 12 kernels.

In that sense, Pigsty is no longer merely a “PostgreSQL distribution.” You can use it to derive a distribution of your own: an IvorySQL distribution, a PolarDB distribution, or a TDE distribution. By combining modules, you can even turn it into a distribution for Redis, Etcd, or MinIO; for Prometheus or VictoriaMetrics; or even for Claude Code and Codex.

kernels.webp

More precisely, it is a meta-distribution: a distribution for building distributions. A foundation that can be repeatedly tailored, reused, and redistributed is itself a transferable capability. It no longer belongs to one kernel, or to one person.

./configure                     # Use the meta.yml configuration template by default
./configure -c meta             # Explicitly use the single-node meta.yml template
./configure -c rich             # Use the full-featured template with all extensions and MinIO
./configure -c slim             # Use the minimal single-node template with only a PG HA cluster

# Use different database kernels
./configure -c pgsql            # Vanilla PostgreSQL, with 531 optional extensions (14–18)
./configure -c mssql            # Babelfish kernel, compatible with the SQL Server protocol (17)
./configure -c polar            # PolarDB PG kernel, Aurora/RAC-style (17)
./configure -c ivory            # IvorySQL kernel, compatible with Oracle syntax (18)
./configure -c mysql            # openHalo kernel, compatible with MySQL (14)
./configure -c pgtde            # Percona PostgreSQL Server with transparent encryption (18)
./configure -c oriole           # OrioleDB kernel with OLTP enhancements (16–18)
./configure -c agens            # AgensGraph graph-database kernel (16)
./configure -c pgedge           # pgEdge distributed-database kernel (18)
./configure -c ha/citus         # Distributed, highly available PostgreSQL with Citus (14–18)
./configure -c supabase         # Self-hosted Supabase configuration (15–18)

# Use multi-node high-availability templates
./configure -c ha/dual          # Use the two-node HA template
./configure -c ha/trio          # Use the three-node HA template
./configure -c ha/full          # Use the four-node HA template
./configure -c infra            # Install only monitoring infrastructure and Nginx, for observability and web hosting
./configure -c vibe             # Configure a Claude/Codex + PGFS/Code development environment

Epilogue: A Distribution Is a Supply Chain of Trust

Return to the original question: what is a PostgreSQL distribution?

At the technical level, it has three core jobs. Selection and integration make the right decisions on your behalf. Build and distribution deliver the artifacts created by those decisions. Orchestration and control turn those static packages into a living, self-healing system.

But the real soul of a distribution lies beneath those three technical layers.

Technology can be copied. Component choices can be imitated, packages can be rebuilt, and anyone willing to invest enough time can reproduce 70 or 80 percent of the orchestration. Two things cannot be copied—and determine whether a distribution can be trusted for the long term: a community that continues to use and maintain it, and the trust that grows from that work over time.

Users do not merely need an answer to “Which package should I install?” They need answers to harder questions. Whose packages do I trust? Whose defaults? Whose extension builds? Whose HA decisions and backup-recovery process? Who patches a CVE promptly? Who will still maintain this path five years from now? When configuration drifts, a failover occurs, a version is upgraded, or data must be restored—at the moments that matter most—who can bring the entire system back under control?

The answers point not to a piece of code, but to the person and community that continue to take responsibility for it. The essence of a distribution is to gather responsibilities scattered across source code, builds, signatures, repositories, extensions, configuration, orchestration, monitoring, upgrades, and disaster recovery into a supply chain of trust that can be verified, reproduced, audited, and relied upon over the long term. Trust accumulates as promises made along that chain are honored again and again. It cannot be bought or copied. Only a community can grow it over time.

featured.webp

Cloud services provide trust too, but they hide the chain inside a black box. You buy managed trust, while surrendering transparency, portability, and ultimate control. You trust the cloud vendor to choose the right components, apply patches, maintain backups, handle failures, and plan upgrades. You also trust it not to box you in on pricing, access, ecosystem control, compliance, or availability. That is still trust. Its price is that you can no longer inspect or take over the chain yourself.

Pigsty takes another path. It does not mystify complexity or outsource responsibility to an invisible control plane. It makes the chain visible, codifies it, signs it, orchestrates it, and returns as much control as possible to the user. Pigsty is therefore not a “tool for installing PostgreSQL,” nor merely a “script for building your own RDS.” It aims to deliver an open PostgreSQL supply chain of trust: from the upstream kernel to extension artifacts, from RPM and DEB repositories to HA orchestration, from monitoring and alerting to backup and recovery, and from a single PG kernel to the entire family of PG-compatible kernels. Every link can be verified, and every link can be brought under the user’s control. Behind it stands a community willing to maintain it for the long term.

What Linux distributions ultimately accumulated was never just the technical ability to integrate a kernel into a system. It was the credibility earned by names such as Debian and Red Hat through decades of simply continuing to be there. Pigsty aims to grow that same kind of trust in the PostgreSQL world—and to keep it open, auditable, and under the user’s control.

A real distribution ultimately delivers not software, but a supply chain of trust that can be audited, reproduced, migrated, and relied upon for the long term—together with a community willing to stand behind it.

No rented cloud. No vendor worship. No putting complexity—or trust—inside anyone else’s black box.

Instead, put the ability to run a first-rate production database service back in the hands of users willing to run it themselves—along with a community willing to support it for the long haul.

1.6 - Pigsty v4.3: 510 Extensions & Ubuntu 26

Originally published on VONNG.

Pigsty v4.3 is out. If v4.2 was about “twelve kernels”, v4.3 is about extension density.

This release takes the supported PostgreSQL extension count from 460 to 510, a new high-water mark for Pigsty. Ubuntu 26.04 enters the support matrix, while Ubuntu 20.04 formally retires. Core components such as Supabase, pgEdge, PolarDB, Grafana, and MinIO also get a broad refresh.

GitHub Release | Release Note


Pigsty v4.3 Goes Mainstream

On GitHub, 5,000 stars is a useful line in the sand. It is where an open-source project starts to look “mainstream” rather than merely interesting. The most practical perk is surprisingly mundane: you become eligible for free ChatGPT / Claude subscriptions.

Pigsty recently crossed that line: it now has 5,066 stars. There are 11,621 GitHub repositories with more stars than that, which puts Pigsty roughly around the top 10,000 repos, or the top 0.005% of GitHub projects. For a database distribution, that number carries more weight than it would in many trendier categories. By GitHub stars, Pigsty is now the No.3 PostgreSQL distribution overall, and the No.1 Linux-native PostgreSQL distribution.

What surprised me more was the traffic to Pigsty.io. In March, monthly unique visitors were still below 20 million. By the end of April, they had crossed 100 million. More than 99% of that traffic comes from AI systems and agents. That means Pigsty’s documentation has become part of the working corpus for mainstream AI systems, and a piece of infrastructure used by AI agents. For what is still, at its core, a personal project, that is a fairly rare place to be.

cf-pigsty-io.webp

510 Extensions

PostgreSQL’s strongest feature is extensibility. The engineering reality behind that ecosystem is less glamorous. Pigsty v4.3 adds about 50 PostgreSQL extensions and brings the total available count to 510. The new additions cover a wide range:

  • block_copy_command, external_file, logical_ddl, and pg_query_rewrite: lower-level tools around DDL and execution behavior.
  • datasketches, onesparse, rdkit, pghydro, and provsql: data science, sparse computation, cheminformatics, hydrology, and probabilistic database extensions.
  • pg_text_semver, pg_variables, pg_when, pgcalendar, and pglock: everyday development and administration tools.
  • postgresbson, pgproto, re2, pgmq, and pgmqtt: protocol, queueing, regex, and messaging components.
  • storage_engine, pg_pathcheck, pg_savior, and pg_textsearch: more advanced extensions that deserve closer attention to loading mode and risk boundaries.

Many of these extensions have already gone through the pgrx transition, from 0.16.1 to 0.17.0. Some, such as pg_search and pg_trickle, are already on the pgrx 0.18.0 line. The Rust extension ecosystem is getting more active, which is a good thing. For a distribution maintainer, it also means every build cycle has to deal with the Rust toolchain, cargo dependencies, PostgreSQL version compatibility, and platform differences.

Users see one line of SQL: CREATE EXTENSION. The maintainer sees a matrix and one or two hundred packages. The good news is that my extension maintenance workflow is now wired into an Agent-based pipeline. Whether it is adding a new extension or updating an existing one, the process is automated enough that the extension count can keep going up while the maintenance burden stays within what one person can handle.


Ubuntu 26.04 Joins the Matrix

Pigsty v4.3 adds Ubuntu 26.04 x86_64 / arm64 support, and formally deprecates Ubuntu 20.04.

Pigsty now supports 8 major OS versions across both x86_64 and arm64, for a total of 16 platform combinations:

Family Version x86_64 arm64 Notes
EL 8 Yes Yes Maintained, near EOL
EL 9 Yes Yes Maintained
EL 10 Yes Yes Maintained
Debian 12 Yes Yes Maintained
Debian 13 Yes Yes Maintained
Ubuntu 22.04 Yes Yes Maintained, near EOL
Ubuntu 24.04 Yes Yes noble, currently the most widely used
Ubuntu 26.04 New New Supported since v4.3

Ubuntu 24.04, noble, is still the most widely used baseline today. Ubuntu 26.04 will likely replace it gradually over the next few years.

We added preliminary Ubuntu 26.04 support on the day it was released, but Pigsty ships many third-party extensions, and those need time to build and verify. For Ubuntu 26.04, the regular extensions and offline bundles are now ready. Rust extensions are not provided yet, but they will be filled in later.

Ubuntu 24.04 has also been refreshed from 24.04.3 to 24.04.4, and Debian 13 from 13.3 to 13.4.

Pigsty’s Vagrant and Terraform templates have been updated accordingly. Alibaba Cloud does not yet provide Ubuntu 26.04 images, so that part will have to wait.


Kernel Updates: Supabase, pgEdge, PolarDB

Supabase self-hosting templates are updated to the latest version. Pigsty is one of the few open-source PostgreSQL distributions that provides an enterprise-grade self-hosted Supabase option. This release refreshes the Supabase template, and also adds self-hosting support for Insforge, a lighter “Supabase-like” stack.

pgEdge moves to PG 18. The core value of pgEdge is multi-master replication on PostgreSQL, built on Spock and two other extensions. Spock’s newest supported PostgreSQL major version has moved from 17 to 18, so Pigsty rebuilt the stack accordingly.

PolarDB moves to PG 17, with the package version now at 17.9.1.0. PolarDB is a shared-storage PostgreSQL kernel fork. Its previous baseline was PG 15; this release jumps it to PG 17.

OrioleDB keeps moving as well, with OriolePG 17.18 and OrioleDB beta15 / 1.7. OrioleDB is still evolving quickly. I would not rush it into production, but as a frontier project in PostgreSQL storage engines, it is worth trying.

Cloudberry is updated to 2.1.0, and Pigsty now adds cloudberry-backup and cloudberry-pxf packages. v4.2 brought Cloudberry back into the distribution matrix; v4.3 fills in the surrounding tools.


Grafana 13 and Victoria Refresh

Observability is part of Pigsty’s foundation, and this release updates a good chunk of that stack. The biggest visible change is Grafana 13. The jump from 12 to 13 brings a number of new features, including Dashboard Tabs, which opens up some interesting layout options.

Pigsty v4.3 updates Grafana to 13.0.1 and refreshes the related plugin packages:

  • grafana: 12.4.1 -> 13.0.1
  • grafana-plugins: 12.3.0 -> 13.0.0
  • grafana-infinity-ds: 3.7.4 -> 3.8.0
  • grafana-victoriametrics-ds: 0.23.1 -> 0.24.0

The Victoria stack also gets a batch update:

  • victoria-metrics: 1.138.0 -> 1.142.0
  • victoria-metrics-cluster: 1.138.0 -> 1.142.0
  • vmutils: 1.138.0 -> 1.142.0
  • victoria-logs: 1.48.0 -> 1.50.0
  • vlagent / vlogscli: 1.48.0 -> 1.50.0
  • victoria-traces: 0.8.0 -> 0.8.2

There is also a small user-reported fix: the VictoriaTraces Grafana datasource path is now corrected to /select/jaeger.


etcd CVE Fix

etcd 3.6.8 recently had a CVE. 3.6.9 fixed it, but also introduced a new problem: it added auth to the member list API, which broke Patroni, the PostgreSQL HA component, before Patroni 4.1.1. Patroni 4.1.1 fixed that compatibility issue.

The important thing for users is version pairing: Patroni <= 4.1.0 should be used with etcd <= 3.6.8, while Patroni >= 4.1.1 should be used with etcd >= 3.6.9. Old with old, new with new. Mixing the two sides causes trouble.

In v4.2.2, the EL side had already moved to etcd 3.6.10 and Patroni 4.1.1. The DEB side lagged behind because the APT repo updated more slowly, so it still used etcd 3.6.8 and Patroni 4.1.0. In v4.3, the DEB side is now updated too, so users can upgrade without worrying about that mismatch.


MinIO CVE Fix

I forked MinIO earlier, fixed several CVEs in April, and wrote about the background in Keeping MinIO Alive, Promise Kept. Read that post if you want the details. Pigsty v4.3 ships the fixed build: 20260417000000.

The fixes cover OIDC/JWT, LDAP STS login, replication headers, S3 Select, unsigned-trailer signature verification, and a few adjacent paths. For Pigsty users, the important part is not the exploit mechanics. The important part is that the object storage package has moved to a fixed version, and the offline bundles have been refreshed too.

The fork, Silo, is now used in real production deployments, including Grafana Loki. The Silo docs site sees tens of millions of requests per month, and Docker Hub downloads have passed 100k. It is probably the most widely used MinIO fork at this point. I am happy about that, but to be clear, this is not my main job. I just want Pigsty users to have a usable open-source object storage option.

Recently I also talked to RustFS team. After talking with the team, I learned that they plan to make RustFS a drop-in replacement for MinIO. If they can really pull that off, I will seriously consider replacing MinIO with RustFS in Pigsty. This release packages RustFS’s first Beta after it left Alpha. A GA release is planned around July.


Vagrant Templates Move to cloud-image

For many people, Vagrant is just a local testing tool. For Pigsty, which needs to verify multiple operating systems, architectures, and topologies, it is an important development and acceptance-test entry point.

Pigsty v4.3 moves all Vagrant templates to the cloud-image series. The reason is simple: this is the only image family that covers every Pigsty-supported OS across all four combinations of VirtualBox/Libvirt and amd64/arm64.

The change reduces uncertainty from OS image differences. Traditional Vagrant boxes vary a lot in quality. Network behavior, disk layout, cloud-init, and guest tools can all differ in subtle ways. cloud-image is the more standard, distribution-maintained path. Once everything is on that track, adaptation and debugging become much easier.

One caveat: the default network interface name is no longer eth1. If you need to test VIP-related features, remember to adjust the interface name in your config.


Small Fixes Worth Calling Out

v4.3 also includes a few smaller fixes that came from real user pain.

Relaxed PostgreSQL username validation: Pigsty now allows @.- in usernames. In real enterprise identity systems, email-style usernames and domain-tagged usernames are common. A database distribution should not block valid use cases with an overly narrow regex.

IPv6 nameserver parsing fix: The old logic only extracted IPv4 DNS servers, which missed IPv6 nameservers. That is fixed now. IPv6 support is often not the main path, but when an environment has it, it is not optional.


Other Additions

Pigsty v4.3 also adds experimental self-hosting templates for Hindsight, a memory framework based on PostgreSQL and pgvector, and Hermes Agent. They are still pilot features, so I will not spend much time on them here.


Closing Notes

Pigsty v4.3 is not a huge release in the sense of sweeping framework or interface changes. It is also not small: shipping 50 new extensions in one go is real work.

There is no single headline feature here. Instead, the release moves many things users actually care about: more extensions, newer operating systems, updated kernel forks, a fresher monitoring stack, more stable Vagrant templates, fixed CVEs in the object storage package, and a few paper-cut fixes people actually hit.

That is often where the value of a database distribution lives: the unsexy parts. You do not have to track the build status of 50 extensions yourself. You do not have to audit the Ubuntu 26.04 package matrix yourself. You do not have to maintain a MinIO CVE fork yourself. You do not have to sort out Grafana 13 plugins, Victoria component versions, or which Vagrant images to trust.

Pigsty rolls all of that into a release. You just use it. The complete v4.3.0 release notes and package change summary follow.


v4.3.0

Highlights

  • Added about 50 PostgreSQL extensions, bringing the total available extension count to 510.
  • Added Ubuntu 26.04 x86_64/arm64 support, deprecated Ubuntu 20.04 support, and refreshed minor OS variants to Debian 13.4 / Ubuntu 24.04.4.
  • Kernel updates: Supabase is updated to the latest version, pgEdge to PG 18, and PolarDB to PG 17.
  • Grafana is updated to 13.0.1, and MinIO now uses the pgsty/Silo branch with CVE fixes.
  • Vagrant templates now consistently use cloud-image series images.

Bug Fixes

  • Relaxed PostgreSQL username validation to allow @.- in usernames.
  • Fixed IPv6 nameserver parsing so DNS configuration is not limited to legacy IPv4 DNS server extraction.
  • Changed the VictoriaTraces Grafana datasource path to /select/jaeger.
  • Made Vagrant disk probing more robust and added bin/el-fix, a guest-network fix script for EL Vagrant images.

PostgreSQL and Extension Package Changes

Package Old Version New Version Notes
block_copy_command - 0.1.5 New; PG 14-18; Rust/pgrx 0.17.0
cloudberry 2.0.0 2.1.0 Kernel package group; RPM release 2 fixes initdb errno issue
cloudberry-backup - 2.1.0 New Cloudberry backup tool package
cloudberry-pxf - 2.1.0 New Cloudberry PXF package
credcheck 4.6 4.7 Upgrade; PG 14-18; PGDG
datasketches - 1.7.0 New; PG 14-18
ddl_historization 0.0.7 0.2 Upgrade
documentdb 0.109 0.110 Upgraded to upstream version; PG 15-18
external_file - 1.2 New; PG 14-18
logical_ddl - 0.1.0 New; PG 14-18
nominatim_fdw 1.1.0 1.2 Upgrade
onesparse - 1.0.0 New; PG 18 only
orioledb beta15 / 1.7 beta15 /1.7 Paired with OriolePG 17.18
oriolepg 17.16 17.18 Kernel patch set update
parray_gin - 1.5.0 Added, then upgraded; PG 14-18
pg_accumulator - 1.1.3 New; PG 14-18
pg_anon 3.0.1 3.0.13 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_background 1.8 1.9.2 DEB only
pg_bikram_sambat - 0.1.0 New; Bikram Sambat date type and AD/BS conversion functions
pg_byteamagic - 0.2.4 New; PG 14-18
pg_cardano 1.1.1 1.2.0 Upgrade; Rust/pgrx 0.17.0
pg_clickhouse 0.1.5 0.2.0 Upgrade
pg_datasentinel - 1.0 New; PG 15-18
pg_dbms_job 1.5 2.0 Upgrade; PG 14-18; PGDG
pg_dispatch - 0.1.5 New; PG 14-18
pg_failover_slots 1.2.0 1.2.1 Upgrade
pg_fsql - 1.1.0 New; PG 14-18
pg_incremental 1.4.1 1.5.0 Upgrade
pg_isok - 1.4.1 New; PG 14-18
pg_ivm 1.13 1.14 Upgrade; PG 14-18
pg_kazsearch - 2.0.0 New; PG 16-18; Rust/pgrx 0.17.0
pg_liquid - 0.1.7 New; PG 14-18
pg_pathcheck - 0.9.1 New; PG 17-18; requires shared_preload_libraries
pg_query_rewrite - 0.0.5 New; PG 14-18
pg_regresql - 2.0.0 New; PG 14-18
pg_rrf - 0.0.3 New; PG 14-17; Rust/pgrx 0.16.1 -> 0.17.0
pg_savior 0.0.1 0.1.0 Upgrade; high-risk DDL/DML guard hook; requires preload or LOAD
pg_search 0.22.2 0.23.1 Upgrade; PG 15-18; pgrx 0.18.0
pg_slug_gen - 1.0.0 New; PG 15-18
pg_stat_ch - 0.3.6 Added, then upgraded; PG 16-18; EL8 break
pg_store_plans 1.9 1.10 Upgrade
pg_strict 1.0.3 1.0.5 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_text_semver - 1.2.1 New; PG 14-18
pg_textsearch 0.5.0 1.1.0 Upgrade; PG 17-18; requires shared_preload_libraries
pg_trickle 0.16.0 0.40.0 Upgrade; PG 18 only; pgrx 0.18.0
pg_tzf 0.2.3 0.2.4 Upgrade; Rust/pgrx 0.17.0
pg_vectorize 0.26.0 0.26.1 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_variables - 1.2.5 New; PG 14-18
pg_when - 0.1.9 New; PG 14-18; Rust/pgrx 0.17.0
pgxicor 0.1.0 0.1.1 Upgrade
pgcalendar - 1.1.0 New; PG 14-18
pgclone - 4.0.0 Added, then upgraded; PG 14-18
pgelog - 1.0.2 New; PG 14-18
pglinter 1.1.1 1.1.2 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pglock - 1.0.0 New; PG 14-18
pgmq 1.11.0 1.11.1 Upgrade; PG 14-18
pgmqtt - 0.1.0 New; PG 14-18; Rust/pgrx 0.16.1 -> 0.17.0
pgproto - 0.5.0 Added, then upgraded; native Protobuf support
pghydro - 6.6 New; PG 14-18
pgx_ulid 0.2.2 0.2.3 Upgrade; Rust/pgrx 0.17.0
plv8 3.2.4 3.2.4-2 RPM only; EL10 build fix
PolarDB 15.15 17.9.1.0 PG 15 -> 17
postgresbson - 2.0.2 New; PG 14-18
postgis 3.6.2 3.6.3 DEB only
prefix 1.2.10 1.2.11 Upgrade; PG 14-18; PGDG
provsql - 1.2.3 New; PG 14-18
rdf_fdw - 2.5.0 Added, then upgraded; PG 14-18
rdkit - 202503.6 New; PG 14-18
re2 - 0.1.1 New; PG 16-18
storage_engine - 1.3.4 Added, then upgraded; columnar and row-compression table access methods
supautils 3.1.0 3.2.1 Upgrade
system_stats 3.2 4.0 Upgrade
timescaledb 2.25.2 2.26.4 Upgrade; TSL minor update
ulak - 0.0.2 New; PG 14-18
wrappers 0.5.7 0.6.0 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0

Infrastructure Package Updates

Package Old Version New Version Notes
alertmanager 0.31.1 0.32.1
agentsview 0.15.0 0.26.0
claude 2.1.81 2.1.123 Downloaded through the 8118 proxy and verified
code 1.112.0 1.118.1 Direct-link metadata update
code-server 4.112.0 4.117.0 Direct-link metadata update
codex 0.116.0 0.125.0 Moved from prerelease track to stable, then upgraded further
crush 0.51.2 0.64.0 Direct-link metadata update
dblab 0.34.3 0.38.0
duckdb 1.5.0 1.5.2
etcd 3.6.9 3.6.10 Unified package version
garage 2.2.0 2.3.0
genai-toolbox 0.27.0 1.1.0 Upstream renamed to mcp-toolbox
golang 1.26.1 1.26.2
grafana 12.4.1 13.0.1 Metadata refreshed after major upgrade
grafana-infinity-ds 3.7.4 3.8.0
grafana-plugins 12.3.0 13.0.0 Noarch plugin bundle, manually collected
grafana-victoriametrics-ds 0.23.1 0.24.0
hugo 0.158.0 0.161.1
maddy 0.8.2 0.9.3
mcli 20260321000000 20260417000000 pgsty branch, CVE fixed
minio 20260325000000 20260417000000 pgsty branch, CVE fixed
mongodb_exporter 0.49.0 0.50.0
node_exporter 1.10.2 1.11.1
nodejs 24.14.0 24.15.0 Stays on the 24.x policy line
npgsqlrest 3.11.1 3.12.0
opencode 1.2.27 1.14.30 Switched to versioned cache and rebuilt
pg_exporter 1.2.1 1.2.2 Direct-link metadata update
pgflo 0.0.15 - Removed
pgschema 1.7.4 1.9.0
pig 1.3.2 1.4.1 Metadata only
postgrest 14.7 14.10
prometheus 3.10.0 3.11.3
rainfrog 0.3.17 0.3.18
rclone 1.73.2 1.73.5 Direct-link metadata update
rustfs 1.0.0-alpha.89 1.0.0-b1 Prerelease line
sabiql 1.8.2 1.11.1
seaweedfs 4.17 4.22
sqlcmd 1.9.0 1.10.0
stalwart 0.15.5 0.16.2
tigerbeetle 0.16.77 0.17.2
tigerfs 0.5.0 0.6.0
timescaledb-tools 0.18.2 0.19.0 Rebuilt timescaledb-tune
uv 0.10.12 0.11.8
victoria-logs 1.48.0 1.50.0 Main package
victoria-metrics 1.138.0 1.142.0
victoria-metrics-cluster 1.138.0 1.142.0 VictoriaMetrics companion component
victoria-traces 0.8.0 0.8.2
vip-manager 4.0.0 4.2.0 Direct-link metadata update
vlagent 1.48.0 1.50.0 VictoriaLogs companion component
vlogscli 1.48.0 1.50.0 VictoriaLogs companion component
vmutils 1.138.0 1.142.0 VictoriaMetrics companion component
vector 0.54.0 0.55.0 Direct-link metadata update
v2ray 5.47.0 5.48.0
xray 26.2.6 26.3.27

Checksums

58a914fce7bc521b65e167f66e7961a3  pigsty-v4.3.0.tgz
9ce070efb0420057a83c632b2856d1b3  pigsty-pkg-v4.3.0.d12.aarch64.tgz
bf21c36d3aff94a1a6353130597ffa85  pigsty-pkg-v4.3.0.d12.x86_64.tgz
81b4790c4e5567cee9d1beadd06e48e6  pigsty-pkg-v4.3.0.d13.aarch64.tgz
06baab9341ab683eaeea2e066b28a0f4  pigsty-pkg-v4.3.0.d13.x86_64.tgz
fb4bf751df5e09f547c49b8ab7cac9a0  pigsty-pkg-v4.3.0.el10.aarch64.tgz
a3e752c8148122d1eaea74a6d8d8df0d  pigsty-pkg-v4.3.0.el10.x86_64.tgz
cb2a9af36615513e66fd5ac3e9f4d797  pigsty-pkg-v4.3.0.el9.aarch64.tgz
e24641a879dec7a8eea74dab42f85920  pigsty-pkg-v4.3.0.el9.x86_64.tgz
6b675fd8d9e039193481f0838aa4b92c  pigsty-pkg-v4.3.0.u22.aarch64.tgz
c0e344ccb9d190a619591e5d46116424  pigsty-pkg-v4.3.0.u22.x86_64.tgz
3e0ec9534cf595201ec79eb1fc6549d8  pigsty-pkg-v4.3.0.u24.aarch64.tgz
0a3d19513eca9615bdd66a4b2bf66f1d  pigsty-pkg-v4.3.0.u24.x86_64.tgz
683a10ff8fd993358d6befa9f4e02913  pigsty-pkg-v4.3.0.u26.aarch64.tgz
fd1ea5cd5554bfe91fadd51ad80860e3  pigsty-pkg-v4.3.0.u26.x86_64.tgz

1.7 - Give DBA Agents a Body

Originally published on VONNG.

HOW 2026 keynote: Give DBA Agents a Body

Part I: Opening—An Absurd Phenomenon

1. Cover

Hello, everyone. I’m Ruohang Feng, the organizer of this tools track. This is a PostgreSQL tools session, but today I don’t want to talk about how many new features some command-line utility has gained. I want to ask a more fundamental question: Why are agents that can actually manage production databases still so rare? My answer is simple: today’s models are already smart enough. What they lack is not a brain, but a body. They need to see system state, take action, judge risk, leave evidence, and back out after something goes wrong. Today I want to discuss how we can build that body for a DBA Agent.

2. An Absurd Phenomenon

Many of you probably know Pigsty. Pigsty is an open-source PostgreSQL distribution I built around a simple goal: even without a DBA or RDS, you should be able to run production-grade PostgreSQL yourself and obtain enterprise database capabilities through free, open-source software.

The Pigsty open-source project

The project now has more than 5,000 stars on GitHub. It ranks among the leading PostgreSQL distributions and is one of the more prominent open-source projects in China’s PostgreSQL ecosystem.

How many requests do you think a site for a project like this gets each month? A hundred thousand? A million? Ten million?

3. Anomalous Traffic

None of those. The number startled me too: 90 million requests over the past month, and still climbing. At the current growth rate, it will soon approach 100 million. The obvious question is: where could that many human visitors possibly come from?

Anomalous traffic

I checked the analytics. Monthly human unique visitors numbered only in the tens of thousands, with page views in the hundreds of thousands. So where did the other nearly 100 million requests come from? Judging by User-Agent strings, access paths, and trigger patterns, much of the traffic no longer came from humans browsing in the traditional sense. AI tools were reading the documentation.

4. Who Is Visiting?

After thinking about it, I realized what had happened. When we released Pigsty 4.0 early this year, we added a feature called DBA Agent. The name sounds grand, but in practice it is just a CLAUDE.md file containing two very plain rules: first, do not drop the database; second, if something goes wrong, read the documentation. Then it lists all the documentation links. That’s it.

Yet a new kind of user gradually appeared in our community. These users do not necessarily know PostgreSQL or Linux, but they do have Claude Code or Codex.

Agent users

They sit at a Linux shell and tell the AI: “Install Postgres for me.” “Add a user.” “Figure out what’s wrong here.” To do that work, the AI has to keep reading the documentation. So those nearly 100 million requests were not people clicking around by hand. They were agents reading on their users’ behalf. Those agents are already playing the role of DBA—and doing a surprisingly decent job.

5. Agents Are Already Doing DBA Work

Honestly, I think these agents are doing pretty well. I use them this way myself when I run into difficult problems. In a simulated Pigsty environment, I tell an agent: I have this issue, or a customer has this issue; inspect the source code, configuration, logs, and documentation, then analyze the likely causes. Sometimes I give it a few hunches—A, B, and C—and ask which is most plausible.

Troubleshooting

More often than not, its analysis lands close to the truth. It is not always right, but it is already good enough to be impressive. So when I talk about DBA Agents today, I am not pitching a concept that exists only in a slide deck. I am describing something already happening among the users of a real open-source project.

6. D-Bot Already Proved the Point

More interesting still, while everyone is now piling into the DBA Agent space, someone already built one on Pigsty two years ago.

A team led by Xuanhe Zhou at Tsinghua University built a DBA Agent called D-Bot on a Pigsty environment, and the paper was later published at VLDB. They were still using GPT-4. Even with the models available at the time, D-Bot could diagnose fairly complex failures in Pigsty and produce evidence-backed root-cause analyses and remediation recommendations.

D-Bot

One major reason they chose Pigsty was that it offered an open, standardized, production-grade runtime. They could focus on the intelligence instead of rebuilding the infrastructure from scratch: monitoring data was already available, and established command-line primitives could perform the necessary operations. Two years later, model capabilities have improved many times over. What can we build today by pairing this Runtime with state-of-the-art models? I leave that possibility to everyone in this room.


Part II: Theory—What Is a Body Made Of?

7. Why Haven’t Self-Driving Databases Taken Off?

At this point someone will inevitably ask, “So is AI going to replace DBAs?” My answer is: not yet. After all, AI cannot take the blame for you. But it does reveal a real possibility: self-driving databases. The idea is not new. Oracle has talked about it, cloud vendors have talked about it, and academia has talked about it.

Yet after all these years, very few implementations are actually good. I believe the technology is finally ready. We may not be able to achieve Level 5 autonomy today, but a copilot that assists the driver is clearly within reach. The real question is: what must we provide before a database can drive itself?

8. The Database Needs Pyramid

I once drew a pyramid of database needs. At the top sits intelligence—the self-driving database, the Holy Grail. But it rests on control and insight: you must be able to see and control the system. Beneath those are the fundamentals of quality, security, efficiency, and cost. If your monitoring is incomplete, your changes still depend on inherited shell scripts, and you cannot reliably rehearse high availability or point-in-time recovery, you have no business talking about self-driving databases.

The database needs pyramid

It is like trying to build a self-driving car without sensors, brakes, a steering wheel, or airbags. What good is a brilliant algorithm then? The core of a DBA Agent is therefore not the model or the agent framework. It is a deterministic environment and a body through which the agent can interact with that environment. That is the theme of this talk.

9. The Body’s Two Foundations: Eyes and Limbs

What does it mean to give an agent a body? I think the two most basic components are eyes and limbs. First, the eyes: observability. It must be able to see the database, operating system, network, disks, connection pools, backups, replication lag, and historical trends. Second, the limbs: controllability. It needs reliable ways to take action—to apply changes, restart services, fail over, back up, restore, add users, and scale up or down. Let’s start with the eyes.

An agent’s body

10. Eyes: Observability

The first problem any DBA Agent must solve is information gathering. It needs to know what is happening now. Pigsty addressed this long ago: it provides a complete open-source observability stack built on VictoriaMetrics and Grafana, collecting nearly every useful PostgreSQL signal. For agents and humans alike, effective management begins with enough information.

Observability

AI DBA products usually begin with monitoring: metric collection, anomaly detection, and alerting, followed by a conversational interface to the agent. pgEdge’s AI DBA Workbench is a typical example. Monitoring is clearly the most basic and important component of a DBA Agent. But I have discussed it several times already and will not repeat myself today. I want to talk about the other part of the body: the limbs. Today is not about the eyes. It is about the hands and feet.

11. Four Stages of Database Automation

From an automation perspective, database management has passed through roughly four stages. Stage one is completely manual: the DBA types every command. Stage two is a pile of hand-me-down scripts or clicking around in a console—ClickOps. Stage three is infrastructure as code: declarative management with tools such as Ansible, Terraform, and Operators. Stage four is the agent: instead of writing commands one by one, the human states a goal, and the agent observes, plans, executes, and verifies.

There is a crucial dependency here. Before an agent can enter stage four, stage three must already exist. Without IaC, an agent will struggle to operate reliably. I will return to that point later. First, let us answer a more concrete question: how exactly should an agent operate a database?

12. Experts and Agents Both Need Action Interfaces

Should an agent operate a database by opening a browser and clicking around a console? Should it call an API? Or should it use the command line?

For both experts and agents, what matters is not a GUI but a clear, composable, auditable, and reproducible action interface. A CLI is one of the most natural forms, especially when it also supports structured output such as JSON and YAML. That makes it equally useful to humans and agents.

So here is one prediction: the agent era will revive the value of the CLI. In a sense, this returns us to the original Unix philosophy—everything is text, and everything composes.

13. PostgreSQL’s Problem: A Fragmented Toolchain

But there is an awkward reality: the PostgreSQL ecosystem is powerful and fragmented. You might install Postgres with apt or dnf; start it with systemctl or pg_ctl; run SQL with psql; manage high availability with patronictl; back up with pgBackRest; pool connections with PgBouncer; and handle extensions with yet another assortment of packages and configuration files.

That is fine for veterans. They know how to use each tool and where the traps are. But it becomes a problem when an agent manages the database. The agent needs one coherent action interface; it should not have to guess among scattered tools and ancient scripts every time. So we wondered whether we could build something that unified them.

The PostgreSQL toolchain

14. Pig CLI Began as an Extension Package Manager

Our tool is called Pig CLI. It began as something very simple: a small Go program I wrote to solve PostgreSQL and extension installation. It does not try to reinvent apt or dnf; it adds a layer of PostgreSQL semantics on top of them. Why? Traditional package managers understand packages, not PostgreSQL extensions. If you ask to install vector, the package manager does not know which package you mean, which PostgreSQL major version, which Linux distribution, or which architecture. Pig’s first job was to translate a “package” into a “database capability.”

Pig CLI

15. Do Not Underestimate Installation

Do not underestimate installation. For many PostgreSQL beginners, installing an extension is the first major obstacle. They want to use one, but cannot compile, package, build, and distribute it themselves, so they need a ready-made binary. What if none exists? What if the network is unreliable? What if the versions do not match? None of this is especially hard for a veteran, but it can stop a newcomer cold.

One of Pigsty’s most important jobs is maintaining binary distribution for PostgreSQL extensions. It integrates a large collection of third-party extensions and makes them work out of the box on mainstream Linux distributions. That puts many of PostgreSQL’s “superpowers” in the hands of ordinary users.

16. But a DBA Does More Than Install Software

Of course, if Pig could only install extensions, it would still be too limited. Most DBA work consists of Day 2 operations. After installation, you must create the cluster, initialize directories, configure permissions, tune parameters, create users and databases, configure connection pools, backups, and monitoring—and later perform failovers, scale out, scale in, recoveries, health checks, cleanup, repacking, and upgrades.

Pigsty historically performed most of these tasks through Ansible Playbooks. Claude Code can read the documentation and run the Playbooks, but the experience is not good enough. What we really want is to gather the primitives of daily database administration behind a single command-line interface—to evolve Pig CLI from an extension package manager into a tool that can manage the full state of a PostgreSQL system.

17. Pig CLI’s Ambition: The Swiss Army Knife of PostgreSQL

Pig CLI’s long-term goal is therefore much larger than package management. It should become the Swiss Army knife of the PostgreSQL ecosystem: install PostgreSQL, install and build extensions, initialize clusters, manage services, inspect state, manage high availability, configure backups, and perform maintenance. Can all these actions converge on a single interface?

That would free DBAs from a great deal of manual work. More importantly, it would give agents hands and feet. Humans can remember a pile of complicated tools, and agents can too, but there is no reason to make them. Give an agent a clearer, more stable action interface and it will work better.

A Swiss Army knife

18. An Agent-Native CLI

This raises another question. The Unix philosophy teaches KISS: make each tool do one thing well, then compose tools through pipes. If we pack all these capabilities into Pig CLI, does it become a bloated kitchen-sink application? We should answer that directly. Humans value tools that are small and elegant. For agents, self-description matters more.

An agent-native CLI must be able to explain itself. Its help text must be clear, its output structured, and its errors explicit. Humans read colored text; agents read JSON and YAML. The tool needs to serve both.

Put bluntly, the ideal is not to write a pile of Skills documents in advance to teach the agent how to use a tool. The tool itself should be sufficiently self-describing. An agent should be able to type --help and explore layer by layer: what commands exist, what parameters they take, what each parameter means, what output formats are available, and what error codes can occur.

This may sound like a detail, but it is central to CLI design in the agent era. A truly agent-native interface also needs dry runs, idempotency, explicit exit codes, machine-readable errors, permission boundaries, confirmation for dangerous operations, audit logs, and rollback suggestions. I will not go further into those details today.

An agent-native CLI

19. Why Start with a Native Linux Runtime?

Some people ask why we are building command-line tools to manage Postgres directly on Linux instead of basing the system on Kubernetes. A Kubernetes Operator is certainly another kind of Runtime, but it hides many low-level details while adding another layer of abstraction and complexity. Encapsulation is good for application developers. It is not always good for a DBA Agent, because once a problem cuts through the abstraction, the agent needs to see systemd, disks, filesystems, networks, and PostgreSQL itself.

In other words, if you want to push a database runtime to its limits, controlling a connection string is not enough. Controlling one abstract API layer is not enough. You must control the environment in which the database actually runs. We are not trying to build a DBA Agent that can merely invoke tools. We want one that can see, understand, and operate the whole system. It needs more than hands and feet. It needs a complete body.


Part III: The Turn—Tools Are Not Enough; the Runtime Is the Moat

20. A Cautionary Example: OtterTune

OtterTune offers a case worth studying. Co-founded by CMU database professor Andy Pavlo, it raised a $12 million Series A to provide automatic parameter tuning for PostgreSQL and MySQL, but it never became the standard answer for self-driving databases. Why?

Its product proposition was: give us a database connection string, and we will tune the database. That sounds appealing. But a connection string is the lowest common denominator across every PostgreSQL service. What can you do with one? Run some SQL and inspect a few system views. You cannot see complete historical trends, restart the database, or change parameters that require a restart. When something goes wrong, you cannot trace the problem across layers. Is it the application, the database, the OS, or the network? You cannot see any of them.

21. No Runtime, No Expert DBA

The lesson I draw from OtterTune is this: with only a connection string and no Runtime, it is difficult to build an expert-level DBA Agent. A connection string is a narrow peephole through which you can see only one corner of a house. The important details are hidden in the operating system, disks, filesystem, service manager, monitoring history, and backup chain. No matter how smart a tool is, if it sees the world through a peephole, it can never make expert judgments.

Pigsty began as a monitoring system. Why did it later become an all-in-one PostgreSQL distribution? Because I eventually realized that to push monitoring to its limits, you must take direct control of the entire infrastructure. Otherwise, you cannot control how users deploy their databases. All you have is a connection string, and what you can do with it is extremely limited.

The key to building a DBA Agent is therefore not how polished the command-line tool looks. It is the Runtime behind that tool.

22. The Runtime Is the Real Moat

Many people building agents today like to talk about prompts, Skills, and workflows. Those are useful, of course, but let me be direct: they do not create a very strong moat. Write a veteran DBA’s experience into Markdown and model vendors can ingest it, competitors can learn it, and the next model generation may absorb much of that knowledge directly.

So what is the real moat? The agent’s understanding of your private environment. How is it deployed? What instances exist? What is the backup policy? Which alerts have fired in the past? Which operations have been performed? Which traps have people already fallen into? None of that appears in general training data.

The Runtime moat

In one sentence: a generic agent alone does not have a deep moat. The real defensibility lies in the agent’s understanding of the Runtime, and in the state, history, and operational boundaries accumulated inside that Runtime.

23. The Runtime’s Hard Problem: Context Engineering

How does a Runtime become usable by an agent? This is the genuinely hard part: context engineering. How do you feed it the right information? My view is clear: building a so-called DBA Agent framework from scratch today will probably produce something worse than simply using Claude Code or Codex. The difficult part is not the wrapper framework. It is providing the right context, permissions, and tool boundaries.

For a DBA Agent, context is not chat history. It is topology, metrics, logs, configuration, and change history. Topology tells it what the system looks like. Metrics show where something is wrong now. Logs reveal what happened. Configuration explains why. Change history shows who just touched what.

The information comes mainly from two sides. One is observation: monitoring, logs, alerts, metrics, and historical trends. The other is control: Inventory, configuration, permissions, Playbooks, CLIs, and backup and recovery interfaces. Connect the two and the agent can graduate from chatting to doing the work.

24. IaC Is the Agent’s Central Dogma

At this point I need to single out one idea, because it is the central secret—the soul—of why DBA Agents work in Pigsty: infrastructure as code. A Pigsty environment is defined by an Inventory. The number of nodes, which one is primary, which are replicas, where monitoring and backups live, which ports and roles exist—all of it is in the configuration inventory.

IaC Inventory

This inventory is not documentation written after the fact. It is the blueprint from which the entire environment is generated. Once the agent has the blueprint, it knows what the environment looks like. It is not guessing inside an unfamiliar world; it is reading that world’s source code. This is IaC’s real value to an agent: it makes the environment itself readable and condenses it into a single file.

25. Mastery Means Becoming One with the Tool

Now the pieces fit together. In Chinese martial-arts stories, the master swordsman becomes one with the sword. The same is true of a programmer and a keyboard, a veteran driver and a steering wheel, or a DBA and an environment.

A DBA’s ability is not merely the database theory in their head. It comes from becoming one with the environment. Drop a world-class expert into an unfamiliar system, and they may perform worse than an ordinary administrator who has lived in that system for three years. The latter knows where the traps are, which machine is slow, which parameter must not be touched, and which application goes haywire every night.

Agents are no different. Drop Claude Code into a completely unfamiliar Linux environment and it will flounder. Place it inside a deterministic Pigsty Runtime, with the Inventory, monitoring, documentation, and CLI, and it can do a great deal.

26. Read-Only Advice Is Ready; Automatic Execution Requires Caution

That said, let me pour a little cold water on the idea. In a serious production environment, I do not recommend handing the database over to an agent in fully automatic mode from day one. The most credible model today is still a copilot: the agent gathers information, analyzes the problem, proposes a plan, and explains the risks; then a human confirms it. Either the human executes the plan or explicitly authorizes the agent to do so. Destructive and irreversible operations in particular must face hard constraints.

This takes us back to the beginning: AI cannot take the blame for you. Responsibility cannot be transferred, so operations must be confirmed by a human. That is why a DBA Agent should first become a solid copilot instead of leaping straight to aggressive Level 5 autonomy.

Today, a workflow of read-only recommendations from a DBA Copilot, followed by human execution, is mature enough for production. The next step is to make every stage of that workflow more reliable.


Part IV: Extending the Idea—from DBA Agent to Dev Agent

27. Not Just for DBAs: piglet.run

So far I have discussed DBA Agents for enterprise deployments and large PostgreSQL clusters. But there is another audience: individual developers and small teams. They do not necessarily need a complex DBaaS management system. They need a development runtime that works out of the box.

piglet.run

That is the problem piglet.run aims to solve: distill Pigsty’s observable, controllable, and reversible capabilities into a development runtime for individuals and small teams. It takes a Linux virtual machine and configures PostgreSQL, Nginx, monitoring, development tools, Claude Code, Codex, Code Server, and everything else in one shot. Then Coding Agents can work directly inside that environment.

The Runtime prepared for a DBA Agent—an observable, controllable, reversible environment—works just as well for a Dev Agent, perhaps even better.

28. pg.center: A Small, Real Example

Here is one of my own examples. I recently built a small project called pg.center, an unofficial Chinese mirror of postgresql.org. In the past, building something like this was not a small job. You had to find the website repository, fetch content, translate it, generate pages, deploy them, and keep everything synchronized on a schedule.

Today the process is simple. I log in to a cloud server and bring up the Runtime with one command. Nginx, the database, monitoring, and the programming environment are all ready.

pg.center

Then I open Claude Code and tell it: “I want to build a Chinese edition of the PostgreSQL website. Make a plan first, then execute it.” About a day later, the site is up, with scheduled synchronization and updates.

That is the value of the Runtime. You do not write everything locally and deploy it afterward. You let the agent do the work directly inside a deterministic, production-grade environment.

29. A LAMP Stack for the New Era

This reminds me of the old LAMP stack: Linux, Apache, MySQL, and PHP. A generation of websites launched quickly on that foundation. Times have changed. The P no longer has to mean PHP; it might be Node.js, Go, Python, or whatever language an agent prefers. But several components remain constant: Linux, a database, a web entry point, and monitoring.

So here is another prediction: the agent era will produce a new foundational stack, designed not for traditional programmers but for Dev Agents.

The Agent LAMP stack

I call it the AI Agent LAMP stack: Linux, Agent, Monitoring, PostgreSQL. This is not a literal recreation of the original LAMP. It is a mnemonic for the agent era: Linux provides the environment, the agent provides execution, Monitoring provides the eyes, and PostgreSQL provides data and state. Pigsty can provide this entire stack.

With it, the barrier to building a website, portal, internal system, or data application falls dramatically. A developer may have only two things left to worry about: buying a domain and renting a server. The agent can handle the rest.

30. The Filesystem Should Be Reversible Too

There is one particularly interesting capability worth mentioning: time travel and environment sharing.

JuiceFS rollback

We used JuiceFS to put filesystem state into PostgreSQL. That means your code, configuration, and database content now share a single backup and rollback system. Did the agent make a mess? One-click PITR returns the entire environment, including the filesystem, to where it was five minutes ago. You can also mount the filesystem on Linux, Windows, and macOS, sharing one directory across people and devices.

This is extremely useful for agents. They can experiment freely and roll back with PITR when they get something wrong. What used to be a DBA’s ultimate black magic is becoming available to ordinary users. It gives agents the confidence to experiment boldly.


Part V: Giving the Body to the Community

31. Pigsty Is More Than a DBA Agent’s Body

We can now condense the entire argument into one sentence: on the surface, Pigsty is a PostgreSQL distribution; in essence, it is an Agent Runtime. It places Linux, PostgreSQL, monitoring, backups, high availability, IaC, CLI, and documentation inside one deterministic world.

For a DBA Agent, it is the production environment. For a Dev Agent, it is the development environment. For a Coding Agent, it is an execution environment where it can experiment, verify, and roll back.

Agent Runtime

32. An Open Proving Ground—Come Play

I welcome anyone interested in building agents to come experiment with Pigsty. Think of it as an open proving ground. It has real PostgreSQL, real Linux, real monitoring, real backup and recovery, real high availability, and real configuration and management interfaces. You do not need to reinvent the wheel from scratch. Whether you are building a DBA Agent or a Dev Agent, Pigsty can serve as a convenient foundation.

The Pigsty proving ground

If you are an agent developer or user, you do not need to begin by assembling the low-level environment. Just run Claude Code or Codex inside it. Let the agent accumulate knowledge of the environment and distill that knowledge into memories and Skills. It will grow more familiar with the system and more capable over time.

33. An Open-Source, Shared Runtime

In the agent era, the truly valuable thing is not a prompt, a Skills file, or a clever-looking chat interface. All of those will be copied, absorbed, and rapidly commoditized. What is difficult to copy is a complete runtime environment that is stable, transparent, observable, controllable, and reversible.

That is what Pigsty wants to provide: an open-source PostgreSQL Runtime, a world that an agent can truly enter, understand, operate, verify, and learn from. It does not trap the agent in a web demo and ask it to perform. It puts the agent inside real Linux, real databases, real monitoring, real backups, real high availability, and a real operating environment, then tests it in the field.

The future will not have only one agent or one correct answer. Hundreds, then thousands, of agents will emerge in different directions. Every one of them will need a body and an environment in which it can act. Pigsty can become the skeleton of that body.

34. Giving Agents a Body Also Redefines the Human Role

We give agents bodies not to replace people, but to unleash productivity. DBAs should not waste their time repeatedly installing software, running the same health checks, checking the same metrics, or writing the same scripts. Developers should not waste their time configuring databases, Nginx, monitoring, and deployment pipelines again and again. Agents can do this work, and they will keep getting better at it.

That does not mean people become obsolete. Quite the opposite: the more work agents can do, the more humans must move up the stack. People define goals, design systems, judge risk, set boundaries, and bear responsibility. Humans are no longer the ones tightening every screw by hand. They decide how the machine should operate, who is accountable when it fails, and which decisions must never be left to the machine.

Model generations will turn over, and waves of agents will come and go. What endures is the runtime that is reproducible, auditable, reversible, and trustworthy. Pigsty wants to build that foundation.

Do not think of it as merely a PostgreSQL distribution. Put your agent in an observable, controllable, reversible environment. Let it run, experiment, and verify. Let it grow the body it needs to enter production for real.

Thank you.

1.8 - Put Your AI Agent's State in a Database

Originally published on VONNG.

A year ago, I wrote an article called PGFS: Using a Database as a Filesystem. It started with a request from the Odoo community: make files and the PostgreSQL database recoverable together with point-in-time recovery, so both could be rolled back to the same moment.

The solution has worked quite well. It delivers entirely in software a capability that once required expensive dedicated continuous data protection hardware: rolling the filesystem and database back together to any point in time. Performance is respectable too—more than enough for applications such as Odoo and Dify.

But recently I discovered that PGFS was attracting an unexpected group of users. They were not running ERP systems. They were using it to store AI agent state.

Put AI agent state in a database

The idea is simple: PGFS mounts a PostgreSQL database as a local directory. Reading from or writing to that directory actually reads from or writes to a remote database. Put the AI agent’s working directory, configuration files, and memory there, and all of its state lives in PostgreSQL.

That made me realize PGFS may be far more useful than I originally imagined. I know of at least one company building a commercial OpenClaw distribution that already uses PGFS as its underlying shared-memory mechanism.


Does an Agent Actually Need a Database?

Before discussing the implementation, let us start with the “why.” This question comes up constantly. My friend Jiang and I argue about it all the time: AI agents do not need databases, he says. SQLite is enough.

For a consumer running one agent on one local machine, he may be right. One person runs Claude Code, keeps its state under .claude/, and manages the code properly with Git. No problem. Using PostgreSQL for agent state in that scenario really can feel like looking for a nail because you happen to have a hammer.

But once the scenario becomes even slightly more complex, a database is unavoidable. As Turing Award winner and Postgres creator Mike Stonebraker puts it, this is the path AI agents will inevitably take.

What counts as “slightly more complex”?

Multi-agent collaboration. You begin assigning work to parallel subagents: one writes code, another writes tests, and a third reviews the result. They need to communicate task status and share context. A Markdown file as a task queue? It can work, but it is fragile.

From one person to a team. Coordination is easy to ignore when you are vibe coding alone. But once three or five people on a team each have their own agents working, you need somewhere to coordinate them. As soon as collaboration crosses machines, people, or organizations, a database becomes much more convenient than a directory on someone’s laptop.

Enterprise use. Enterprise applications inherently require centralized storage, auditing, and access control. You need continuous data protection so you can restore to any point in time. You need flexible snapshots, forks, and sharing. You also need to handle concurrent access and data consistency correctly.

The consumer endgame. Today your agent runs on one machine and has that environment to itself. But if you genuinely want something like Jarvis—an agent that runs across all your devices and provides one consistent experience—those agents will necessarily need shared memory.

As complexity grows, sooner or later you will reach for a database to solve these problems—unless you intend to reinvent a bad database on top of the filesystem.

So what unique value can a database offer an AI agent?

I see two killer features.


Killer Feature One: A Time Machine

The first is point-in-time recovery (PITR).

When an agent breaks something in today’s AI-agent workflows, recovery can be difficult. If the agent relies entirely on the filesystem and Git for state, you may be fine if you work only with code, maintain a disciplined Git workflow, and commit and push promptly. But in reality, a great deal of state never enters Git: agent configuration, intermediate artifacts, temporary data, working memory, and more. One bad operation can destroy it permanently.

We have already seen cases of Claude deleting code repositories, never mind data that was not under version control at all.

You might say, “I can take snapshots with Git or ZFS.” You can, but there are two problems. First, snapshots represent discrete points in time. You can return to “the previous snapshot,” but not necessarily to the precise moment 3 minutes and 27 seconds ago—say, one second before the accidental deletion. Second, you must manage those snapshots explicitly: when to create them, how long to retain them, and how to clean them up. That is an operational burden of its own.

Historically, there were only two ways to get the ability to return to any point in time: buy expensive CDP hardware, or build a complex logging system yourself.

PGFS offers a third option: turn every filesystem write into a database write, then inherit PITR from PostgreSQL’s write-ahead log.

More concretely, when you write a file into a PGFS-mounted directory, its data is actually written into PostgreSQL’s jfs_blob table. Filesystem operations and database operations share the same WAL stream. When you perform PITR, the database and filesystem return to the same target time, down to the microsecond timestamp of each operation.

PGFS performs PITR for the filesystem and database together

That gives your agent a time machine: no matter what it does, you can restore everything to any point in time. Code, data, configuration, and memory all roll back together, with no inconsistency between them.

This also unlocks another capability: instant cloning and branching. Because the code’s state is ultimately data inside the database, you can create a new database instance from any point in time, with its filesystem state and database state perfectly aligned. It is like a Git branch, except the business data in the database branches with the code. Different agents can work on different “branches” without interfering with one another. Broke something? Roll back. Want to try another approach? Fork a fresh environment. A filesystem-only design cannot do this.

For AI agents, it is hard to overstate the value of this capability. It gives you an “unlimited undo” safety net—or, in video-game terms, a save system you can load at any time.


Killer Feature Two: A Shared Brain

If you have only one person and one agent, there is indeed nothing to share. But once you start using agents and subagents in parallel, they need an efficient place to communicate.

How does the usual single-machine setup work today? You write a Markdown file in the project directory as a to-do list, manually assign tasks, and send subagents off to execute them. It works, barely, for one person. But put those tasks in a database table, let every agent claim work, update status, and report results there, and you have a natural task-scheduling hub. There is no need for file locks or polling; the database’s MVCC and LISTEN/NOTIFY handle concurrency naturally.

More importantly, a local directory is awkward to share with other people. You can use FTP or NFS, but configuration is cumbersome and security becomes another concern.

PGFS provides a much cleaner sharing model. Imagine this architecture:

  1. You run Pigsty, including PostgreSQL, on a cloud server.
  2. You create a PGFS mount point there, such as /fs.
  3. You put all project code, agent configuration, and shared memory under that directory.
  4. Anyone on the team who has the database connection string can mount the directory on their own machine with one command.
Share a workspace through PGFS

One connection string and one mount command let multiple people, machines, and agents share the same workspace.

That is how I work today: I keep all of my projects in a Pigsty-based monorepo. I can work directly with Claude Code on the cloud server while also mounting the cloud-hosted PGFS locally for local reads and writes. Multiple platforms, multiple instances, seamless synchronization.

Each person can own a subproject while collaborating inside one overall repository.

Now look further ahead. If you really want a Jarvis-style digital assistant, it will need a central place to store state. You cannot give every agent an isolated memory. Otherwise, you do not get one assistant; you get a crowd of underlings that know nothing about one another.

The most natural way for multiple agents to share memory is to give them a hub: a cloud VM running Pigsty, with the database mounted locally through a URL. Every agent can read and write shared state while retaining its own private memory.

Multiple agents share memory

There are plenty of other benefits beyond these two: ACID transactions, high availability, observability, backup and recovery, replication, CDC tooling, and more. I will not expand on all of them here.

How to Build It: Pigsty’s JUICE Module

That covers the “why.” Now for the “how.” The underlying capability has existed for a year; I packaged JuiceFS for Pigsty back then. Pigsty 4.0 officially introduced the JUICE module, turning the entire process into declarative configuration and one-command deployment.

What Is JuiceFS?

JuiceFS is a high-performance, POSIX-compatible distributed filesystem. Its architecture is straightforward: a metadata engine plus a data-storage backend. The metadata engine manages the directory tree and file attributes; the storage backend holds file contents.

The core idea behind PGFS is this: JuiceFS can use PostgreSQL as both its metadata engine and its data-storage backend. All file metadata and contents live in PostgreSQL and share the same WAL stream. (TimescaleDB recently released TigerFS, which offers similar functionality, but it is less mature. I have packaged and integrated that as well.)

Declarative, One-Command Deployment

Pigsty’s vibe configuration template already includes a working example. Run these commands on a fresh Linux server, and you will have a predefined PGFS mounted at /fs:

curl -fsSL https://repo.pigsty.io/get | bash
cd ~/pigsty
./configure -c vibe -g   # Use vibe mode and generate random passwords
./deploy.yml             # Deploy infrastructure and PostgreSQL
./juice.yml              # Deploy the JuiceFS filesystem

Every read and write under the default /fs directory lands in the database. You can mount that same database at another path—or at local mount points on multiple computers—to share the directory. All of it is defined by this short configuration:

juice_instances:
  jfs:
    path: /fs
    meta: postgres://dbuser_meta:[email protected]:5432/meta
    data: --storage postgres --bucket 10.10.10.10:5432/meta \
      --access-key dbuser_meta --secret-key DBUser.Meta
    port: 9567

That is all. The system automatically formats the JuiceFS volume, mounts it, configures it to start at boot, and integrates monitoring.

You can easily use the same pattern to define multiple JuiceFS instances, or mount one instance on several different machines:

app:
  hosts:
    10.10.10.11: {}
    10.10.10.12: {}
  vars:
    juice_instances: {...}

Better still, the shared mount is not limited to those Linux servers. macOS and Windows users can mount the cloud-hosted PGFS locally too:

juicefs mount "postgres://dbuser_meta:[email protected]:5432/meta" ~/work -d

One connection string is the entry point to your “shared cloud drive.” It is much simpler than NFS or FTP. I am preparing a one-click setup script for macOS and Windows: enter a URL, and it will configure everything for you.

Experienced users will immediately see the trick: move the dot-directories that Claude Code, Codex, and OpenClaw keep under your home directory onto the mounted shared workspace, then symlink them back to their original locations. Your agent state now lives in the database.

And the best part is that performance is quite respectable. PGFS will certainly deliver less throughput than a native filesystem, but actual measurements are not bad: file reads and writes deliver roughly 100 MB/s, and JuiceFS has a local caching mechanism as well. That is more than enough for workloads such as Odoo and coding agents.

Of course, the real highlight is the black magic of rolling the entire environment back to any point in time with a single PITR operation after an agent wrecks it.


Conclusion

Back to the original question: does an AI agent actually need a database?

For a simple single-user, single-machine, single-agent setup, not necessarily; SQLite may be enough. But the agent world is becoming more complex: multi-agent collaboration, shared team environments, persistent state, and recovery from failure. Once those requirements appear, the database stops being optional and becomes infrastructure.

Through Pigsty’s JUICE module, PGFS gives AI agents two killer capabilities:

  1. A time machine: PITR to any point in time, restoring code, data, configuration, and memory together. It also enables instant clones and branches, so agents can experiment in parallel from different “save points.”
  2. A shared brain: multiple agents, people, and machines share the same workspace and memory—with one connection string and one mount command.

A filesystem-only design cannot provide these two capabilities. They once required CDP hardware with a six-figure price tag. Now? One cloud server, one open-source stack, four commands, and no license bill.

This is the right way to use a database in the AI era.

1.9 - Pigsty Goes Global: 1.44M Visitors, Zero Ad Revenue

Originally published on VONNG.

Traffic on pigsty.io jumped by roughly an order of magnitude over the last month. I opened the Cloudflare dashboard today and had to stare at it for a second.

Pigsty docs site traffic overview in Cloudflare

1.44 million unique visitors, 18.11 million page views, 1.1 TB of traffic.

That is over 30 days. For the documentation site of an open source project maintained by one person.

I asked Claude to benchmark the numbers. Its answer was basically: this looks like the traffic profile of a mid-sized SaaS product.

Traffic level analysis

Which is amusing, because I did not build a SaaS product. I built a PostgreSQL distribution, and it is for local deployment.

So where is all this traffic coming from?

By country, the US is first with 13.98 million requests, far ahead of everyone else. Vietnam is second with 3.03 million, followed by the UK, France, Singapore, Germany, and then China in sixth place. This is an open source project built by a Chinese developer, and Chinese traffic is only sixth. The site reached users in 177 countries and regions. The UN only has 193 member states.

I still do not know why Vietnam is so enthusiastic, but several Vietnamese people added me on LinkedIn recently, so clearly something is happening there.


No Ads, No Monetization

Claude also did the obvious back-of-the-envelope calculation. At this traffic level, a vanilla Google AdSense setup would probably generate something like $5,000 to $10,000 per month. If I sold sponsorship placements directly to database vendors, it could be several times higher.

Estimated ad revenue

I did none of that. No ads. No popups. 1.44 million people came and went, and I made exactly zero dollars from the traffic.

And this is only the international site, pigsty.io. There is also the domestic pigsty.cc site behind a China CDN, and those numbers are not even included here.

That said, I am used to this pattern. My WeChat public account is already one of the larger personal database accounts in China. The backend fills up with “business cooperation” messages every day, and I still have not taken a single sponsored deal.


The GitHub Side of the Story

Of course, a decent amount of Cloudflare traffic is probably crawler traffic. But even if only ten percent is real human traffic, that is still far beyond what I expected for an open source project.

And traffic is only one signal. On GitHub, Pigsty has also been growing quickly and is about to cross 5,000 stars.

Pigsty GitHub star growth

Among PostgreSQL distributions, Pigsty is now third. At this rate it should reach second before long. Right now number one is EDB’s CloudNativePG, but the two projects sit in different niches anyway: they are doing Kubernetes-native PG, while I am doing Linux-native PG.

PostgreSQL distribution ranking

The difference is that EDB is one of the old giants of the PostgreSQL world, with a large team and a long list of contributors behind CloudNativePG.

Pigsty is just me. Literally a database one-man business. The fashionable term now is OPC: One Person Company.


How Far Can One Person Go?

Within the Chinese PostgreSQL ecosystem, Pigsty is probably the open source project with the strongest international reach built by a domestic vendor or developer. Its GitHub stars are already comfortably ahead of several PostgreSQL kernel projects backed by Alibaba, Huawei, and Tencent.

Chinese PostgreSQL project comparisonStar comparison across Chinese PostgreSQL projects

Getting here as a solo builder is still a little surreal.

In a few weeks it will be exactly four years since I went independent. Pigsty started as a one-person project. Technology, product, docs, marketing, sales, consulting, delivery: I did all of it myself.

To be clear, it has not been easy. But the timing helped. AI made it realistic for one person to do work that used to require a team. If you want to run an OPC, this is a much better era than the one before it.


Where Things Stand Now

Honestly, I like the current state of affairs.

The consulting business keeps growing and easily covers expenses. Customer retention is perfect. The global user base keeps growing organically. There is no fundraising pressure, no KPI theater, no boss, no morning standup.

I write the code I want to write, build the product I want to build, and work with customers worth working with.

Four years ago this was just a tool I built for myself. Now it has users across 177 countries and regions. That fact says something:

if you make something genuinely good, the world will eventually find it.

You do not necessarily need a team. You do not necessarily need a marketing budget. Build something solid, put it out there, and let the tailwinds arrive when they arrive.

That is what open source does. You give your best work away for free, and the world pays you back in its own currency. That currency is not always money. Often it is something more valuable: trust.

Users from 177 countries and regions

Trust from users in 177 countries and regions.

That is worth more than ad revenue.

1.10 - Pigsty v4.2: 12 Kernels in Bloom

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v4.2 is officially released, hot on the heels of PostgreSQL’s emergency out-of-band minor updates.

This release ships three brand-new PG kernels — the graph database AgensGraph, the multi-master distributed pgEdge, and the MPP data warehouse Cloudberry — while rebuilding three existing kernels: Babelfish, OrioleDB, and OpenHalo. With these additions, Pigsty now supports a total of 12 kernels.

With a single configuration file, you can deploy all these different flavors of PostgreSQL as enterprise-grade database services — complete with monitoring, high availability, point-in-time recovery, and Infrastructure as Code. That is essentially what a “Meta PG Distribution” means.


A Garden of Kernels

PostgreSQL is renowned for its extreme extensibility. The ecosystem offers over 1,000 extensions, and Pigsty provides 461 of them out of the box.

But some capabilities are beyond what extensions can achieve — namely, custom syntax. If you want native Oracle PL/SQL, SQL Server T-SQL, MongoDB’s BSON wire protocol, or Cypher graph queries inside PostgreSQL — not emulated through function calls, but as first-class syntax — you need to modify the kernel. That is why Pigsty not only provides the largest collection of extensions in the ecosystem, but also supports different kernel forks.

Using these kernels in Pigsty is virtually identical to using vanilla PostgreSQL — the same deployment workflow, the same monitoring dashboards, the same HA mechanisms, the same backup and recovery. The only difference is changing one pg_mode value in your configuration file. A one-line config change, an engineering grand unification.

Kernel pg_mode Positioning PG Baseline
PostgreSQL pgsql Vanilla kernel + 461 extensions 14 – 18
Babelfish mssql SQL Server compatible (T-SQL / TDS) 17
IvorySQL ivory Oracle compatible (PL/iSQL) 18
OrioleDB oriole New storage engine, solves MVCC bloat 17
pgEdge pgedge Multi-master distributed replication 17
Percona TDE tde Transparent data encryption 17
AgensGraph agens Graph database (Cypher) 16
OpenHalo halo MySQL wire-protocol compatible 14
Cloudberry gpsql MPP analytical data warehouse 14
PolarDB polar Shared-storage architecture 15
Citus citus Distributed HTAP 17
Ferret / DocumentDB mongo MongoDB wire-protocol compatible 17

Twelve kernels, one config file. Let’s walk through them one by one.


Vanilla PostgreSQL

This round of PostgreSQL minor releases deserves a special mention.

The 18.2 series introduced regression bugs related to substring and WAL replay — fixing a vulnerability inadvertently created new bugs. The community reacted swiftly, shipping emergency patches 18.3 / 17.9 / 16.13 / 15.17 / 14.22 just two weeks later. Pigsty’s approach remains the same as always — the day after new versions drop, offline packages are ready, all extensions are recompiled and verified, and documentation is updated. All you need to do is run a single command.

The total extension count also climbed to 461.

If you prize maximum extensibility and the best stability, vanilla PostgreSQL remains the optimal default choice. Pigsty supports PG 14 through PG 18 across their active lifecycle. Worth noting: this is the last release to support PG 13; the minimum version will be raised to PG 14 going forward.


pgEdge: Native Multi-Master Replication

pgEdge is the heavyweight newcomer in this release.

Traditional PostgreSQL high availability follows a primary-standby model — writes can only go to the primary node. pgEdge’s core extension, Spock, breaks this constraint: every node in the cluster can handle reads and writes, with data asynchronously synchronized between nodes via logical replication, and conflicts resolved automatically through configurable strategies.

Strictly speaking, pgEdge is not an entirely new kernel but rather a multi-master solution built on standard PostgreSQL + the Spock extension. However, since some low-level multi-master capabilities require kernel patches (which have not yet been merged into the PostgreSQL mainline), it currently ships as a “patched kernel + extension” combination. This is similar to OrioleDB and Percona TDE — if the PostgreSQL mainline eventually merges these patches, they could all transition to pure extension form. That is a very promising trend to watch.

I’m quite bullish on this project. The pgEdge team includes several PostgreSQL community kernel veterans with deep technical expertise. Its open-source journey is also worth mentioning: previously it used a Confluent-style Source Available license (pgEdge Community License), which was not strictly open source. But in September 2025, it fully transitioned to the PostgreSQL License.

One nuance to be aware of, though: the source code is under the PostgreSQL License, but the official binary packages remain under a commercial license. Specifically, development use is free, but production use requires a paid subscription.

I built the packages directly from the PostgreSQL-licensed source code myself — creating patched PostgreSQL kernel packages and adapting them for all major operating systems that Pigsty supports. No external dependencies; just install from the Pigsty repo. No production licensing issues. Of course, if you want their cloud service and commercial support, you’re welcome to go support them.

pgEdge consists of three core extensions:

  • Spock 5.0.5: The multi-master logical replication engine; every node handles reads and writes.
  • Lolor 1.2.2: Large object logical replication.
  • Snowflake 2.4: Distributed sequence number generation.

For conflict resolution, pgEdge provides multiple strategies: simple “last-write-wins” (LWW), dedicated CRDT-based approaches, conflict log tables, and user-defined custom strategies. If you have globally distributed needs — say, a node each in Beijing, Frankfurt, and Virginia, with users reading and writing from the nearest one — this multi-master model is an excellent fit. It essentially brings native CockroachDB/TiDB-style multi-write capabilities into the PostgreSQL ecosystem, except the foundation is still the PostgreSQL you know and love.

To use it in Pigsty: configure -c pgedge.


AgensGraph: Graph Database

AgensGraph positions itself as a multi-model graph database built on PostgreSQL — natively supporting both relational and property graph models within a single engine, rather than starting from scratch like Neo4j. The project is led by the Korean team at Bitnine.

Some may ask: doesn’t the PostgreSQL ecosystem already have Apache AGE as a graph extension? Why bother forking the kernel?

There is an interesting backstory here: AGE and AgensGraph were actually created by the same team. They originally built AgensGraph as a kernel fork, which earned around 1,000+ stars. Later, they tried implementing similar functionality in extension form, creating AGE and donating it to Apache. The extension form turned out to be far more popular, garnering 4,000+ stars. AGE went through a brief maintenance hiccup last year but has since resumed updates, releasing version 1.7.0 targeting PG 17/18.

So what is the value of the fork? At least four things:

First, native syntax. In AGE, you execute Cypher queries through function calls (passing query strings as arguments). In AgensGraph, you write CREATE GRAPH directly — Cypher is first-class syntax.

Second, storage optimization. Its storage engine is specifically optimized for graph properties, theoretically yielding better performance (though I have not personally benchmarked it yet).

Third, unified query optimization. Cypher, JSON, and SQL queries are handled uniformly at the optimizer level — a very interesting native implementation approach.

Fourth, vector compatibility. AgensGraph recently announced pgvector compatibility, meaning you can do Graph RAG — combined graph + vector retrieval — within a single database. This is an extremely hot frontier area right now. I have not yet packaged this specific vector plugin, but may add it later.

Of course, the cost of the fork path is also obvious: keeping up with the PG mainline is extremely difficult. PG is now at 18, while AgensGraph is still based on PG 16. This is the eternal fate of forks — always one or two major versions behind.

To use it in Pigsty: configure -c agens.


Cloudberry: MPP Data Warehouse

Cloudberry is the third new kernel in this release. It is an Apache project led by the HashData team, essentially a fork of Greenplum 7 — but with significant improvements, such as upgrading the kernel from Greenplum’s PG 12 to PG 14, filling in many useful newer features.

After Cloudberry 2.0 was released, official binary packages were no longer provided — version 1.6 previously had RPMs, but now even those are gone. After waiting several months with no sign of the team addressing this, I decided to build them myself with Claude’s help. The packaging process went smoothly overall, requiring only minor code changes and patches on some newer operating systems. Previously there were only RPMs; now DEBs are available too, across all 14 Linux distributions that Pigsty supports.

As for Cloudberry/Greenplum deployment scripts and monitoring, we actually had those back in Pigsty v1.4, but removed them later due to very low usage. After all, the scale needed for an MPP data warehouse is beyond most organizations. So after careful consideration, we are offering it as a Beta module on demand — the packages are built and available in the repo for direct download; full deployment playbooks will be provided in a future release as appropriate.


Babelfish: SQL Server Compatibility

Having covered the three new kernels, let’s talk about the three rebuilt kernels.

Babelfish is AWS’s open-source SQL Server compatibility layer — it lets PostgreSQL understand T-SQL syntax and the TDS protocol, so your SQL Server applications can connect to PostgreSQL without changing drivers or most queries. Great project, but the build process is notoriously complex — so complex that there is an entire open-source project, WiltonDB, dedicated to just this task.

Previously, I took the easy route and used WiltonDB’s packages. Honestly, their package quality always left me a bit uneasy: no support for the full Debian series or EL10, a dependency system that differs from standard PG, and the version was stuck on PG15 — while upstream Babelfish already supported PG17.

This time I bit the bullet and built it myself. With the packaging experience gained from the other kernels, this turned out to be straightforward — bundling Babelfish’s four core extensions into a single package alongside a patched kernel package, ready to go. It no longer depends on the external WiltonDB repository and installs directly from the Pigsty repo. The version has been upgraded to Babelfish 5.5 + PG17.

To use it in Pigsty: configure -c mssql.


OrioleDB: New Storage Engine

OrioleDB is the next-generation PostgreSQL storage engine project acquired by Supabase, aiming to fundamentally solve MVCC bloat — replacing the traditional dead tuple + VACUUM mechanism with an Undo Log approach.

This rebuild upgrades to OrioleDB Beta14, built on OriolePG 17.16. A key advancement in this version is the addition of PITR incremental backup and recovery support. It is still in Beta and not recommended for critical production workloads. But as one of the future evolution paths for PostgreSQL storage engines, it is well worth continued attention and experimentation.

To use it in Pigsty: configure -c oriole.


OpenHalo: MySQL Wire-Protocol Compatibility

OpenHalo is the third rebuilt kernel. It provides MySQL wire-protocol compatibility — you can simultaneously use MySQL clients and PG clients to read from and write to the same database, which is a very interesting capability.

Developed by the YiJing XiHe team, they are one of the few domestic Chinese database companies that quietly does solid work and is willing to open-source the results. That is genuinely rare.

Changes in this update:

  • Version upgraded from PG 14.10 to PG 14.18
  • Version number officially updated to 1.0, with naming adjusted to follow Pigsty’s packaging conventions

Although the PG 14 baseline is a bit dated, it is a worthwhile option for MySQL migration scenarios.

To use it in Pigsty: configure -c mysql.


The Other Six Regulars

Besides the six kernels added or rebuilt in this release, Pigsty has six long-standing “regulars”:

IvorySQL (pg_mode: ivory) — Oracle PL/SQL compatible kernel by Highgo, currently based on PG 18.1.

Percona TDE (pg_mode: tde) — Transparent data encryption, meeting the hard compliance requirement of “encryption at rest.” Updates trail the PG mainline slightly; future releases will catch up.

PolarDB (pg_mode: polar) — Alibaba’s open-source shared-storage PG kernel, with minor version updates. Notably, this release drops support for PolarDB-O (the version with domestic compliance certification); the open-source edition retains only the community PG version.

Citus (pg_mode: citus) — Microsoft’s distributed extension, with the official release of version 14.0.0, now supporting PG 18.

Ferret / DocumentDB (pg_mode: mongo) — MongoDB wire-protocol compatibility, letting you connect to PostgreSQL directly with MongoDB drivers.

Supabase self-hosted template has also been routinely updated to the latest version.


One Config, Ten Kernels in Flight

After all this talk about kernels, the most fun part is actually this: we created a demo/kernels.yml config file — if you have 10 VMs, you can use this template to spin up 10 different PG kernels with a single command.

Each cluster gets its own monitoring dashboards, high availability, and backup recovery, managed just like 10 standard PostgreSQL instances. Pure showing off, but also a great reference template: if you want to mix-deploy multiple kernels within a single Pigsty installation, this shows exactly how to configure it.

This is not an architecture diagram on a slide deck. It is running code.


Other Improvements

Beyond the kernel showcase, v4.2 includes several notable engineering improvements:

Redis directory normalization: The default directory changes from /data to /data/redis. Existing configs still using /data need to be updated before upgrading; deployment will block the old path.

Configure script improvements: Supports -o absolute path output with auto-created directories; region detection is now tri-state (domestic/international/offline fallback), fixing the behind_gfw() hang issue.

pgBackRest initialization resilience: stanza-create now retries (2 attempts, 5-second interval), mitigating lock contention with archive-push. If you have hit this issue, you know how annoying it is.

Supabase stack upgrade: PostgREST 14.5, Vector 0.53.0, and S3 access key variables are now properly included.

Vibe template updates: Ships @anthropic-ai/claude-code, @openai/codex, happy-coder, and more — AI coding sandbox out of the box.

Infrastructure routine upgrades: Grafana 12.4, Prometheus 3.10, VictoriaMetrics 1.136, etcd 3.6.8, Kafka 4.2, among others. Note that Grafana 12.4 changes data link merge behavior; review custom dashboards accordingly.

Homepage redesign: Previously hacked together with Claude Code, and people rightfully complained it was ugly. This time Codex gave it an optimization pass, and it looks much better. Will continue polishing when time permits.


Looking Ahead

As an open-source project, I think Pigsty has reached a fairly mature state. The focus going forward will gradually shift to sub-projects:

Pig CLI has recently gained many powerful features — wrapping PostgreSQL, Patroni, PgBouncer, and pgBackRest management into a unified command-line tool, convenient for DBA Agents like Claude Code to invoke. This kind of CLI designed simultaneously for human DBAs and AI Agents is what I call an Agent-Native CLI.

DBA Agent work has also progressed — I have recently written some Claude Skills and prompt templates that make the Pigsty environment perceptible to AI tools. This way you can drop Claude Code into a Pigsty environment and let it work for you.

Pigsty itself will continue to follow the PG minor release cadence. The next version may officially include the Cloudberry deployment playbook, plus local SMTP server support (maddy / stalwart). No rush for big new features — the current architecture running stably is just fine.


v4.2.0 Release Note

Highlights

  • Aligned with PostgreSQL out-of-band minor updates: 18.3, 17.9, 16.13, 15.17, 14.22.
  • Total PostgreSQL extension coverage reaches 461 packages.
  • Kernel updates across Babelfish, AgensGraph, pgEdge, OriolePG, OpenHalo, and Cloudberry.
  • Babelfish template now uses a Pigsty-maintained PG17-compatible build, with no WiltonDB repo dependency.
  • Supabase images and self-hosted templates are refreshed to the latest stack, using Pigsty-maintained pgsty/minio.

Major Changes

  • mssql now defaults to Babelfish PG17 (pg_version: 17, pg_packages: [babelfish, pgsql-common, sqlcmd]) and no longer requires an extra mssql repo.
  • Kernel install paths are normalized in pg_home_map: mssql -> /usr/babelfish-$v/, gpsql -> /usr/local/cloudberry.
  • package_map adds a dedicated cloudberry mapping and fixes babelfish* aliases to versioned RPM/DEB package names.
  • Redis data root default changes from /data to /data/redis; deployment blocks legacy defaults, while redis_remove keeps backward-compatible cleanup.
  • configure now supports absolute -o output paths with auto-created parent directories, tri-state region detection (CN/global/offline fallback), and a fix for behind_gfw() hangs.
  • Debian/Ubuntu default repo URL mappings (updates/backports/security) and China mirror components are corrected to prevent bootstrap package failures.
  • Supabase stack is updated (including PostgREST 14.5 and Vector 0.53.0) and now includes missing S3 protocol credential variables.
  • Rich/Sample templates explicitly define dbuser_meta defaults; node.sh systemd completion is simplified.
  • pgbackrest stanza initialization now retries (2 attempts, 5-second interval) to reduce lock contention with archive-push.
  • Vibe template now ships @anthropic-ai/claude-code, @openai/codex, and happy-coder, and includes age in the default example.

PG Software Updates

  • PostgreSQL 18.3, 17.9, 16.13, 15.17, 14.22
  • RPM Changelog 2026-02-27
  • DEB Changelog 2026-02-27
  • Core upgrades: timescaledb 2.25.0 -> 2.25.1, citus 14.0.0-3 -> 14.0.0-4, pg_search -> 0.21.9
  • New/rebuilt: pgedge 17.9, spock 5.0.5, lolor 1.2.2, snowflake 2.4, babelfish 5.5.0, cloudberry 2.0.0
  • Kernel-side updates: oriolepg 17.11 -> 17.16, orioledb beta12 -> beta14, openhalo 14.10 -> 1.0(14.18)
Package Old Version New Version Notes
timescaledb 2.25.0 2.25.1
citus 14.0.0-3 14.0.0-4 Rebuilt from the latest official release
age 1.7.0 1.7.0 Added PG 17 support for version 1.7.0
pgmq 1.10.0 1.10.1 Package currently unavailable
pg_search 0.21.7 / 0.21.6 0.21.9 Previous RPM/DEB versions differ
oriolepg 17.11 17.16 OriolePG kernel update
orioledb beta12 beta14 Matches OriolePG 17.16
openhalo 14.10 1.0 Updated and renamed, based on 14.18
pgedge - 17.9 New multi-master edge-distributed kernel
spock - 5.0.5 New core pgEdge extension
lolor - 1.2.2 New core pgEdge extension
snowflake - 2.4 New core pgEdge extension
babelfishpg - 5.5.0 New BabelfishPG package group
babelfish - 5.5.0 New Babelfish compatibility package
antlr4-runtime413 - 4.13 New runtime dependency for Babelfish
cloudberry - 2.0.0 RPM build only
pg_background - 1.8 DEB build only

Infrastructure Software Updates

Name Old Version New Version
grafana 12.3.2 12.4.0
prometheus 3.9.1 3.10.0
mongodb_exporter 0.47.2 0.49.0
victoria-metrics 1.135.0 1.136.0
victoria-metrics-cluster 1.135.0 1.136.0
vmutils 1.135.0 1.136.0
victoria-logs 1.45.0 1.47.0
vlagent 1.45.0 1.47.0
vlogscli 1.45.0 1.47.0
loki 3.6.5 3.6.7
promtail 3.6.5 3.6.7
logcli 3.6.5 3.6.7
grafana-victorialogs-ds 0.24.1 0.26.2
grafana-victoriametrics-ds 0.21.0 0.23.1
grafana-infinity-ds 3.7.0 3.7.2
redis_exporter 1.80.2 1.81.0
etcd 3.6.7 3.6.8
dblab 0.34.2 0.34.3
tigerbeetle 0.16.72 0.16.74
seaweedfs 4.09 4.13
rustfs 1.0.0-alpha.82 1.0.0-alpha.83
uv 0.10.0 0.10.4
kafka 4.1.1 4.2.0
npgsqlrest 3.7.0 3.10.0
postgrest 14.4 14.5
caddy 2.10.2 2.11.1
rclone 1.73.0 1.73.1
pev2 1.20.1 1.20.2
genai-toolbox 0.25.0 0.27.0
opencode 1.1.59 1.2.15
claude 2.1.37 2.1.59
codex 0.104.0 0.105.0
code 1.109.2 1.109.4
code-server 4.108.2 4.109.2
nodejs 24.13.1 24.14.0
pig 1.1.2 1.3.0
stalwart - 0.15.5
maddy - 0.8.2

API Changes

  • pg_mode now includes agens and pgedge.
  • mssql defaults are updated to pg_version: 17 and pg_packages: [babelfish, pgsql-common, sqlcmd].
  • Kernel/package alias mappings are updated in pg_home_map and package_map (Babelfish, OpenHalo, IvorySQL, Cloudberry, pgEdge family).
  • redis_fs_main now defaults to /data/redis, with deployment guardrails and backward-compatible cleanup behavior.
  • configure output path handling and region detection logic are updated, with offline fallback warnings and unified SSH probe timeouts.
  • grafana.ini.j2 is updated for Grafana 12.4 config changes and deprecations.

Compatibility Notes

  • If existing Redis configs still use redis_fs_main: /data, migrate to /data/redis before deployment.
  • Grafana 12.4 changes data link merge behavior. This release moves key links into field overrides; review custom dashboards accordingly.

26 commits, 122 files changed, +2,116 / -2,215 lines (v4.1.0..v4.2.0, 2026-02-15 ~ 2026-02-28)

Checksums

24a90427a7e7351ca1a43a7d53289970  pigsty-v4.2.0.tgz
d980edf5eeb0419d4f1aa7feb0100e14  pigsty-pkg-v4.2.0.d12.aarch64.tgz
24bc237d841457fbdcc899e1d0a3f87e  pigsty-pkg-v4.2.0.d12.x86_64.tgz
e395b38685e2ecbe9c3a2850876d9b7b  pigsty-pkg-v4.2.0.d13.aarch64.tgz
c5c8776f9bead9f29528b26058801f83  pigsty-pkg-v4.2.0.d13.x86_64.tgz
28ea40434bd06135fc8adc0df1c8407d  pigsty-pkg-v4.2.0.el10.aarch64.tgz
58ad715ac20dc1717d1687daecfcf625  pigsty-pkg-v4.2.0.el10.x86_64.tgz
008f955439ea311581dd0ebcf5b8bd34  pigsty-pkg-v4.2.0.el8.aarch64.tgz
2acfd127a517b09f07540f808fe9547a  pigsty-pkg-v4.2.0.el8.x86_64.tgz
58e62a92f35291a40e3f05839a1b6bc4  pigsty-pkg-v4.2.0.el9.aarch64.tgz
d311bfdf5d5f60df5fe6cb3d4ced4f9c  pigsty-pkg-v4.2.0.el9.x86_64.tgz
c98972fe9226657ac1faa7b72a22498b  pigsty-pkg-v4.2.0.u22.aarch64.tgz
44a174ee9ba030ac1ea386cf0b85f6e7  pigsty-pkg-v4.2.0.u22.x86_64.tgz
143e404f4681c7d0bbd78ef7982cd652  pigsty-pkg-v4.2.0.u24.aarch64.tgz
00dfa86f477f3adff984906211ab3190  pigsty-pkg-v4.2.0.u24.x86_64.tgz

v4.2.1

A maintenance release that adds 3 new extensions.

Major Changes

  • New Extensions: pg_eviltransform is added to the GIS package group, pg_pinyin to the FTS group, and pg_qos to the admin group — all for PG 14–18.
  • PG13 Removed: All pgdg13, pgdg13-nonfree repo entries and PG13 package aliases (pg13-*) are removed from every platform variant (EL7/8/9/10, Debian 12/13, Ubuntu 22/24, both x86_64 and aarch64).
  • Config templates (fat.yml, pro.yml, dev.yml, el.yml, debian.yml) no longer reference PG13 packages or repos. Extension version comments are updated to reflect PG 14–18 coverage only.
  • Percona Repo: Origin URL updated from ppg-18.1 to ppg-18.3 to track the latest Percona PostgreSQL distribution.
  • Nginx Repo: Module tag for the Nginx upstream APT repo corrected from infra to nginx on Debian/Ubuntu platforms.
  • UV Venv Fix: roles/node/tasks/pkg.yml now checks for an existing virtualenv before running uv venv, preventing redundant re-creation and potential errors on re-provisioning.
  • Docker Image: less is added to the Pigsty Docker image base packages.
  • Demo Config: Default firewall rules in el.yml and debian.yml demo configs now include port 5432 for direct PostgreSQL access.

Compatibility Notes

PostgreSQL 13 reached its end of life on 2025-11-13. The PGDG YUM repository has archived and removed the pg13 / pg12 directories. If you install Pigsty on EL systems (even without using PG 13), repo access failures may cause installation or update errors.

You can either upgrade directly to Pigsty v4.2.1, or manually edit the repo_upstream_default variable in your corresponding OS file under roles/node_id/vars/ and remove the pg13 repo line.

Additionally, EL8 remains in the Pigsty compatible OS list, but starting from this release, offline packages for EL8 will no longer be published.

No other breaking API or configuration changes in this release.

7 commits, 84 files changed, +4,925 / -5,351 lines (v4.2.0..v4.2.1, 2026-03-04 ~ 2026-03-06)

PostgreSQL Package Updates

Package Old Version New Version Notes
timescaledb 2.25.1 2.25.2
vchord 1.1.0 1.1.1 Added clang build dependency, bug fixes
vchord_bm25 0.3.0-1 0.3.0-2 Fix the CI version injection issue
aggs_for_vecs 1.4.0 1.4.1
pg_search 0.21.9 0.21.12
pg_pinyin - 0.0.2 New extension
pg_eviltransform - 0.0.2 New extension
pg_qos - 1.0.0 New extension, QoS resource governance

Infrastructure Package Updates

Name Old Version New Version Notes
asciinema 3.1.0 3.2.0
grafana-infinity-ds 3.7.2 3.7.3
victoria-metrics 1.136.0 1.137.0
victoria-metrics-cluster 1.136.0 1.137.0
vmutils 1.136.0 1.137.0
hugo 0.155.3 0.157.0
opencode 1.2.15 1.2.17
rustfs 1.0.0-alpha.83 1.0.0-alpha.85
seaweedfs 4.13 4.15
tigerbeetle 0.16.74 0.16.75
uv 0.10.4 0.10.8
codex 0.105.0 0.110.0
claude 2.1.59 2.1.68
xray - 26.2.6 New
gost - 2.12.0 New
sabiql - 1.6.2 New
agentsview - 0.10.0 New

Checksums

262b7671424a38b208872582fe835ef8  pigsty-v4.2.1.tgz
62edcca1d1e572a247be018e1c26eda8  pigsty-pkg-v4.2.1.d12.aarch64.tgz
1d55367e2fd9106e6f18b7ee112be736  pigsty-pkg-v4.2.1.d12.x86_64.tgz
f122b1e5ba8a7ae8e3dc6e6dd53eba65  pigsty-pkg-v4.2.1.d13.aarch64.tgz
617a76bfc8df8766e78abf24339152eb  pigsty-pkg-v4.2.1.d13.x86_64.tgz
908509b350403ad1a4a27a88795fee06  pigsty-pkg-v4.2.1.el10.aarch64.tgz
70cb4afd90ed7aea6ab43a264f8eb4a8  pigsty-pkg-v4.2.1.el10.x86_64.tgz
98fbd67334f5c674b12e6af81ef76923  pigsty-pkg-v4.2.1.el9.aarch64.tgz
687fa741ccd9dcf611a2aa964bcf1de8  pigsty-pkg-v4.2.1.el9.x86_64.tgz
a2a30f4b1146b3e79be91d5be57615b6  pigsty-pkg-v4.2.1.u22.aarch64.tgz
7a1f571bd8526106775c175ba728eee1  pigsty-pkg-v4.2.1.u22.x86_64.tgz
a5574071bac1955798265f71ad73c3d4  pigsty-pkg-v4.2.1.u24.aarch64.tgz
59a7632c650a3c034f1fe6cd589d7ab5  pigsty-pkg-v4.2.1.u24.x86_64.tgz

1.11 - Pigsty v4.1: Speed Is the Moat

Originally published on VONNG.

GitHub Release | Release Note

If there is one takeaway from this release, it is that speed matters. On February 12, 2026, the PostgreSQL community released 18.2 / 17.8 / 16.12 / 15.16 / 14.21 on the regular minor cadence. As far as I could tell, the teams with production-grade support ready on the same day included AWS RDS, EDB, and Pigsty.

For an independent open-source project to keep pace with the world’s largest cloud vendor and a long-standing PostgreSQL leader – that is the story I hope v4.1 can tell.


Why Speed Matters So Much

After years of building a database distribution, one lesson keeps coming back: what users need most is not more features – it is confidence that the project will be there when it counts.

Where does that confidence come from? Less from feature lists, and more from showing up reliably at the moments that matter. PostgreSQL minor releases carry bug fixes, stability improvements, and security patches. They are not optional upgrades. Every day of delay is another day users remain exposed.

In practice, many distributions follow a well-known pattern: upstream ships, internal testing begins, packaging takes a while, and a couple of months later a blog post announces support for the latest version. By that point, users who needed the update have often already upgraded on their own. “Support” can end up feeling more like a formality than meaningful protection.

The experience I would love to provide is the opposite: follow-up so prompt that users never have to worry about it. PostgreSQL ships a new release, you reach for Pigsty, and it is already there. That is the standard a distribution should aspire to.

So the theme of v4.1 is not “more features.” It is about turning fast, reliable delivery into a repeatable capability – not a one-time heroic sprint, but a steady engineering discipline.


Not Just PostgreSQL: OS Minors Move Together

Being fast is one thing; being fast and correct is another. This round covers more than PostgreSQL minor upgrades – we also advanced the Linux distro minor baselines:

  • EL: 9.6/10.0 -> 9.7/10.1
  • Debian: 12.12/13.1 -> 12.13/13.3

We prepared offline packages for the latest minor versions across 14 mainstream Linux distros.

One important note to keep in mind:

Offline packages for EL 9.7 / 10.1 are NOT compatible with EL 9.6 / 10.0.

Many users deploy in intranet or fully air-gapped environments. If package versions do not match, online installation is the safe fallback.


Pig Agent-Native CLI: Letting The Tool Speak for Itself

Here is a practical example: imagine asking Claude Code to install PostgreSQL 18 plus extensions on three machines. When it calls pig, you do not need to craft prompts explaining how pig works – pig can describe itself to the agent directly. That is the idea behind Agent-Native design.

Traditional CLI tools are built for a human sitting at a terminal: colored output, formatted tables, progress bars. All great for people, but not ideal for agents. What agents really need are three things:

  • What the tool can do: capabilities described explicitly, rather than requiring the agent to guess or parse documentation.
  • What it did: execution results returned as structured JSON/YAML, not free-form text that requires regex parsing.
  • What context it sees: environment information that is programmatically discoverable and transferable.

These principles sound straightforward, but applying them properly meant revisiting every subcommand. In pig 1.1.0, JSON/YAML output is no longer an afterthought; it is a first-class interface so that every operation can be invoked and parsed reliably by machines.

In the spirit of transparency: I proposed the concept and participated in design reviews, but the bulk of the implementation was carried out with the help of Codex and Claude Code. I handled the final review and acceptance. This is also Pigsty’s first truly AI-native project.


AI Coding: Less About Writing Code, More About Sweeping Blind Spots

During v4.1, I spent a good deal of time on pig and pg_exporter, leaning heavily on AI coding tools for review – mainly Claude Code and Codex 5.3 Extra High.

The real value is not that “AI is magical.” It is something more mundane but genuinely useful: blind-spot sweeping.

In mature systems, the most dangerous bugs are rarely obvious logic failures. The tricky ones are details that look fine, run fine, and only break at specific boundaries. For example, a metric unit that differs between PG17 and PG18, or an io_method version guard written as >= 17 when it should be >= 18.

We all miss things like these – our eyes tend to glide over code that “looks right.” AI tooling is surprisingly good at catching them. It will methodically work through every line, especially when given targeted prompts like “verify version guards.”

In this cycle, that kind of sweep surfaced and fixed roughly 10 to 20 additional issues. Each one is small on its own, but the cumulative effect is something users can feel.

A special thank you to community contributor @l2dy for many thoughtful issues that helped us close a batch of dashboard and config edge cases. This is how open-source quality compounds – through people who care about the details.


Firewall Defaults: One Extra Command Is Better Than a Silent Risk

A small but important change: in v4.0, the default firewall mode was set to none, meaning “do not touch your firewall.” The intention was reasonable, but user feedback made it clear this was not the right call.

EL9 enables firewalld by default, and many users are not fully aware of their current firewall state. When Pigsty takes the hands-off approach, users tend to assume everything is fine – only to discover later that intra-network traffic is blocked, spending hours debugging mismatched rules. That experience is worse than a bit of upfront configuration.

So in v4.1, the default returns to zone, with a straightforward policy:

  • Trust private network CIDRs by default.
  • On public networks, open only 22 (SSH), 80 (HTTP), and 443 (HTTPS).
  • Database port 5432 is no longer exposed publicly by default.

If you need public database access, you can add it explicitly. It may mean one extra command in some cases, but when it comes to security defaults, we believe a conservative approach is the safer choice.


Seven New Extensions, Now 451 in Total

Every release brings updates to the extension ecosystem. This time we added 7, bringing total support to 451. A few highlights:

  • pg_track_optimizer 0.9.1: automatic index tracking and optimization recommendations.
  • nominatim_fdw 1.1.0: OpenStreetMap geocoding FDW, useful for GIS workloads.
  • pg_utl_smtp 1.0.0: send email directly from PostgreSQL, familiar to Oracle migration users.
  • pg_strict 1.0.2: strict mode guardrails to avoid unqualified UPDATE/DELETE.

Meanwhile, TimescaleDB moved to 2.25.0, Citus 14.0.0 landed, and Postgres Anonymizer reached 3.0 – all meaningful updates in their respective domains.


Other Notable Changes

Here are a few more changes worth highlighting:

  • Autovacuum thresholds tuned: raised autovacuum_vacuum_threshold from 50 to 500 and analyze_threshold from 50 to 250 in oltp/crit/tiny. This reduces noisy vacuum/analyze churn for many small tables (common in multi-tenant systems).
  • FD limit chain unified: fixed hierarchy between fs.nr_open and LimitNOFILE, unified at 8M to avoid high-concurrency FD exhaustion caused by inconsistent kernel/systemd settings.
  • checkpoint_completion_target: increased from 0.90 to 0.95 for smoother IO distribution and less checkpoint jitter.
  • Vibe defaults adjusted: Jupyter is now off by default (since most users do not need it), and Claude Code is managed consistently via npm packages.
  • infra-rm refactor: uninstall flow now includes segmented deregister cleanup instead of one-shot removal, so cleanup scope and order are easier to control.
  • New Mattermost app template: one-click deployment with database, storage, and reverse proxy wiring.

Closing

v4.1 is not a big-bang release. There is no architecture rewrite, no dramatic new module. But it demonstrates something we think matters: day-zero production-grade support is not a lucky sprint – it can be a repeatable engineering capability.

Earlier I mentioned that users need confidence. That kind of trust is not built in a single moment. It is earned with every minor release, every security patch, every time you show up on schedule. v4.1 is one more step in that direction. Below are the full commit notes and technical details.


v4.1.0 Commit Note

curl https://pigsty.io/get | bash -s v4.1.0

72 commits, 252 files changed, +5,744 / -5,015 lines (v4.0.0..v4.1.0, 2026-02-02 ~ 2026-02-13)

Highlights

  • Added 7 new extensions, total support reaches 451.
  • pig moved to an Agent-Native CLI (1.0.0 -> 1.1.0) with explicit context and JSON/YAML outputs.
  • Unified PostgreSQL/OS major/minor upgrade workflows.
  • pg_exporter upgraded to v1.2.0 (1.1.2 -> 1.2.0) with PG17/18 metric and unit fixes.
  • Default firewall policy tightened: node_firewall_mode=zone, node_firewall_public_port=[22,80,443].
  • PostgreSQL minor updates: 18.2, 17.8, 16.12, 15.16, 14.21.
  • Default EL minors bumped to 9.7 / 10.1, Debian minors to 12.13 / 13.3.
  • New one-click Mattermost app template with optional PGFS/JuiceFS.
  • Refactored infra-rm with segmented deregister cleanup.
  • Tuned autovacuum defaults and NOFILE chain consistency.

Version Updates

  • Pigsty: v4.0.0 -> v4.1.0
  • pig CLI: 1.0.0 -> 1.1.0
  • pg_exporter: 1.1.2 -> 1.2.0
  • Default EL minors: 9.6/10.0 -> 9.7/10.1
  • Default Debian minors: 12.12/13.1 -> 12.13/13.3

Extension Updates

  • RPM Changelog 2026-02-12
  • DEB Changelog 2026-02-12
  • timescaledb 2.24.0 -> 2.25.0
  • pg_search 0.21.4 -> 0.21.7
  • pgmq 1.9.0 -> 1.10.0
  • pg_textsearch 0.4.0 -> 0.5.0
  • pljs 1.0.4 -> 1.0.5
  • pg_track_optimizer 0.9.1 (new)
  • nominatim_fdw 1.1.0 (new)
  • pg_utl_smtp 1.0.0 (new)
  • pg_strict 1.0.2 (new)
  • pgmb 1.0.0 (new)
  • pg_pwhash (new support)
  • informix_fdw (new support)

API Changes

  • Corrected io_method / io_workers template guard from pg_version >= 17 to pg_version >= 18.
  • Fixed PG18 guards for idle_replication_slot_timeout / initdb --no-data-checksums.
  • Broadened maintenance_io_concurrency effective range to PG13+.
  • Raised autovacuum thresholds for oltp/crit/tiny/olap profiles.
  • Increased default checkpoint_completion_target from 0.90 to 0.95.
  • Added fs.nr_open: 8388608 into defaults and aligned NOFILE chain.
  • Changed firewall defaults: node_firewall_mode=zone, public ports [22,80,443].
  • Added validation support for pg_databases[*].parameters and pg_hba_rules[*].order.
  • Added segmented tags in infra-rm.yml: deregister, config, env.
  • Updated VIBE defaults and npm package set.
  • PgBouncer alias cleanup: pool_size_reserve -> pool_reserve, pool_max_db_conn -> pool_connlimit.

Compatibility Fixes (Grouped)

  • Redis replicaof guard and systemd stop behavior.
  • pg_migration identifier qualification, quoting, and logging safety.
  • pgsql role handler restart target and variable usage fixes.
  • blackbox cleanup naming and pgAdmin pgpass format fix.
  • Non-blocking pg_exporter startup.
  • VIP parsing simplification (default mask 24).
  • MinIO health-check retry bump (3 -> 5).
  • Hostname setup switched to Ansible hostname module.
  • .env normalization to KEY=VALUE in selected app templates.
  • pg_crontab syntax fix in pigsty.yml.
  • ETCD TLS/mTLS docs clarification.
  • repo-add, Debian CN mirror compatibility, and Python 3 compatibility fixes.
  • redis-exporter credential permission hardening.
  • Sensitive credential logs masked in pgsql-user.yml.
  • pg_monitor Victoria registration gate fixes.
  • Cluster-scoped backup cleanup in pg_remove.

Selected Commits

7410de401 v4.1.0 release
fa31213ce conf(node): default firewall to zone with single-node 5432 override
bb8382c58 update default extension list to 451
770d01959 hide user credential in pgsql-user playbook
7219a896c pg_monitor: fix victoria registration gate conditions
7005617f1 pgsql: drop legacy pgbouncer pool parameter aliases
74c59aabe grafana: fix dashboard links, descriptions, and overrides
36c95c749 fix(cli): restore repo-add execution and HBA validation failure propagation
6f2576fd0 fix(node): set default fs.nr_open via node_sysctl_params
26e108788 fix(monitor): correct unit for time metrics scaled by pg_exporter
d439464b2 pgsql: fix pg_version guards for PG18-only settings
cb52375ac bump checkpoint_completion_target from 0.90 to 0.95
c402f0e6d fix: correct io_method/io_workers version guard from PG17 to PG18
3bf676546 vibe: disable jupyter by default and install claude-code via npm_packages
613c4efa9 fix: set fs.nr_open in tuned profiles and reduce LimitNOFILE to 8M
4cc68ed61 refine infra removal playbook
318d85e6e simplify VIP parsing and make pg_exporter non-blocking
4bff01100 fix redis replicaof guard and systemd stop
38445b68d minio: increase health check retries
a237e6c99 tune autovacuum threshold to reduce small table vacuum frequency

For the full 72-commit list, see the GitHub release page.

Thanks

  • Thanks to @l2dy for valuable suggestions and issues.

Checksums

8bc75e8df0e3830931f2ddab71b89630  pigsty-v4.1.0.tgz
da10de99d819421630f430d01bc9de62  pigsty-pkg-v4.1.0.d12.aarch64.tgz
e1f2ed2da0d6b8c360f9fa2faaa7e175  pigsty-pkg-v4.1.0.d12.x86_64.tgz
382bb38a81c138b1b3e7c194211c2138  pigsty-pkg-v4.1.0.d13.aarch64.tgz
13ceaa728901cc4202687f03d25f1479  pigsty-pkg-v4.1.0.d13.x86_64.tgz
92d061de4d495d05d42f91e4283e7502  pigsty-pkg-v4.1.0.el10.aarch64.tgz
be629ea91adf86bbd7e1c59b659d0069  pigsty-pkg-v4.1.0.el10.x86_64.tgz
c14be706119ba33dd06c71dda6c02298  pigsty-pkg-v4.1.0.el8.aarch64.tgz
0c8b6952ffc00e3b169896129ea39184  pigsty-pkg-v4.1.0.el8.x86_64.tgz
cfcc63b9ecc525165674f58f9365aa19  pigsty-pkg-v4.1.0.el9.aarch64.tgz
34f733080bfa9c8515d1573c35f3e870  pigsty-pkg-v4.1.0.el9.x86_64.tgz
ad52ce9bf25e4d834e55873b3f9ada51  pigsty-pkg-v4.1.0.u22.aarch64.tgz
300b2185c61a03ea7733248e526f3342  pigsty-pkg-v4.1.0.u22.x86_64.tgz
2e561e6ae9abb14796872059d2f694a8  pigsty-pkg-v4.1.0.u24.aarch64.tgz
c462bb4cb2359e771ffcad006888fbd4  pigsty-pkg-v4.1.0.u24.x86_64.tgz

1.12 - The Agent Moat: Runtime

Originally published on VONNG.

3 AM. Database alerts are blowing up.

You throw the alert info at a “top-tier” DBA Agent. It’s well-read — knows the PostgreSQL docs inside out, writes beautiful diagnostic SQL, can recite every kernel parameter from memory. It freezes: What’s the cluster topology? Where are the primary and replicas? How do I check the dashboards? Where are the logs? How was the last similar incident resolved? What tool do I use to do what?

It knows nothing.

Meanwhile, the agent next door — running a mediocre model but deeply wired into the full ops environment — has already identified the root cause, completed the failover, and filed the post-mortem.

The principle is simple: a mediocre local who knows the terrain beats a genius dropped into unfamiliar territory. That’s home court advantage. Intelligence without context is idle. An agent without a runtime is vapor.


OtterTune: A $12M Lesson

In 2020, CMU’s database rockstar professor Andy Pavlo and his students founded OtterTune — AI-powered database auto-tuning. Top-tier academic team, $12M in funding, targeting PostgreSQL and MySQL. Impressive pedigree.

The product pitch boiled down to: give me a connection string, and AI will tune your database.

In June 2024, OtterTune shut down. The stated reason was a failed acquisition. But in my view, the real problem was: what you can do with a connection string just isn’t worth much.

img

Through a connection string, you can see slow queries in pg_stat_statements, config parameters in pg_settings, stats from a few system views. Then what? Twiddle a few knobs, optimize a few queries. That’s it.

But real database operations go far beyond this. A connection string connects to one PostgreSQL instance, but in the real world you’re dealing with clusters — primaries, replicas, offline standbys, sync backups. Above clusters, there’s horizontal sharding. At the top level, hundreds of clusters belonging to different business units. Beyond the database itself, you need backup status, HA component health, connection pool metrics, host CPU/memory/disk/network metrics. All of this lives outside the connection string.

An agent with only a connection string is like someone trying to understand a room by peeking through the keyhole — extremely limited visibility. Worse: the things you can do through a connection string are exactly what a raw LLM already handles well. Ask Claude or GPT to look at a slow query and it gives solid optimization advice. If an LLM can do what you do out of the box, where’s your moat?

OtterTune’s fundamental mistake was a runtime problem: it tried to do ops without an operational environment. Optimizing an abstract, bare PostgreSQL — it had a powerful brain but no hands, no eyes, no body. Like asking Stephen Hawking to do gymnastics.

PS: I know they’ve started a second venture, again doing PostgreSQL tuning. Hope they get it right this time.


Manus: The Real Core Is the Sandbox

If OtterTune is the cautionary tale, Manus is the success story.

In March 2025, Manus appeared out of nowhere and became an instant phenomenon. Many people studied why it succeeded, focusing on its accumulated Markdown prompts or which LLM it uses.

Wrong target.

Manus’s real core isn’t the prompts or the model. It’s the VM sandbox — every user session runs in an isolated cloud Linux VM with a full filesystem, browser, shell, and code interpreter. The agent works inside this deterministic environment: reading/writing files, executing code, browsing the web, deploying apps.

Manus themselves said it clearly: “The power of Sandbox lies in its completeness.”

It’s this complete, deterministic sandbox that unleashes the model’s full capability. Without the sandbox, the same model is just a chatbot. With it, it becomes an agent that actually gets things done. And Manus has swapped underlying models multiple times — GPT to Claude — performance stayed solid throughout.

The recent viral hit OpenClaw proves the same point. It earned the “AI with hands” label not because the underlying model is superior, but because it deeply integrates with the host OS — filesystem, shell, browser, calendar, messaging apps all wired through CLI. Drop it into a blank cloud VM, stripped of those local hooks, and it’s just another chatbot.

Manus and OpenClaw validate the same thing: the LLM is the brain, but what really matters is the body.


Brain, Body, and Determinism

Let’s push the Manus insight one level deeper.

Biologically, intelligence requires three components: sensors (perceive the environment), decision-makers (process information), actuators (act on the environment). A creature with a brain but no body isn’t an intelligent agent — it’s a brain in a vat.

Agents are the same. The LLM is the decision-maker, but you also need sensors and actuators — i.e., observability and controllability. Together, these form the agent’s body. And for this body to function, there’s a prerequisite: determinism.

You can’t drop a brain into an unfamiliar environment and have it operate a weirdly-shaped robotic arm. The brain must “know” its body — which signals produce which actions, which feedback means which state. Brain and body need a stable, predictable protocol between them.

featured.webp

That’s the essence of a runtime: the agent’s deterministic body.

For a DBA Agent, a complete runtime means:

Sensors — full-stack observability. Not just what a connection string can see, but host metrics, connection pool stats, HA component heartbeats, backup progress, and internal database statistics — all organically fused, providing layered visibility from single instances to the entire data platform.

Actuators — full-stack controllability. Config changes, HA failover, backup/restore, rolling upgrades. Not calling someone else’s API, but directly shaping the infrastructure. If you’re just wrapping cloud vendor APIs, your agent is forever capped by the original author’s imagination.

Determinism — predictable behavior and auditable records. Same operation, same conditions, same result. Every step logged, every change reversible. Non-deterministic environments can’t produce deterministic outcomes.

img

Five years ago, when I started building PostgreSQL monitoring, I hit this exact problem: if you want the best monitoring system, you can’t rely on just a connection string. A connection string gets you something, but “something” is miles from “good.” To push observability to the limit, you must control the runtime — directly shape the infrastructure. That’s the pivotal moment that evolved Pigsty from a PostgreSQL monitoring project into a full-blown PostgreSQL distribution. What’s true for monitoring is true for management, and even more so for intelligence.

OtterTune had a brain but no body. The outcome was predetermined. Manus built a deterministic body (sandbox), and the brain’s power was finally unleashed.


A DBA Agent’s Body: Only Three Options

Let’s use a concrete scenario — the DBA Agent. A coding agent’s context is a code directory. What’s a DBA agent’s context?

What is a DBA agent’s body? Who can provide it?

Option 1: Cloud vendors. RDS, Cloud SQL, Azure Database — monitoring, alerting, backup, HA, all included. But it’s someone else’s body. Your agent can only move within the vendor’s sandbox. Ops knowledge accumulates on the vendor platform, locked in. Switch clouds and it’s back to zero. If you’re building an agent on top of cloud APIs like OtterTune did, your design ceiling is the cloud API’s ceiling. This isn’t a body — it’s a cage.

Option 2: Kubernetes. K8s Operators can theoretically provide automated ops capability. But K8s introduces massive unnecessary complexity for databases — storage orchestration, network policies, stateful management, CRD abstraction layers upon layers. An agent doing database ops on K8s needs to grok an order of magnitude more concepts than just managing the database directly. K8s abstraction layers create enormous impedance, pushing the agent further from what it actually manages — the database itself. This isn’t providing a body — it’s strapping on a bulky spacesuit.

Option 3: Pigsty. An open-source PostgreSQL distribution that provides a full-stack deterministic runtime directly on bare Linux. Complete observability covering host-to-database monitoring, production-grade HA with automated backup/restore, 444 extensions out of the box, entire infrastructure managed as IaC.

pigsty-arch

The difference between Pigsty and cloud database runtimes: it’s an open-source, free body that belongs to you. Every layer of the runtime is open — agents can directly read metrics, query logs, invoke standard ops interfaces. No black boxes. No walled gardens. Ops knowledge accumulates on your own infrastructure. Runs on any cloud, or from your laptop to your data center.

The difference between Pigsty and K8s: no unnecessary abstraction layers. The agent faces the database and OS directly. Short operation paths. High determinism. To use an analogy: cloud vendors are a rented theater — well-equipped but full of rules, expensive, and you can’t take the set pieces when you leave. K8s is an over-engineered theater where it takes three days just to learn how to turn on the lights. Pigsty is your own theater — well-equipped, clean layout, actors perform freely, and everything you build belongs to you.


Someone’s Already On Stage

The Tsinghua University database team started working on this in 2024. Their D-Bot project explores autonomous fault diagnosis, root cause analysis, and repair recommendations in a complete Pigsty ops environment. The choice itself is telling: not poking at a remote connection string, but working inside a full runtime with monitoring, tooling, a knowledge base, and operational interfaces.

Metrics and Datadbot

I contributed to this VLDB paper: D-Bot: Database Diagnosis System using Large Language Models

Academic research needs reproducible environments, and Infrastructure as Code naturally delivers this. Same config deployed a hundred times, identical environment every time. That’s exactly the determinism agents need. Meanwhile, I’m building a DBA Agent myself. Who understands a runtime better than the person who built it? On an open runtime, academic teams explore boundaries, infrastructure builders refine the core, community developers contribute ideas. An ecosystem is forming.

If you’re interested in DBA agents, Pigsty might be the best proving ground. It provides everything a PostgreSQL service needs in a real enterprise environment — full HA with PITR, and best-of-breed observability.


Dragons Come and Go, Territory Stays

Back to 3 AM.

Same alert, but this time the agent runs on a complete runtime — inside its own body. It sees the anomaly curve on the monitoring dashboard, pinpoints the root cause from logs, confirms cluster topology and primary/replica status, completes the failover via standard procedure, verifies post-failover health, and generates a post-mortem report. Fully automated. Fully auditable.

The model might be GPT, Claude, or some open-source model — doesn’t matter. The agent itself might just be a few simple Skills and a CLAUDE.md file — also doesn’t matter. The moat in the agent era isn’t a smarter brain; it’s a more deterministic body. Inside this deterministic body, a simple CLAUDE.md file is enough to make a mid-tier LLM perform at a mid-level DBA’s competence.

Database Needs Pyramid

OtterTune spent $12M proving: a brain without a body doesn’t work. Manus proved with a sandbox: give the brain a deterministic body, and it creates miracles. Dragons arrive one after another, each stronger than the last. But the local who’s been cultivating home turf for years keeps building deeper moats.

Dragons come and go. Territory stays. That’s the real moat of the agent era.

1.13 - Pigsty v4.0: Into the AI Era

Originally published on VONNG.

Pigsty v4.0 is here! This is a milestone release.

Pigsty is a batteries-included, open-source, local-first PostgreSQL distribution. It lets you spin up enterprise-grade PostgreSQL services without a dedicated DBA — monitoring, backup, HA, IaC, connection pooling, and 444 extensions out of the box.

v4.0 is a major architectural overhaul: 320 commits, ~400k lines changed (though 300k+ of that is monitoring dashboards). I’d call this version “Finished Software” — it’s reached a state I’m genuinely satisfied with.

v4.0 theme: More Open, More Efficient, More Secure, More Intelligent. Let’s dive in.


TL;DR


License Change: Back to Apache 2.0

Pigsty v4.0 switches from AGPLv3 back to the permissive Apache 2.0 license. For enterprise users, no more legal battles. ISVs can integrate freely. Want to build your own custom PG distro? Fork Pigsty and skip the yak shaving.

For the full rationale, see my separate post: From AGPL to Apache: Thoughts on Pigsty’s Relicensing.


Observability Overhaul: Victoria Stack FTW

The flagship change in v4: replacing Prometheus and Loki with the Victoria Stack, plus adding tracing.

VictoriaMetrics is the chad replacement for Prometheus. We ran it at scale at Tantan years ago — stunning results, fraction of the resources, multiple times the performance.

The trigger this time was Loki’s lackluster performance, and Promtail (its log collector) getting deprecated this year. I went with the current SOTA: VictoriaLogs + Vector, and threw in VMetrics + VTrace for good measure.

Results speak for themselves: querying a day’s worth of logs used to show a loading spinner; now VictoriaLogs returns instantly. We migrated all log collection to VictoriaLogs, designed a Prometheus-consistent label schema, and added log monitoring for every component. Each component now has Logs & Panels, plus brand new dashboards for Node Vector, Node Juice, and Claude Code.

arch.png

Architecture got simpler too: previously different components needed different Nginx endpoints. Now everything mounts on a single Nginx server. No more juggling domains and ports — one domain (or just IP) gives you Grafana, logs, metrics, and Alertmanager. Enterprise edition even auto-localizes to Chinese with translated metric titles, descriptions, and usage notes.

nginx.webp

Big picture: the current INFRA module is basically a Victoria distro — Metrics + Logs + Trace + Alert + unified UI. Add the OOTB Grafana and you’ve got an enterprise-grade observability platform.


Container Support: Docker Gang Rejoice

Docker support was the most requested feature — running Pigsty itself in containers. Previously doable but required manual param tweaking and systemd kung-fu. Now we ship official base images. Got Docker? One command and you’re up! (Assuming your Docker Hub access is… sorted.)

cd ~/pigsty/docker; make launch  # One-click single-node containerized Pigsty
docker-compose.webp

I wrestled with the image design: ship everything pre-installed, or a minimal deployable image? Went with the latter — based on Debian 13 official image, added systemd, ssh, sudo, and pigsty itself. Everything else happens during deploy phase. Base image is ~200 MB (vs 3 GB for the kitchen sink).

Post-deploy, you’re good to go: port 8080 for web, 2222 for ssh, 5432 for postgres. Works on Windows, macOS, Linux — quick and easy test drive.


PG 18 Ready: 444 Extensions Standing By

A core v4 goal: make PostgreSQL 18 production-ready as the default version. This release cycle, we added PG 18 support for major extensions: TimescaleDB, ParadeDB, Citus, DocumentDB, AGE.

To make this happen, we compiled ~226+ extension packages for 6 PG major versions across 14 Linux distros, bringing total available extensions to 444. Also fixed numerous missing extension combos in PGDG. Plus 10 brand new extensions:

Extension Version Description
pg_textsearch 0.4.0 Full-text search with BM25 ranking
pg_clickhouse 0.1.3 Query ClickHouse from PostgreSQL
pg_ai_query 0.1.1 AI-powered SQL query generation
etcd_fdw 0.0.0 etcd foreign data wrapper
pg_ttl_index 0.1.0 Auto-expire data with TTL indexes
pljs 1.0.4 PL/JS trusted procedural language
pg_retry 1.0.0 Transient error retry with exponential backoff
weighted_stats 1.0.0 High-perf weighted stats for sparse data
pg_enigma 0.5.0 Encrypted Postgres data types
pglinter 1.0.1 PostgreSQL SQL Linter

We also overhauled default PG param configs. Users can now configure the new io_method to leverage async I/O, and file_copy_method = clone is enabled for “instant database cloning” support. Every PG 17/18 param (and legacy ones) got a thorough review with updated best-practice defaults.

Oracle-compatible IvorySQL kernel and TDE-encrypted Percona kernel both ship with PG 18 support. MongoDB-compatible FerretDB (after switching to Microsoft’s DocumentDB version) also supports PG 18.

Bottom line: PG 18’s major extensions are locked and loaded, params fully optimized, metrics fully collected. PG 18 in Pigsty is battle-ready for the harshest production environments.


Security Hardening: Passwords, Firewall, SELinux

v4 went hard on security, checking boxes against compliance standards like China’s MLPS and SOC2. Highlights:

Random strong default passwords: Users kept deploying with default creds. Now configure -g auto-replaces all default passwords with random strong ones.

ETCD RBAC enabled: Previously global cert auth. Now each PG cluster gets its own etcd user/password. Admin nodes manage all clusters; regular DB nodes only manage their own cluster. No more cross-cluster interference.

SELinux rules optimized: Previously disabled by default. Now EL systems have proper security contexts configured, default permissive mode, enforce when ready.

Firewall support by default: Define public-facing ports and internal subnets. Even without cloud security groups, you can minimize exposure yourself (default: ssh 22, http 80, https 443, optionally pgsql 5432).

We also audited all user/file permission models, consolidated data under a unified directory (/data) for easy Docker mounts, split permissions by user groups, strict least-privilege principle.

These security policies are progressive: with random strong passwords generated, default config is already secure enough. Advanced options are there for enterprises to evaluate tradeoffs.


JUICE Module: Database as Filesystem

v4’s new JUICE module integrates JuiceFS, mounting object storage and PostgreSQL as a local filesystem. The killer feature: store both data and metadata in the same PG instance for consistent PITR of filesystem and database. Details in PGFS: Database as Filesystem.

This solves a real pain point: apps with both filesystem (knowledge base files) and database. DB PITR is easy; filesystem PITR is hard; keeping both consistent is a nightmare. Now you can store files in the database and get synchronized point-in-time rollback for the entire system.

This capability is clutch for Agents. Vibe Code on a mounted directory, all changes stored in the database in real-time. Unlike Git’s manual snapshots, you can instantly rollback to any historical point. Previously only high-end commercial CDP appliances had this — now Pigsty provides it free. PIGLET AI sandbox has this configured by default.

vibe.webp

VIBE Module: Claude Code Runtime

The VIBE module is for Vibe Coding — completely optional. Ships with Node.js, Claude Code, VS Code and Jupyter accessible from browser. Also uv python package manager, npm, golang, hugo, and other essential tools. China deployments auto-configure Python/Node mirror sources — fast installs, no GFW wrestling.

Best part: turnkey Claude Code environment, one command downloads and configures the latest version. One line of config to use CC + domestic GLM 4.7, various convenience shortcuts, Claude Code can YOLO in Sandbox mode. Includes a Grafana Dashboard for monitoring Claude Code — real-time visibility into what your Agent is doing and thinking. Even ships happy + tmux so you can voice-command CC from your phone.

claude-monitor.webp

VIBE module pairs with JUICE module — that’s exactly how PIGLET.RUN sandbox works: mount your code directory to the database via JuiceFS, leverage DB’s PITR capability to one-click rollback both filesystem and database to any point in time.

This module powers PIGLET.RUN and is the cloud dev environment I personally use. Post-install, you’ve got a complete cloud development environment — secure and fully equipped.


DBA Agent: Skills & CLI

VIBE isn’t just for coding. Its real purpose: foundation for the DBA Agent I’m building — install Claude Code with this module, and it can already do valuable work in a Pigsty environment. Database health checks, reports, query optimization — no sweat.

I previously wrote a PostgreSQL quick-start tutorial: install Pigsty, run Open Code calling GLM-4 model, let it play teacher. User feedback was wild. Some DBAs tried it and said “this thing is scary” — throw a health check task at it, zero extra config, performs remarkably well.

Of course, letting Agents go full YOLO in prod is too aggressive. Hard rules still need careful config: absolute no-go operations, mandatory human confirmation, permission boundaries. We’ve got a basic CLAUDE.md in the pigsty home directory telling CC what’s allowed and what’s not. Launch from that directory to enable it.

Pigsty has a unique advantage for DBA Agents: highly deterministic context and environment, clearly described and managed in code. From day one, Pigsty committed to IaC (Infrastructure as Code) + CLI — GUI only for monitoring, never for control.

Because we believe the endgame for programmatic, intelligent management is IaC + CLI. CC just needs to read pigsty.yml to understand what modules and components exist in your environment, how to access and use them.

A simple, AgentNative CLI is a force multiplier for both DBAs and DBA Agents. The pig v1.0 shipping with Pigsty v4 provides exactly this — wrapping complex commands and operation sequences into idiot-proof / Agent-friendly commands. More posts coming on this.


HA Optimization: RTO/RPO Deep Dive

Beyond AI4PG and PG4AI, v4 also levels up on core database service fundamentals. Detailed breakdown in PostgreSQL HA: The State of the Art.

Pigsty users have diverse scenarios: same-rack deployment, cross-DC disaster recovery, cross-continent architectures (200ms+ latency, high packet loss). These scenarios have completely different HA param requirements.

Previously we shared one tuned Patroni param set. Now we provide four pre-baked param templates for different scenarios.

rpo-mode-en.webp

Similarly, following Oracle’s data protection modes, we offer three typical RPO templates for users to trade off data consistency against performance/availability.

rto-mode-en.webp

Interestingly, when we deep-dived this topic, we found most Patroni-based HA solutions in the wild use default params — no one had systematically analyzed RTO composition. So I did quantitative analysis of RTO breakdown across failure paths, ensuring these param sets keep worst-case RTO under specified bounds. Theoretical analysis so users can run Patroni HA with peace of mind.

rto-chart-en.webp

Theoretical decomposition keeps RTO upper bounds at 30/45/90/150s for the four param sets


Instant Clone: Fork DBs & Instances in Milliseconds

HA isn’t the only improvement — PITR got significant upgrades too. See Git for Data: Instant Clone PG Databases. PostgreSQL 18 brings instant cloning — exactly what AI apps need: fast, cheap clones.

Prod databases can be hundreds of GB or even TB — you can’t test directly on them. Fork uses COW (Copy-on-Write), even massive databases clone in ~200ms. Coolest part: storage stays flat — two 100GB databases still only use 100GB total.

pg-meta:
  hosts:
    10.10.10.10: { pg_seq: 1, pg_role: primary }
  vars:
    pg_cluster: pg-meta
    pg_version: 18
    pg_databases:
      - { name: meta }                                           # source database
      - { name: meta_dev ,template: meta , strategy: FILE_COPY}  # bin/pgsql-db meta_dev

With XFS filesystem (mainstream Linux default), you get instance-level instant cloning too: fork a large instance instantly, zero extra storage, zero prod impact. Combined with classic cluster PITR, you can rapidly clone PostgreSQL at instance, database, and cluster levels, and rollback to any point within retention period.

To further lower the PITR barrier, we baked PITR into the pig CLI: run pig pitr, it handles everything automagically. Restore your database cluster in-place/incrementally/efficiently to your target point. Newbies and AI Agents alike can leverage this easily — that’s the bar we’re aiming for.


IaC Enhancements: More Fine-Grained Knobs

Previously Pigsty didn’t support deleting users or databases — delete ops are dangerous, involving complex SOPs for cleaning up dependent objects and permissions. But users genuinely needed this: complex resource configs got messy, wanted to nuke and restart. We implemented drop database and drop user. Don’t underestimate this — seemingly simple, actually very hard to do right: almost all cloud RDS services only support dropping “naked users”, any dependencies and the system just errors out.

v4 also revamped the IaC API design, adding and aligning params through PG 18. For example, user-level customization for the three role inheritance options: ADMIN, INHERIT, SET. You can specify extra Locale params for databases, use state for deleting or rebuilding databases/users, and manage Schemas and Extensions within databases.

HBA rule definitions now support an order field — explicitly specify priority order for each rule. Internal subnet definitions are also customizable now, consistent with default firewall policies. PG gets its own dedicated crontab list, separate from system-wide scheduled tasks.

Countless other refinements: injection protection on virtually all param slots, special handling for PG’s list params, etc. — won’t belabor the details. End result: IaC your way to customizing every PostgreSQL cluster detail. Databases, users, inheritance, permissions, HBA, services, extensions, schemas — one shot, spin up production-ready database clusters. This IaC config-as-code approach is natural and friendly for both DBAs and DBA Agents.


Vibe Coding IRL: Taste & Validation Are the Moat

Let’s talk engineering practice: 90%+ of Pigsty v4.0 code was written by Claude Code. I only handled three things: propose ideas, design APIs, validate results. Methodology in four phases:

Design: Play PM, discuss and generate design docs with AI. CC’s API design taste isn’t quite there yet — this part I do myself.

Implement: New session, have AI implement code. After completion, 10 rounds of self-reflection and revision, giving review feedback each round until satisfied.

Review: Another session, have AI run automated tests in VM sandbox.

Validate: Final manual testing.

Claude Code is like a brilliant but slightly domain-inexperienced genius intern. If your instincts are right and direction is correct, it nails the details. This senior-junior pair programming is highly efficient — I typically run three User Stories in parallel. CC codes blazingly fast; the bottleneck is me.

Usually after locking design, CC’s first-attempt success rate hits 90%+. The remaining 10% needs multiple iterations. Especially for domains like RDS with virtually no public documentation — requires tons of manual guidance to reach final satisfaction.

Two things Claude Code still struggles with: first, API design — still needs taste to gatekeep, CC only offers ideas and suggestions; second, validation efficiency — current bottleneck is manual validation speed (blocked on me) because smoke test SOPs are slow.

This gave me an insight: In the Agent coding era, design taste and validation capability are the real moats. Even with code open-sourced, most people lack both secondary development ability and QA capability — that’s the actual barrier. Code is getting “cheap,” but “getting the right thing right” remains expensive.

This reminds me of SQLite’s model: source code is public domain, but the core test suite TH3 is proprietary. With AI assistants, a super-individual can match a full team; external contributions actually slow things down. So Pigsty will take a similar path: Open Source, but not Open Collaboration — accepting Issues, feature requests, and feedback only, no more PRs.


Finished Software: Quality I’m Happy With

As mentioned in From AGPL to Apache: Thoughts on Pigsty’s Relicensing, I’d give v4.0 a solid 90/100. SOTA AI’s assessment is basically the same: on PostgreSQL service quality, free Pigsty already beats top-tier cloud RDS, reaching pinnacle level among open-source solutions.

So I figure it’s about there — that’s why I called v4.0 “Finished Software” at the top.

But “finished” isn’t “archived.” In software lifecycle terms, Finished means it’s good enough, stable enough, trustworthy enough for production. Like a quality blade — the edge is honed, now comes long-term use, maintenance, passing down. I’ll keep maintaining Pigsty — bug fixes, version tracking, extension packaging. With AI help, this barely takes time; one PG major version per year is fine. The remaining 10 points are left for ecosystem, product, and commercial services to grow.

And my energy can finally shift to that seed planted three years ago.


Entering the AI Era: Built for Agents

Three years ago, I wrote Database Needs Pyramid, listing Intelligent Autonomous Database as the ultimate goal. Back then it was just a vision. Today, it’s becoming real.

From day one, Pigsty committed to IaC + CLI, keeping GUI only for observation, not control. Many didn’t get it: why not build a pretty console?

Now the answer is clear — because we were waiting for Agents.

Agents don’t need to click buttons. They need to read configs, call APIs, execute commands. Pigsty’s architecture is native to programmatic management. While others are still figuring out how to make AI operate GUIs, Pigsty users can already have Claude Code directly read pigsty.yml, understand the entire infrastructure, and get to work.

This is what “entering the AI era” really means: not bolting AI features onto software, but making software a native habitat for AI.

For this, I’ve prepared two wings:

PIG — Originally just a package manager, repositioned in v1.0 as PostgreSQL ecosystem’s Agent Native CLI. Full lifecycle management of databases, connection pools, HA, backup, and access. It’s the Agent’s hands for operating PostgreSQL.

PIGLET.RUN — A PostgreSQL-centric Agent runtime. Lightweight Pigsty sub-distro where users just talk and generate complete, database-backed complex applications. It’s the soil where Agents thrive.

And Pigsty itself aims to be the infrastructure foundation that keeps you deterministic in the AI era — bold enough to let Agents go hands-free, confident enough to one-click rollback to yesterday when they screw up.

Describe it with IaC, understand it with observability, constrain it with permissions, correct it with PITR. This isn’t “yet another PostgreSQL install script” — it’s a complete engineering methodology for keeping complex systems in a cage.


Data is the lifeblood of systems. Databases are the hearts guarding that lifeblood.

Agents are becoming a new form of life. They think, they act, they err, they learn.

And every life needs a reliable heart.

Pigsty v4.0, built for this era.

Welcome to the game.


Pigsty v4.0.0 ReleaseNote

Quick Start

curl https://pigsty.io/get | bash -s v4.0.0

318 commits, 604 files changed, +118,655 / -327,552 lines

Release Date: 2025-12-25 | GitHub | Docs EN | Docs CN


Highlights

  • Observability Revolution: Prometheus → VictoriaMetrics (10x perf), Loki+Promtail → VictoriaLogs+Vector
  • Security Hardening: Auto-generated passwords, etcd RBAC, firewall/SELinux modes, permission tightening, Nginx Basic Auth
  • Docker Support: Run Pigsty in Docker containers with full systemd support
  • New Module: JUICE - Mount PostgreSQL as filesystem with PITR recovery
  • New Module: VIBE - AI coding sandbox with Claude Code, JupyterLab, VS Code Server
  • Database Management: pg_databases state, instant clone with strategy
  • PITR & Fork: /pg/bin/pg-fork for instant CoW cloning, enhanced pg-pitr
  • HA Enhancement: pg_rto_plan with 4 RTO presets, pg_crontab scheduled tasks
  • Multi-Cloud Terraform: AWS, Azure, GCP, Hetzner, DigitalOcean, Linode, Vultr, TencentCloud
  • License Change: AGPL-3.0 → Apache-2.0


Infrastructure Package Updates

MinIO now uses pgsty/minio fork RPM/DEB.

Package Version Package Version
victoria-metrics 1.134.0 victoria-logs 1.43.1
vector 0.52.0 grafana 12.3.1
alertmanager 0.30.1 etcd 3.6.7
duckdb 1.4.4 pg_exporter 1.1.2
pgbackrest_exporter 0.22.0 blackbox_exporter 0.28.0
node_exporter 1.10.2 minio 20251203
pig 1.0.0 claude 2.1.19
opencode 1.1.34 uv 0.9.26
asciinema 3.1.0 prometheus 3.9.1
pushgateway 1.11.2 juicefs 1.4.0
code-server 4.100.2 caddy 2.10.2
hugo 0.154.5 cloudflared 2026.1.1
headscale 0.27.1

Docker Support

Pigsty now supports running in Docker containers with full systemd support, working on both macOS (Docker Desktop) and Linux.

Quick Start:

cd ~/pigsty/docker; make launch    # = make up config deploy

New Modules

v4.0.0 adds two optional modules that don’t affect core Pigsty functionality:

JUICE Module: JuiceFS Distributed Filesystem

  • Uses PostgreSQL as metadata engine, supports PITR recovery for filesystem
  • Multiple storage backends: PostgreSQL large objects, MinIO, S3
  • Multi-instance deployment with Prometheus metrics per instance
  • New node-juice dashboard for JuiceFS monitoring
  • New juice.yml playbook for deployment
  • Parameters: juice_cache, juice_instances

VIBE Module: AI Coding Sandbox (Code-Server + JupyterLab + Node.js + Claude Code)

  • Code-Server: VS Code in browser

    • Deploy Code-Server with Nginx reverse proxy for HTTPS
    • Supports Open VSX and Microsoft extension galleries
    • Set code_enabled: false to disable
    • Parameters: code_enabled, code_port, code_data, code_password, code_gallery
  • JupyterLab: Interactive computing environment

    • Deploy JupyterLab with Nginx reverse proxy for HTTPS
    • Python venv configuration for data science libraries
    • Set jupyter_enabled: false to disable
    • Parameters: jupyter_enabled, jupyter_port, jupyter_data, jupyter_password, jupyter_venv
  • Node.js: JavaScript runtime environment

    • Install Node.js with npm package manager
    • Auto-configure China npm mirror when region=china
    • Set nodejs_enabled: false to disable
    • Parameters: nodejs_enabled, nodejs_registry
  • Claude Code: AI coding assistant CLI configuration

    • Configure Claude Code CLI, skip onboarding
    • Built-in OpenTelemetry config sending metrics/logs to Victoria stack
    • New claude-code dashboard for usage monitoring
    • Set claude_enabled: false to disable
    • Parameters: claude_enabled, claude_env
  • New vibe.yml playbook for full VIBE deployment

  • Use conf/vibe.yml template for quick AI coding sandbox setup

  • Common parameter: vibe_data (default /fs) for workspace directory


PostgreSQL Extension Updates

Major extensions add PG 18 support: age, citus, documentdb, pg_search, timescaledb, pg_bulkload, rum, etc.

New Extensions:

Major Updates:

Extension Old New Notes
timescaledb 2.23.x 2.24.0 +PG18
pg_search 0.19.x 0.21.4 ParadeDB, +PG18
citus 13.2.0 14.0.0 Distributed PG, +PG18
documentdb 0.106 0.109 MongoDB compat, +PG18
age 1.5.0 1.7.0 Graph DB, +PG18
pg_duckdb 1.1.0 1.1.1 DuckDB integration
vchord 0.5.3 1.0.0 VectorChord
vchord_bm25 0.2.2 0.3.0 BM25 full-text search
pg_biscuit 1.0 2.2.2 Biscuit auth
pg_anon 2.4.1 2.5.1 Data anonymization
wrappers 0.5.6 0.5.7 Supabase FDW
pg_vectorize 0.25.0 0.26.0 Vectorization
pg_session_jwt 0.3.3 0.4.0 JWT session
pg_partman 5.3.x 5.4.0 Partition mgmt, PGDG
pgmq 1.8.0 1.9.0 Message queue
pg_bulkload 3.1.22 3.1.23 Bulk load, +PG18
pg_timeseries 0.1.7 0.2.0 Time series
pg_convert 0.0.4 0.1.0 Type conversion
pg_clickhouse 0.1.2 0.1.3 ClickHouse FDW

pgBackRest updated to 2.58 with HTTP support.


Observability

  • VictoriaMetrics replaces Prometheus — several times the performance
  • VictoriaLogs + Vector replaces Promtail + Loki for log collection
  • Unified log format for all components, PG logs use UTC timestamp
  • PostgreSQL log rotation changed to weekly truncated rotation mode
  • Recording temp file allocations over 1MB in PG logs
  • Added Vector parsing configs for Nginx/Syslog/PG CSV/Pgbackrest/Grafana/Redis/etcd/MinIO
  • Datasource registration runs on all Infra nodes, auto-registered in Grafana
  • New grafana_pgurl parameter for using PG as Grafana backend storage
  • New grafana_view_password parameter for Grafana Meta datasource password
  • pgbackrest_exporter default cache interval reduced from 600s to 120s
  • grafana_clean default changed from true to false
  • New pg_timeline collector for real-time timeline metrics
  • New pg:ixact_ratio metric for idle transaction ratio monitoring
  • pg_exporter updated to 1.1.2 with pg_timeline collector
  • Added slot name coalesce for pg_recv metrics collector
  • Blackbox ping monitoring support enabled
  • New node-vector dashboard for Vector monitoring
  • New node-juice dashboard for JuiceFS monitoring
  • New claude-code dashboard for Claude Code usage monitoring
  • PGSQL Cluster/Instance dashboards add version banner
  • All dashboards use compact JSON format, reducing file size

Interface Improvements

Playbook Rename:

  • install.ymldeploy.yml for better semantics
  • New vibe.yml playbook for VIBE AI coding sandbox

pg_databases Improvements:

  • Database removal: use state field (create, absent, recreate)
  • Database cloning: use strategy parameter for clone method
  • Support newer locale params: locale_provider, icu_locale, icu_rules
  • Support is_template to mark template databases
  • Added type checks to prevent character parameter injection
  • Allow state: absent in extension to remove extensions

pg_users Improvements:

  • New admin parameter with ADMIN OPTION for re-granting
  • New set and inherit options for user role attributes

pg_hba Improvements:

  • Support order field for HBA rule priority
  • Support IPv6 localhost access
  • Allow specifying trusted intranet via node_firewall_intranet

Other Improvements:

  • Default privileges for Supabase roles
  • node_crontab auto-restores original crontab on node-rm
  • New infra_extra_services for homepage service entries

Parameter Optimization

I/O Parameters

  • pg_io_method: auto, sync, worker, io_uring options, default worker
  • maintenance_io_concurrency set to 100 for SSD
  • effective_io_concurrency reduced from 1000 to 200
  • file_copy_method set to clone for PG18 instant database cloning

Replication & Logging

  • idle_replication_slot_timeout: default 7d, crit template 3d
  • log_lock_failures: enabled for oltp, crit templates
  • track_cost_delay_timing: enabled for olap, crit templates
  • log_connections: auth logs for oltp/olap, full logs for crit

HA Parameters

  • New pg_rto_plan integrating Patroni & HAProxy RTO config
    • fast: Fastest failover (~15s), for high availability requirements
    • norm: Standard mode (~30s), balanced (default)
    • safe: Safe mode (~60s), reduced false positives
    • wide: Relaxed mode (~120s), for geo-distributed deployments
  • pg_crontab: scheduled tasks for postgres dbsu
  • For PG17+, explicitly disable checksums if pg_checksums is off
  • Crit template enables Patroni strict sync mode

Backup & Recovery

  • PITR default archive_mode changed to preserve
  • pg-pitr supports pre-recovery backup

Other

  • Fixed duckdb.allow_community_extensions always active issue
  • pg_hba and pgbouncer_hba now support IPv6 localhost

Architecture Improvements

Directories & Portal:

  • Fixed /infra symlink pointing to /data/infra on Infra nodes
  • Infra data defaults to /data/infra for container convenience
  • Local repo at /data/nginx/pigsty, /www symlinks to /data/nginx
  • DNS records moved to /infra/hosts, solving Ansible SELinux race
  • Default homepage domain renamed from h.pigsty to i.pigsty

Scripts:

  • New /pg/bin/pg-fork for instant CoW replica creation
  • Enhanced /pg/bin/pg-pitr for instance-level PITR with pre-backup
  • New /pg/bin/pg-drop-role for safe user deletion
  • New bin/pgsql-ext for extension installation
  • Restored pg-vacuum and pg-repack scripts

New Playbooks:

  • juice.yml: Deploy JuiceFS instances
  • vibe.yml: Deploy VIBE AI sandbox

Module Improvements:

  • Explicit cron/cronie package installation for minimal system
  • UV Python manager moved from infra to node module
  • pg_remove/pg_pitr etcd metadata removal runs on etcd cluster
  • Simu template simplified from 36 to 20 nodes
  • Removed PGDG sysupdate repo and llvmjit packages on EL systems
  • Using full OS version for EPEL 10 / PGDG 9/10 repos
  • Allow meta parameter in repo definitions
  • Vagrant libvirt templates default to 128GB disk with xfs
  • Ensure pgbouncer doesn’t modify 0.0.0.0 to *
  • New 10-node and Citus Vagrant templates
  • Restored EL7 compatibility

System Tuning:

  • Tuned systemd service NOFILE limits based on workload
  • Fixed tuned profile activation by restarting tuned service
  • Added runtime directory for PostgreSQL systemd service
  • Fixed ip_local_port_range start/end value parity alignment

Multi-Cloud:

  • Terraform: AWS, Azure, GCP, Hetzner, DigitalOcean, Linode, Vultr, TencentCloud

Security Improvements

Password Management:

  • configure -g for auto-generating strong random passwords
  • Changed MinIO default password to avoid well-known defaults

Firewall & SELinux:

  • Replaced node_disable_firewall with node_firewall_mode
  • Replaced node_disable_selinux with node_selinux_mode
  • Configured correct SELinux contexts for HAProxy, Nginx, DNSMasq, Redis

Access Control:

  • Enabled etcd RBAC, each cluster can only manage its own PG cluster
  • etcd root password stored in /etc/etcd/etcd.pass, admin-readable only
  • Added admin_ip to Patroni API whitelist
  • Always create admin system group, patronictl restricted to admin group
  • New node_admin_sudo parameter for admin sudo mode
  • Revoked script ownership from non-root users

Certificates & Auth:

  • Nginx Basic Auth support for optional HTTP authentication
  • Fixed ownca certificate validity for Chrome recognition
  • New vip_auth_pass parameter for VRRP authentication

Other:

  • Fixed ansible copy content empty field errors
  • Fixed pg_pitr race conditions during Patroni cluster recovery
  • Protected files/pki/ca directory with mode 0700

Bug Fixes

Issue Resolution
ownca certificate Chrome compatibility Set ownca_not_after correctly
Vector 0.52 syslog_raw parsing Adapted to new Vector format
pg_pitr multi-replica clonefrom timing Fixed Patroni recovery race condition
Ansible SELinux dnsmasq race condition Moved DNS records to /infra/hosts
EL9 aarch64 patroni & llvmjit Hotfix for ARM64 compatibility
Debian groupadd path Fixed user group add path
Empty sudoers file generation Prevented empty sudoers config
pgbouncer pid path Use /run/postgresql
duckdb.allow_community_extensions Fixed DuckDB extension config
pg_partman EL8 upstream break Hidden pg_partman on EL8
HAProxy service template variable path Fixed variable reference
Redis remove task variable name Fixed redis_seq to redis_node
MinIO reload handler ineffective Removed ineffective handler
vmetrics_port default value Corrected to 8428
pg-failover-callback script Handle all Patroni callback events
pg-vacuum transaction block Fixed transaction handling
pg_sub_16 parallel logical worker Added PG16+ parallel replication
FerretDB cert SAN and restart policy Fixed cert config and restart
Polar Exporter metric types Corrected metric type definitions
proxy_env package install missing Fixed proxy env propagation
patroni_method=remove service issue Fixed postgres service in remove mode
Docker default data directory Updated to correct path
EL10 cache compatibility Fixed EL10 cache issues
etcd/MinIO removal cleanup incomplete Fixed systemd service and DNS cleanup
IvorySql 18 file_copy_method Fixed incompatibility with clone
tuned profile activation Fixed by restarting tuned service

Parameter Changes

New Parameters

Parameter Type Default Description
node_firewall_mode enum none Firewall mode: off/none/zone
node_selinux_mode enum permissive SELinux mode
node_firewall_intranet string - HBA trusted intranet
node_admin_sudo enum nopass Admin sudo privilege level
pg_io_method enum worker I/O method: auto/sync/worker/io_uring
pg_rto_plan dict - RTO presets: fast/norm/safe/wide
pg_crontab list [] postgres dbsu scheduled tasks
vip_auth_pass string - VRRP auth password
grafana_pgurl string - Grafana PG backend URL
grafana_view_password string DBUser.Viewer Grafana Meta datasource password
infra_extra_services list [] Homepage extra service entries
juice_cache path /data/juice JuiceFS cache directory
juice_instances dict {} JuiceFS instance definitions
vibe_data path /fs VIBE workspace directory
code_enabled bool true Enable Code-Server
code_port port 8443 Code-Server listen port
code_data path /data/code Code-Server data directory
code_password string Vibe.Coding Code-Server password
code_gallery enum openvsx Extension gallery: openvsx/microsoft
jupyter_enabled bool true Enable JupyterLab
jupyter_port port 8888 JupyterLab listen port
jupyter_data path /data/jupyter JupyterLab data directory
jupyter_password string Vibe.Coding JupyterLab access token
jupyter_venv path /data/venv Python venv path
claude_enabled bool true Enable Claude Code configuration
claude_env dict {} Claude Code extra env vars
nodejs_enabled bool true Enable Node.js installation
nodejs_registry string '' npm registry, auto china mirror
node_uv_env path /data/venv Node UV venv path, empty to skip
node_pip_packages string '' pip packages for UV venv

Removed Parameters

Parameter Replacement
node_disable_firewall node_firewall_mode
node_disable_selinux node_selinux_mode
infra_pip_packages node_pip_packages
pgbackrest_clean Unused, removed
pg_pwd_enc Removed, always scram-sha-256
code_home vibe_data
jupyter_home vibe_data

Default Value Changes

Parameter Change Notes
grafana_clean true → false Don’t clean by default
effective_io_concurrency 1000 → 200 More reasonable default
node_firewall_mode zone → none Disable firewall rules
install.yml Renamed to deploy.yml Better semantics

Compatibility

OS x86_64 aarch64
EL 8/9/10
Debian 11/12/13
Ubuntu 22.04/24.04

PostgreSQL: 13, 14, 15, 16, 17, 18


Checksums

9f42b8c64180491b59bd03016c26e8ca  pigsty-v4.0.0.tgz
db9797c3c8ae21320b76a442c1135c7b  pigsty-pkg-v4.0.0.d12.aarch64.tgz
1eed26eee42066ca71b9aecbf2ca1237  pigsty-pkg-v4.0.0.d12.x86_64.tgz
03540e41f575d6c3a7c63d1d30276d49  pigsty-pkg-v4.0.0.d13.aarch64.tgz
36a6ee284c0dd6d9f7d823c44280b88f  pigsty-pkg-v4.0.0.d13.x86_64.tgz
f2b6ec49d02916944b74014505d05258  pigsty-pkg-v4.0.0.el10.aarch64.tgz
73f64c349366fe23c022f81fe305d6da  pigsty-pkg-v4.0.0.el10.x86_64.tgz
287f767fbb66a9aaca9f0f22e4f20491  pigsty-pkg-v4.0.0.el8.aarch64.tgz
c0886aab454bd86245f3869ef2ab4451  pigsty-pkg-v4.0.0.el8.x86_64.tgz
094ab31bcf4a3cedbd8091bc0f3ba44c  pigsty-pkg-v4.0.0.el9.aarch64.tgz
235ccba44891b6474a76a81750712544  pigsty-pkg-v4.0.0.el9.x86_64.tgz
f2791c96db4cc17a8a4008fc8d9ad310  pigsty-pkg-v4.0.0.u22.aarch64.tgz
3099c4453eef03b766d68e04b8d5e483  pigsty-pkg-v4.0.0.u22.x86_64.tgz
49a93c2158434f1adf0d9f5bcbbb1ca5  pigsty-pkg-v4.0.0.u24.aarch64.tgz
4acaa5aeb39c6e4e23d781d37318d49b  pigsty-pkg-v4.0.0.u24.x86_64.tgz

1.14 - From AGPL to Apache: Why I Changed Pigsty's License

Originally published on VONNG.

Pigsty is a batteries-included, local-first PostgreSQL distribution. With the v4.0 release, I finally did something I’d been considering for a while: switching from AGPLv3 back to Apache 2.0.

Here’s why I changed it, what it means, and my take on open source, ecosystems, and commercialization.


The Origin Story

Pigsty started with Apache 2.0.

The reasoning was simple: I built something useful, open-sourced it so others could benefit, and hoped to push PostgreSQL practices forward. Apache felt natural — permissive, no strings attached.

Then came v2.0, and I switched to AGPLv3. The surface reason: some well-known projects had moved to AGPL, and I thought Pigsty might have “caught” their license through dependency. After more research, I realized that wasn’t actually true — I wasn’t linking to them as libraries.

The real reason: I’d started a company. Commercial responsibility meant thinking about protecting commercial interests. So I picked one of the most restrictive open-source licenses available.

We added explicit disclaimers: we wouldn’t pursue regular users; enforcement would effectively match Apache 2.0; AGPL was just “keeping our options open against extreme cloud vendor freeloading.”

In practice? That option delivered none of the protection I wanted — only adoption friction.

Fast forward to today: the company has been wound down, and I’m back to being a solo developer again. Ironically, with steady consulting revenue, I can now afford to treat Pigsty as what it started as — a public good.


AGPL in Practice

The first problem is straightforward: AGPL triggers immediate legal red flags at most companies. Default policy is “don’t touch” — unclear risk, slow approvals, high compliance cost.

You can explain “we won’t pursue regular users” or “it doesn’t propagate in this case.” Often doesn’t matter. Policy is policy.

I’ve had this conversation with engineers at multiple large tech companies. The pattern is consistent: I’d suggest self-hosting Postgres with Pigsty. Response? “We’d love to evaluate it, but AGPL is a non-starter. Legal won’t even look at it.”

After enough of these conversations, you realize: AGPL creates adoption barriers — not technical ones, but process barriers. And process barriers are often harder to break through than technical ones.

The second problem: AGPL may not actually prevent the freeloading you’re worried about.

Real example: a solutions architect at a major cloud vendor deploys Pigsty on cloud infrastructure for their customer. Issues come up, they pay me for support. The vendor delivered successfully using Pigsty.

Legally? AGPL has limited teeth here. This consulting/professional-services model doesn’t trigger AGPL’s network clause — the code isn’t offered as SaaS. It’s not the scenario AGPL was designed for.

featured.webp

In practice, AGPL often scares away legitimate users without blocking the scenarios you actually worried about. The data backs this up: after switching to AGPL, Pigsty’s adoption growth visibly slowed — exponential became linear.

Martin Kleppmann (author of DDIA) made a similar point years ago: GPL/AGPL don’t solve cloud-era value distribution. If you want to restrict cloud vendors, you need source-available licenses (ELv2, SSPL, BSL) or product strategy (local-first, ecosystem lock-in) — not GPL hoping to deliver justice.

AGPL ended up being neither open-source-friendly enough nor effective against cloud. Worst of both worlds.


Why Not ELv2 / SSPL / BSL?

Natural follow-up: if AGPL doesn’t work, why not ELv2? It’s basically Apache for normal users but explicitly restricts cloud vendors.

I considered it seriously. Pigsty is approaching “finished software” status — I don’t need PRs, and with tools like Claude, I can ship features fast. Community value for me isn’t code contributions; it’s:

  • Real-world feedback and edge case discovery
  • Reusable templates and best practices
  • Case studies, word-of-mouth, ecosystem connections

So: do I actually need an OSI-approved license?

In the end, I didn’t go with ELv2. One reason: that’s not what I want to build.

I want Pigsty to become the Debian of databases.

Debian didn’t win by restricting users. It won through openness, reusability, distributability — eventually becoming the default upstream, the standard, the infrastructure.


The Debian of Databases

As I discussed in “Forging a PostgreSQL Distribution”: Pigsty’s goal is to become the Debian of the PostgreSQL world — globally useful, freely distributable, endlessly customizable.

My read: the next two years are a window of significant change. AI, agents, infrastructure shifts — these will reshuffle who becomes the default choice.

PostgreSQL is already the Linux kernel of databases. The distribution wars are just beginning. These windows don’t open often. Pigsty has a seat at the table, and I’m not sitting this one out.

To win this, you don’t wield licenses as weapons. You win by:

  • Keeping users happy and productive
  • Letting vendors integrate and redistribute
  • Giving ISVs paths to profit
  • Creating value for DEV, OPS, and DBA

For this to work, a permissive license is almost mandatory. It signals intent: welcome to use, integrate, distribute, fork.

Put bluntly: freeloaders welcome.

One line I do draw: ship it, sell it, build on it — all fine. Just don’t claim you wrote it from scratch.


On Freeloading

People ask: everyone’s moving toward source-available and restrictive licenses. Why go back to Apache? Aren’t you worried about freeloading?

My view is simple: if you’re worried about freeloading and want to monetize via licensing, don’t open-source — sell commercial software. If you choose true open source, accept the reality: it will be used, integrated, redistributed. Treat it as a gift. As Linus put it — Just for Fun.

Sure, I’m not thrilled when cloud vendors rebrand open-source projects to upsell compute. But that playbook doesn’t work well on Pigsty — it’s not a library they can wrap. It is the database platform, competing directly with their managed offerings.

Major cloud vendors already have their own managed Postgres, deeply integrated with their infrastructure. Rebranding Pigsty as their RDS would mean competing with themselves.

When I say “get off the cloud,” I mean managed database PaaS. Self-hosting on cloud VMs is fine. IaaS works — the main issue is EBS-style network storage being mediocre for databases. NVMe instance storage exists; use it if it fits.

For vendors who want to offer self-hosted Postgres deployment as a service: you’re welcome here. Growing the ecosystem beats playing license cop.


From Distribution to Meta-Distribution

A permissive license also enables Pigsty’s evolution from “a PG distribution” to a meta-distribution.

From day one, Pigsty was designed to be fully customizable. It provides a complete toolbox plus the largest binary extension repository in the PostgreSQL ecosystem. You can build your own distribution on top — like how countless Linux variants grew from Debian and Red Hat.

Example: PIGLET.RUN, a project I’m working on, adds a vibe-coding toolbox to Pigsty’s single-node template — spin up Claude Code, VS Code, and full-stack services with one click. That’s a first-party Pigsty sub-distribution.

You can swap kernels — use your own Postgres fork. If you’ve built extensions or tools, package them in. For PG kernel vendors, this is compelling: a bare RPM becomes “HA, backup, monitoring, IaC, offline delivery” out of the box. Order-of-magnitude value increase.

meta-distro.webp

We’ve supported custom kernels since v3. Spin up Supabase, OrioleDB, PolarDB, IvorySQL, or others with one click. Each could be its own sub-distribution.

For meta-distribution to work, the license must be permissive. Otherwise you’re saying “welcome to distribute” while writing “distribution triggers obligations.” Ecosystems don’t grow that way.

Long-term, I’d like Pigsty to develop proper governance — maybe even a committee structure like Debian. Ambitious, but that’s what makes it interesting.


Timing: Finished Software

Why switch at v4.0? Because v4.0 is a milestone — it’s reached “finished software” status.

I ran comparative evaluations against major cloud database offerings. Short version: we’re playing in the same league. Except we’re free.

RDS PG Evaluation: Claude | ChatGPT

That’s roughly where I want it to stay. Push too far past parity and you cannibalize your own consulting business — I’m selling the delta from “works great” to “bulletproof in production.”

ISVs and independent DBAs building commercial services on Pigsty: welcome. The market is massive. You serve your customers, I provide upstream support. Handle what you can, escalate when you can’t. That’s how ecosystems work.


Business Model

People often ask, How do you make money with it?

The model I admire: VictoriaMetrics. One developer built a monitoring system that dominates on performance in the observability area. Started a company for enterprise support, kept some modules enterprise-only. No fundraising, no pressure, sustainable. Pigsty follows a similar path.

Pigsty has a commercial edition — same codebase, but supports more operating systems and legacy PG versions. Includes CLI tooling, DBA agent, SOPs, and a non-open-source test suite with failure scenarios — similar to SQLite’s approach.

But the commercial edition isn’t the point. Enterprises don’t pay for what you’ve open-sourced — they pay for delivered value: taking production from “works well” to “bulletproof” That includes warranties, SLAs, troubleshooting, and operational know-how from running Postgres at scale — things that won’t appear in AI training dataset. So I’m not selling the product — that’s free. Pigsty is free; while the consulting isn’t.

AI Agent has been a force multiplier. Most of my time now goes to asking the right questions and validating outputs. Scales quiet well.

If you’re using Pigsty and find value in what I’m building, subscriptions are welcome. You get commercial guarantees; I get to keep building.


On Relicensing: Doing It Right

Relicensing deserves its own discussion.

My view: permissive-to-restrictive is ethically problematic — textbook bait-and-switch. Contributors signed up under one set of expectations; you’re retroactively changing the deal.

Restrictive-to-permissive is fundamentally different. You’re giving more freedom to everyone, including past contributors.

That said, I wanted to do this cleanly. I reached out to contributors for explicit consent. Not everyone responded — and I won’t assume consent. So I rewrote all code from non-responding contributors. In a ~150k lines codebase, this was roughly 500 lines, not much.

Was this strictly necessary? Legally, probably not — going permissive doesn’t require unanimous consent like going restrictive would. But I’d rather over-comply than leave gray areas. Practice what you preach.


Conclusion

Going from AGPL to Apache 2.0 isn’t going soft. It’s not naive.

It’s strategic: Pigsty aims to be the Debian of databases. Openness and inclusivity aren’t slogans — they’re engineering requirements. Reduce friction, expand distribution, build ecosystem.

Pigsty v4.0 is out. I hope it helps more people to enjoy PostgreSQL

1.15 - Pigsty v3.7: Magneto Award and PG18 Ready

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v3.7.0 is officially released, bringing complete production-grade PostgreSQL 18 support and support for four new operating systems: Debian 13 and EL 10 across both x86_64/ARM64 architectures. Extension count has grown from 423 to 437, with numerous extensions updated to latest versions.

Additionally, Supabase, IvorySQL, PolarDB, Percona TDE, and other kernels have all been upgraded to latest versions, and infrastructure components like Prometheus, Grafana, DuckDB, and Etcd have completed a round of concentrated updates.

For outstanding contributions to the PostgreSQL extension ecosystem, Pigsty received the “PostgreSQL Magneto” award at the 8th PostgreSQL Database Ecosystem Conference.


PostgreSQL 18 Becomes Default Version

With the release of PostgreSQL 18.1, PG 18 is production-ready. Pigsty v3.7 officially sets it as the default version.

PG 18 introduces several important features: Temporal Primary Key, built-in UUIDv7, Index Skip Scan, Asynchronous I/O (AIO), virtual generated columns, EXPLAIN enhancements, OAuth 2.0 support, and more. If these features match your business needs, now is a good time to upgrade.

Meanwhile, PG 13.23 released in November will be the last PG 13 version — that major version has officially entered EOL status. Pigsty v3.7 is the last version with complete PG 13 extension support — all extensions have been recompiled, but will no longer be updated going forward.


Epic Extension Update

Supporting PG 18 goes far beyond kernel deployment. From the beta stage, Pigsty has provided PG 18 deployment capability, but to make it the production default, extension ecosystem follow-through is crucial. Currently, except for Citus, mainstream extensions all support PG 18. We’ve fixed dozens of extension compatibility issues and unified pgrx versions across 40+ Rust extensions.

This is an epic update. Available extensions on PG 18 reach 390-405 (varies slightly by distribution). Complete extension availability information is available at PGEXT.CLOUD. Extension updates over the past three months:

Several extensions see milestone updates:

  • pg_duckdb 1.1: Code quality significantly improved, EL8 compatibility issues fixed
  • pg_mooncake 0.2: Rewritten in Rust, now a sub-extension of pg_duckdb, both can coexist
  • VectorChord 1.0: Official stable version released
  • pg_search 0.20: Major ParadeDB full-text search extension update

Supporting PG 18, Debian 13, and EL 10 means the compile/test matrix expanded from 50 combinations (5 PG × 10 OS) to 84 combinations (6 PG × 14 OS) — a 68% increase. RPM/DEB packages in the repository grew from 40,000+ to 60,000+.

To improve efficiency, we fully automated the entire extension build process. Now just spin up a container, execute pig build pkg <ext> to complete the build. This extension repository and build infrastructure is completely standalone — even without using Pigsty, you can install extensions directly via YUM/APT. All code is Apache-2.0 licensed open source.

For this contribution, Pigsty received the “PostgreSQL Magneto” award at the 8th PostgreSQL Database Ecosystem Conference.


New OS Support: EL 10 and Debian 13

This version adds four new OS support targets, bringing the mainstream support total to 14.

Major challenges during adaptation:

  • EL 10 Missing Ansible: Official repos lack ansible-collection-community-crypto — we ported and packaged the EL9 version
  • Ansible 2.19 Breaking Changes: Extensive syntax incompatibilities required comprehensive adaptation to ensure both old and new versions work correctly
  • LLVM Version Upgrade: PGDG repos on EL9/EL10 upgraded from LLVM 19 to LLVM 20, introducing compatibility issues
  • ARM64 Repository Adjustments: el10.aarch64 PGDG repos underwent multiple rounds of adjustment
  • Frequent Dependency Changes: Upstream package dependencies continuously shifting

This is also why we don’t recommend users manually wrestling with PostgreSQL deployment: often the problem isn’t operator error but upstream changes causing dependency breakage. Using Pigsty offline packages locks in complete dependencies at a specific point in time, ensuring deployment stability.

Maintenance Strategy Adjustment: Pigsty will only maintain the two most recent major versions in each series. With EL 10 and Debian 13 joining, EL 8, Debian 11, and Ubuntu 20.04 will no longer receive proactive updates (support not removed) — new extension packages and test processes will no longer cover these older systems.


Multi-Kernel Synchronized Updates

Besides the vanilla PostgreSQL kernel, this version synchronizes updates across multiple derivative kernels:

Kernel Update Content
Supabase All Docker images updated to latest, underlying upgraded to PG 18
IvorySQL Upgraded from 4.5 to 5.0, compatible with PG 18.0
Percona TDE Transparent encryption kernel upgraded from PG 17.5 to PG 18.1 compatible
PolarDB Released 15.15.5.0, added Debian 13/EL 10 RPM/DEB packages
FerretDB Updated to 2.7, underlying DocumentDB upgraded to 0.107
OpenHalo / OrioleDB Added Debian 13 and EL 10 support

All these kernels work smoothly on new operating systems (except Babelfish), further solidifying Pigsty’s position as a “Meta-Distribution” — a unified platform for out-of-the-box experience with various PostgreSQL flavors.


Parameter Template Optimization

Default parameter templates optimized for PG 18 and new scenarios:

  • Optimized CPU, process, thread, and parallel query related parameter configurations
  • Ensured adequate background worker resources for various extensions
  • Relaxed OLTP template restrictions on parallel queries
  • Added maintenance, troubleshooting, and accidental deletion recovery SOP documentation

Vision: The Ubuntu of the PostgreSQL Ecosystem

Pigsty has become the highest-starred PostgreSQL ecosystem open-source project from China, establishing considerable recognition and influence internationally.

Our vision: Make Pigsty the mainstream distribution in the PostgreSQL world, occupying an ecosystem position in the database realm similar to Debian, Ubuntu, and RHEL in the operating system realm.

Implementation path:

  • Focus on Core Scenarios: Large-scale production-grade PostgreSQL management on native Linux
  • Build Differentiated Advantages: Industry-leading monitoring system and most complete extension ecosystem
  • Integrate Ecosystem Resources: Incorporating core capabilities from distributions like Supabase and Percona
  • Optimize Developer Experience: Balancing professionalism with usability


v3.7.0

Pigsty v3.7.0 released with deep PostgreSQL 18 support!

curl https://repo.pigsty.cc/get | bash -s v3.7.0

Highlights

  • Deep PostgreSQL 18 support, becomes default PG major version, extensions ready!
  • Added EL10 / Debian 13 OS support, total reaches 14!
  • Added PostgreSQL extensions, total reaches 437!
  • Supports Ansible 2.19 post-breaking-change versions!
  • Supabase, PolarDB, IvorySQL, Percona kernels updated to latest versions!
  • Optimized PG default parameter setting logic for better resource utilization.

Version Updates

  • PostgreSQL 18.1, 17.7, 16.11, 15.15, 14.20, 13.23
  • Patroni 4.1.0
  • Pgbouncer 1.25.0
  • pg_exporter 1.0.3
  • pgbackrest 2.57.0
  • Supabase 2025-11
  • PolarDB 15.15.5.0
  • FerretDB 2.7.0
  • DuckDB 1.4.2
  • Etcd 3.6.6
  • pig 0.7.4

For more software version updates, refer to:

API Changes

  • Set more reasonable optimization strategies for parallel execution related parameters
  • In rich and full templates, citus extension no longer installed by default because citus doesn’t yet support PG 18
  • PG parameter templates now include duckdb series extension stubs
  • Set 200, 2000, 3000 GB upper limits for min_wal_size, max_wal_size, max_slot_wal_keep_size
  • Set 200 GB upper limit for temp_file_limit, 2 TB for OLAP
  • Appropriately increased default connection pool connection counts
  • Added prometheus_port parameter with default value 9058, avoiding conflict with EL10 RHEL Web Console port
  • Changed alertmanager_port parameter default to 9059, avoiding potential conflict with Kafka SSL port
  • Added pg_pkg pg_pre subtask to remove bpftool, python3-perf causing LLVM conflicts on el9+ before installing PG packages
  • Added llvm repository module to Debian/Ubuntu default repository definitions
  • Fixed infra-rm.yml package removal logic

Compatibility Fixes

  • Fixed Ubuntu/Debian CA trust Warning return code error
  • Fixed extensive compatibility issues introduced by Ansible 2.19, ensuring normal operation on old and new versions
  • Added int type conversion for seq type variables to ensure compatibility
  • Changed many with_items to loop syntax for compatibility
  • Added a layer of list nesting for key exchange variables to avoid character iteration on strings in new versions
  • Explicitly converted range usage to list before use
  • Modified name, port and other reserved marker variable naming
  • Changed play_hosts to ansible_play_hosts
  • Added string forced type conversion for some string types to avoid runtime errors

EL10 Logic Adaptation

  • Fixed EL10 missing ansible-collection-community-crypto unable to generate keys issue
  • Fixed EL10 missing ansible logical package issue
  • Removed modulemd_tools flamegraph timescaledb-tool
  • Use java-21-openjdk instead of java-17-openjdk
  • aarch64 YUM repository name issues

Debian 13 Logic Adaptation

  • Use bind9-dnsutils instead of dnsutils

Ubuntu 24 Fixes

  • Temporarily removed tcpdump package with broken upstream dependencies

Checksums

e00d0c2ac45e9eff1cc77927f9cd09df  pigsty-v3.7.0.tgz
987529769d85a3a01776caefefa93ecb  pigsty-pkg-v3.7.0.d12.aarch64.tgz
2d8272493784ae35abeac84568950623  pigsty-pkg-v3.7.0.d12.x86_64.tgz
090cc2531dcc25db3302f35cb3076dfa  pigsty-pkg-v3.7.0.d13.x86_64.tgz
ddc54a9c4a585da323c60736b8560f55  pigsty-pkg-v3.7.0.el10.aarch64.tgz
d376e75c490e8f326ea0f0fbb4a8fd9b  pigsty-pkg-v3.7.0.el10.x86_64.tgz
8c2deeba1e1d09ef3d46d77a99494e71  pigsty-pkg-v3.7.0.el8.aarch64.tgz
9795e059bd884b9d1b2208011abe43cd  pigsty-pkg-v3.7.0.el8.x86_64.tgz
08b860155d6764ae817ed25f2fcf9e5b  pigsty-pkg-v3.7.0.el9.aarch64.tgz
1ac430768e488a449d350ce245975baa  pigsty-pkg-v3.7.0.el9.x86_64.tgz
e033aaf23690755848db255904ab3bcd  pigsty-pkg-v3.7.0.u22.aarch64.tgz
cc022ea89181d89d271a9aaabca04165  pigsty-pkg-v3.7.0.u22.x86_64.tgz
0e978598796db3ce96caebd76c76e960  pigsty-pkg-v3.7.0.u24.aarch64.tgz
48223898ace8812cc4ea79cf3178476a  pigsty-pkg-v3.7.0.u24.x86_64.tgz

See GitHub Release for more details.

1.16 - Forging a China-Rooted, Global PostgreSQL Distro

Originally published on VONNG.

Hi, I’m Feng Ruohang, author of Pigsty and an independent open-source contributor. Let’s talk about how to build a PostgreSQL distribution that is rooted in China and useful to the whole world.

The question isn’t whether PG will win—it already has. The question is: What role do we play in that victory? Spectator or protagonist? Follower or leader?

Why now

PostgreSQL is the default database

Stack Overflow’s 2025 survey shows 58.2% of professional developers use PG—18.6 points ahead of MySQL, and the gap is widening. New SaaS, AI startups, even OpenAI default to PG. DB-Engines rankings and JetBrains surveys tell the same story.

Capital agrees: in 2025 Databricks bought Neon (~$1 B) and Snowflake bought Crunchy Data ($250 M). AWS Aurora DSQL, Azure HorizonDB, GCP AlloyDB—all PG. Technology won, money followed.

China is missing from the PG narrative

Despite hundreds of domestic “PG-derived” products, our presence in the global ecosystem is faint. Until recently there wasn’t a single Chinese committer on the PG core list. The most visible Chinese-led PG project by GitHub stars is… Pigsty, a one-man project. That’s both flattering and a little sad.

At PG conferences I’ve met only a handful of Chinese developers. We’re spectators at our own victory parade.

What must change

The kernel wars are over; the fight shifts to distributions. Whoever controls the distro controls the experience—like Ubuntu did for Linux. We need a PG “Ubuntu” built with China’s strengths but serving global developers, the way DeepSeek did in AI.

Pigsty as a case study

Pigsty started at Tantan (China’s #2 dating app). We were dealing with 2.5 M global QPS, PL/pgSQL-heavy business logic, hundreds of physical clusters. Off-the-shelf tooling couldn’t cope, so we built our own HA, backups, monitoring, IaC. China’s scale was the forge. If it survives Tantan, it’s overkill everywhere else.

But “rooted in China” isn’t enough; “facing the world” means becoming part of the global supply chain. That requires obsessing over developer experience, not just DBA comfort.

In 2023 Pigsty already did HA + backups + observability + bare-metal delivery. Yet something was missing—features. PG’s true power is extensions. MySQL spends years grafting on vectors; PG’s community ships pgvector and kneecaps an entire market in months.

So I built an extension repository. I waited for others to do it, nobody did, so I compiled them myself: first a dozen, then dozens, then hundreds. Today Pigsty provides 437 extensions across EL9/EL8/Debian/Ubuntu, more than the official PGDG repos. That makes Pigsty part of the upstream supply chain: when developers apt install an extension, they’re using binaries built in China yet serving users worldwide.

Vision

  • Rooted in China: leverage our scale, scenarios, and demand to harden solutions under extreme stress.
  • Facing the world: ship battle-tested, developer-friendly distros and extension repos that anyone can consume, just like they consume Debian packages.
  • Play to our strengths: we may not have a kernel committer yet, but we can dominate tooling, packaging, automation, and integrations—the layers that actually reach users.

Pigsty isn’t the only answer, but it proves a point: a single Chinese engineer, working the right problem, can earn a seat at PostgreSQL’s global table. Imagine what we could do together.

1.17 - Pigsty v3.6: The Ultimate PostgreSQL Distribution

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v3.6 is officially released. After two months of careful refinement, this will be the last major version before v4.0, featuring extensive refactoring and improvements that lay a solid foundation for building the ultimate all-in-one PostgreSQL distribution.

This version deeply optimizes and refactors deployment tasks for PostgreSQL, MinIO, and Etcd, adds Percona PG TDE kernel support with out-of-the-box transparent encryption functionality. Additionally, the Supabase self-hosting experience has been comprehensively optimized, destructive database operations have been completely removed from idempotent playbooks, and a new fully automated pgsql-pitr playbook enables one-click point-in-time recovery.

The installation process has been further simplified: from four steps to three steps (download, configure, install), now defaulting to online installation mode which skips local software repository construction.


New Kernel Support: Percona PG TDE

Percona’s pg_tde extension has finally reached 1.0 GA after years of development. Many “enterprise-grade” PostgreSQL distributions tout “transparent encryption” as a core selling point — pg_tde may be the first mature enough open-source transparent encryption extension, providing truly enterprise-grade transparent encryption for open-source PostgreSQL.

Currently, this extension requires running on a patched PostgreSQL kernel — Percona’s Postgres distribution. Pigsty added support immediately after the announcement — just two commands to enable and install, while enjoying Pigsty’s full RDS capabilities: monitoring, high availability, PITR, IaC, and more — identical to the vanilla PG kernel.

With this, the number of PostgreSQL kernels supported by Pigsty has reached 10.

Pigsty has become a distribution of PostgreSQL distributions — a “meta-distribution.” Various PostgreSQL fork kernels can be transformed into “enterprise-grade database services” with high availability, monitoring, IaC, and PITR capabilities under Pigsty’s umbrella.


Extension Ecosystem Continues to Strengthen

Besides the Percona transparent encryption kernel, OrioleDB also released 1.5 beta12 — Supabase’s CEO revealed it’s nearing official GA. Pigsty has immediately compiled the OrioleDB-patched version of PG and its extensions.

Another noteworthy extension is pgactive — an AWS-developed and open-sourced PG multi-active extension that claims to solve sub-second high availability failover. This extension depends on the missing pgfeutils and has compilation barriers — Pigsty provides out-of-the-box binary packages.

Available extensions have reached 423. PG18 beta2, OrioleDB, TimescaleDB, Citus, FerretDB & DocumentDB, DuckDB, Etcd, and more have completed routine version updates.

The extension catalog site has also been completely revamped using Next.js reconstruction, with significantly improved appearance. New address: https://pgext.cloud


Supabase Self-Hosting Experience Optimization

Pigsty v3.6 provides a smoother Supabase self-hosting experience and fixes several issues in Supabase’s official templates:

  • logflare replication slot not advancing
  • Massive error log printing
  • Studio unable to view two Analytics logs

Production-grade Supabase self-hosting requires just a few commands:

Additionally, Pigsty now defaults to using Docker Registry mirror sites provided by 1Panel, significantly improving download speeds in mainland China.

Currently, Pigsty and StackGres are the only two open-source vendors providing Supabase self-hosting solutions: Pigsty delivers on bare Linux systems, StackGres delivers on Kubernetes.


PITR Recovery Enhancement

In previous versions, Pigsty provided the pg-pitr script for “semi-automatic” PITR recovery assistance. This version adds a fully automated pgsql-pitr playbook for one-click point-in-time recovery.

This playbook automatically performs the following operations:

  • Pause high availability failover
  • Shut down PostgreSQL
  • Generate and execute pgbackrest PITR recovery command to specified target point
  • Verify and restart PostgreSQL
  • Re-enable high availability failover

Supports fast retry (in-place incremental) for precise recovery point targeting. Also adds a new use case: performing PITR recovery on newly started instances (or detached replicas) to avoid affecting existing business, then extracting data from the new instance for manual import.


ETCD Management Simplified

This version refactors the Etcd module, adding independent etcd-rm.yml playbook and scaling SOP scripts.

Previously, scaling etcd involved a series of complex command operations — now just a few simple commands:

bin/etcd-add              # Create etcd cluster, or refresh existing cluster state
bin/etcd-add 10.10.10.11  # Scale out etcd cluster, add a new member
bin/etcd-rm               # Remove entire etcd cluster
bin/etcd-rm 10.10.10.11   # Remove specified member from cluster

The etcd.yml playbook no longer cleans existing ETCD clusters — cleanup is now handled by dedicated roles and playbooks, making maintenance simpler and clearer.


MinIO Module Improvements

The MinIO module has been refactored with a new Plain HTTP mode and adjusted default bucket and user configuration.

Previous versions enabled HTTPS for MinIO by default (via locally CA-signed self-signed certificates), avoiding intranet traffic snooping but causing some hassles: clients outside the Pigsty management node (like containers) need to trust that CA to access MinIO.

This version adds a switch allowing MinIO to run in pure HTTP mode. Note: pgbackrest doesn’t accept HTTP-mode MinIO, so local MinIO storage for PG backups still requires HTTPS mode. HTTP mode is only suitable for pure external service scenarios.

Default bucket configuration has also been adjusted:

Original Config New Config
pgsql, infra, redis pgsql, meta, data

Dedicated users s3user_meta and s3user_data have been created for meta and data buckets, with same-named policies for each bucket. With this design, applications like Supabase and Dify can directly use these two buckets without manual creation.


Installation Process Simplified

Installation steps reduced from four to three:

Original Flow New Flow
Download → Bootstrap → Configure → Install Download → Configure → Install

The “bootstrap” step (extracting offline packages or configuring upstream repos to install Ansible) has been merged into the download script — running the install script automatically executes ./bootstrap.

curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty; ./configure; ./install.yml

Online Installation by Default

The default installation strategy has changed: instead of downloading locally first then installing, it now installs directly from upstream internet sources.

This change brings significant benefits:

  • Fewer failure points: Many user-reported installation errors occurred during local repo download and Nginx service startup phases (like el9.aarch64 patroni-etcd installation failure due to PGDG configuration errors)
  • Faster speed: Only downloads packages that actually need to be installed, rather than downloading everything at once
  • Simpler configuration: No need to handle Nginx security policies and firewall configuration issues

A large proportion of users install Pigsty on single-node Linux and “don’t need” the multi-node consistency provided by local software repositories. Users who need local repos can re-enable via simple configuration (repo_enabled, node_repo_modules) or directly use the rich / full templates that enable local repos by default.


New Documentation Site

The new documentation site is now live: https://pigsty.io/docs/

This site is built with Next.js and Fumadocs modern frontend stack — thanks to Lantian You and Claude Code for the strong assist. The English version is mostly complete; Chinese version is under translation. Contributions via GitHub PR or Issues are welcome.


Other Improvements

  • tuned module optimization: Optimized for modern hardware and NVMe disks, removed outdated configuration parameters, added NVMe/virtualized SSD scheduling/readahead parameter optimizations
  • MCP Toolbox integration: Integrated Google’s newly released MCP Toolbox (database MCP toolbox), with preset template SQL solving some database security issues
  • Configuration template adjustments: All configuration templates adjusted to single-node mode for quicker onboarding

Next Steps: v4.0 and DBA Agent

PostgreSQL 18 will be released in September — Pigsty plans to officially release v4.0 after PG 18’s release. Main improvement directions:

Area Plan
CLI Tool pig fully wraps Ansible playbook functionality, interface preliminarily finalized
Monitoring System VictoriaMetrics / VictoriaLogs replace Prometheus / Loki
Log Collection vector replaces outdated promtail
Portal Component Considering Caddy to replace Nginx (TBD)

The main theme of v4.x will be DBA Agent. Pigsty already has the complete context needed for a DBA Agent — the core being this industry-leading PG monitoring system. Once the domain knowledge accumulated in documentation is rich enough, wrapping MCP around the Pig CLI tool will birth a capable fully self-driving database DBA Agent.



v3.6.0

Pigsty v3.6.0 released with new documentation site and PITR enhancement!

curl https://repo.pigsty.cc/get | bash -s v3.6.0

Highlights

  • New documentation site: https://pigsty.io/docs/
  • Added pgsql-pitr playbook and backup/recovery tutorials, improved PITR experience
  • New kernel support: Percona PG TDE (PG17)
  • Optimized Supabase self-hosting experience, updated to latest version, resolved series of official template issues
  • Simplified installation steps, defaults to online installation, more efficient and simple, bootstrap process (installing ansible) embedded in install script

Design Improvements

  • Improved Etcd module implementation, added independent etcd-rm.yml playbook and scaling SOP scripts
  • Improved MinIO module implementation, supports HTTP mode, creates three buckets with different properties out-of-the-box
  • Re-adjusted and organized all configuration templates for easier use
  • Uses faster Docker Registry mirror sites for mainland China
  • Optimized tuned OS parameter templates for modern hardware and NVMe disks
  • Added pgactive extension for multi-master replication and sub-second failover
  • Adjusted pg_fs_main / pg_fs_backup default values, simplified file directory structure design

Bug Fixes

  • Fixed pgbouncer config file error by @housei-zzy
  • Fixed OrioleDB issues on Debian platform
  • Fixed tuned shm config parameter issues
  • Offline packages directly use PGDG source, avoiding out-of-sync mirror sites
  • Fixed IvorySQL libxcrypt dependency issues
  • Replaced broken and slow EPEL repository sites
  • Fixed haproxy_enabled flag functionality

Infrastructure Package Updates

New Victoria Metrics / Victoria Logs related packages:

  • genai-toolbox 0.9.0 (new)
  • victoriametrics 1.120.0 -> 1.121.0 (refactored)
  • vmutils 1.121.0 (renamed victoria-metrics-utils)
  • grafana-victoriametrics-ds 0.15.1 -> 0.17.0
  • victorialogs 1.24.0 -> 1.25.1 (refactored)
  • vslogcli 1.24.0 -> 1.25.1
  • vlagent 1.25.1 (new)
  • grafana-victorialogs-ds 0.16.3 -> 0.18.1
  • prometheus 3.4.1 -> 3.5.0
  • grafana 12.0.0 -> 12.0.2
  • vector 0.47.0 -> 0.48.0
  • grafana-infinity-ds 3.2.1 -> 3.3.0
  • keepalived_exporter 1.7.0
  • blackbox_exporter 0.26.0 -> 0.27.0
  • redis_exporter 1.72.1 -> 1.77.0
  • rclone 1.69.3 -> 1.70.3

Database Package Updates

  • PostgreSQL 18 Beta2 update
  • pg_exporter 1.0.1, updated to latest dependencies with Docker image
  • pig 0.6.0, updated latest extensions and repo list, with pig install subcommand
  • vip-manager 3.0.0 -> 4.0.0
  • ferretdb 2.2.0 -> 2.3.1
  • dblab 0.32.0 -> 0.33.0
  • duckdb 1.3.1 -> 1.3.2
  • etcd 3.6.1 -> 3.6.3
  • ferretdb 2.2.0 -> 2.4.0
  • juicefs 1.2.3 -> 1.3.0
  • tigerbeetle 0.16.41 -> 0.16.50
  • pev2 1.15.0 -> 1.16.0

PG Extension Package Updates

  • OrioleDB 1.5 beta12
  • OriolePG 17.11
  • plv8 3.2.3 -> 3.2.4
  • postgresql_anonymizer 2.1.1 -> 2.3.0
  • pgvectorscale 0.7.1 -> 0.8.0
  • wrappers 0.5.0 -> 0.5.3
  • supautils 2.9.1 -> 2.10.0
  • citus 13.0.3 -> 13.1.0
  • timescaledb 2.20.0 -> 2.21.1
  • vchord 0.3.0 -> 0.4.3
  • pgactive 2.1.5 (new)
  • documentdb 0.103.0 -> 0.105.0
  • pg_search 0.17.0

API Changes

  • pg_fs_backup: Renamed to pg_fs_backup, default value /data/backups.
  • pg_rm_bkup: Renamed to pg_rm_backup, default value true.
  • pg_fs_main: Default value now adjusted to /data/postgres.
  • nginx_cert_validity: New parameter to control Nginx self-signed certificate validity period, default 397d.
  • minio_buckets: Default value adjusted to create three buckets named pgsql, meta, data.
  • minio_users: Removed dba user, added s3user_meta and s3user_data users corresponding to meta and data buckets.
  • minio_https: New parameter allowing MinIO to use HTTP mode.
  • minio_provision: New parameter allowing skipping MinIO provisioning phase (skip bucket and user creation).
  • minio_safeguard: New parameter that aborts operation when executing minio-rm.yml if enabled.
  • minio_rm_data: New parameter controlling whether to delete minio data directory when executing minio-rm.yml.
  • minio_rm_pkg: New parameter controlling whether to uninstall minio package when executing minio-rm.yml.
  • etcd_learner: New parameter allowing etcd to initialize as learner.
  • etcd_rm_data: New parameter controlling whether to delete etcd data directory when executing etcd-rm.yml.
  • etcd_rm_pkg: New parameter controlling whether to uninstall etcd package when executing etcd-rm.yml.

Checksums

df64ac0c2b5aab39dd29698a640daf2e  pigsty-v3.6.0.tgz
cea861e2b4ec7ff5318e1b3c30b470cb  pigsty-pkg-v3.6.0.d12.aarch64.tgz
2f253af87e19550057c0e7fca876d37c  pigsty-pkg-v3.6.0.d12.x86_64.tgz
0158145b9bbf0e4a120b8bfa8b44f857  pigsty-pkg-v3.6.0.el8.aarch64.tgz
07330d687d04d26e7d569c8755426c5a  pigsty-pkg-v3.6.0.el8.x86_64.tgz
311df5a342b39e3288ebb8d14d81e0d1  pigsty-pkg-v3.6.0.el9.aarch64.tgz
92aad54cc1822b06d3e04a870ae14e29  pigsty-pkg-v3.6.0.el9.x86_64.tgz
c4fadf1645c8bbe3e83d5a01497fa9ca  pigsty-pkg-v3.6.0.u22.aarch64.tgz
5477ed6be96f156a43acd740df8a9b9b  pigsty-pkg-v3.6.0.u22.x86_64.tgz
196169afc1be02f93fcc599d42d005ca  pigsty-pkg-v3.6.0.u24.aarch64.tgz
dbe5c1e8a242a62fe6f6e1f6e6b6c281  pigsty-pkg-v3.6.0.u24.x86_64.tgz

See GitHub Release for more details.


v3.6.1

Pigsty v3.6.1 released with PostgreSQL minor version updates!

curl https://repo.pigsty.cc/get | bash -s v3.6.1

Highlights

  • PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, and 18 Beta 3 support
  • Using Pigsty-provided PGDG APT/YUM mirrors in mainland China to resolve update supply issues
  • New website homepage: https://pigsty.io
  • Added el10, debian 13 implementation stubs, and el10 Terraform images

Infrastructure Package Updates

  • Grafana 12.1.0
  • pg_exporter 1.0.2
  • pig 0.6.1
  • vector 0.49.0
  • redis_exporter 1.75.0
  • mongo_exporter 0.47.0
  • victoriametrics 1.123.0
  • victorialogs: 1.28.0
  • grafana-victoriametrics-ds 0.18.3
  • grafana-victorialogs-ds 0.19.3
  • grafana-infinity-ds 3.4.1
  • etcd 3.6.4
  • ferretdb 2.5.0
  • tigerbeetle 0.16.54
  • genai-toolbox 0.12.0

Database Package Updates

  • pg_search 0.17.3

API Changes

  • Removed br_filter kernel module from node_kernel_modules default value.
  • Uses OS major version number when adding PGDG YUM source, no longer uses minor version number.

Checksums

045977aff647acbfa77f0df32d863739  pigsty-pkg-v3.6.1.d12.aarch64.tgz
636b15c2d87830f2353680732e1af9d2  pigsty-pkg-v3.6.1.d12.x86_64.tgz
700a9f6d0db9c686d371bf1c05b54221  pigsty-pkg-v3.6.1.el8.aarch64.tgz
2aff03f911dd7be363ba38a392b71a16  pigsty-pkg-v3.6.1.el8.x86_64.tgz
ce07261b02b02b36a307dab83e460437  pigsty-pkg-v3.6.1.el9.aarch64.tgz
d598d62a47bbba2e811059a53fe3b2b5  pigsty-pkg-v3.6.1.el9.x86_64.tgz
13fd68752e59f5fd2a9217e5bcad0acd  pigsty-pkg-v3.6.1.u22.aarch64.tgz
c25ccfb98840c01eb7a6e18803de55bb  pigsty-pkg-v3.6.1.u22.x86_64.tgz
0d71e58feebe5299df75610607bf448c  pigsty-pkg-v3.6.1.u24.aarch64.tgz
4fbbab1f8465166f494110c5ec448937  pigsty-pkg-v3.6.1.u24.x86_64.tgz
083d8680fa48e9fec3c3fcf481d25d2f  pigsty-v3.6.1.tgz

See GitHub Release for more details.


1.18 - Pigsty v3.5: 4K Stars, PG18 Beta, 421 Extensions

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v3.5 is officially released. The project has crossed the 4,000+ Star milestone on GitHub — a remarkable achievement for a database infrastructure project.

This version brings a brand-new documentation website, full-platform support for OrioleDB and OpenHalo kernels, Supabase self-hosting optimizations, monitoring system and architecture improvements, PostgreSQL 18 Beta support, routine PG minor version updates, and Apple ARM Vagrant support.


What is Pigsty?

Pigsty is a batteries-included PostgreSQL distribution that works like “self-driving software” for databases. It enables users to spin up enterprise-grade PostgreSQL database services at less than one-tenth the cost of cloud RDS — without needing professional DBAs. Features include high availability, PITR, monitoring, IaC capabilities, and 421 PG ecosystem extensions, running directly on 10 major Linux distributions without containers or Kubernetes.


PostgreSQL 18 Support

PostgreSQL 18 Beta1 has been released, with the stable version coming in September. PG 18 brings powerful new features like AIO, OAuth, and more — now available for preview in Pigsty (not for production use). Routine minor version updates are also available for 17.5, 16.9, 15.13, 14.18, and 13.21.

Pigsty provides a new pg18 configuration template for spinning up highly available RDS based on the PostgreSQL 18 Beta1 kernel. pg_exporter has just released version 1.0, with complete coverage of PG 18’s new monitoring metrics. Users can also use the pig package manager to install PG 18 and corresponding PGDG extensions with a single command.


Supabase Self-Hosting Improvements

Pigsty’s “enterprise-grade” Supabase self-hosting capability has been well-received — the Supabase self-hosting tutorial page traffic even exceeds the landing page. This version further optimizes the Supabase self-hosting workflow.

pgsodium Key Management Integration: You can now specify a root key or provide a key retrieval script for the pgsodium extension that Supabase depends on. This provides data encryption capabilities and can derive a series of subkeys from the root key.

logflare Replication Slot Fix: The Supabase Analytics logflare component has a defect — when system tables have no update writes, it doesn’t update WAL consumption progress, causing replication slots to retain data indefinitely. Pigsty uses a pre-configured cron job supa-kick that executes a “fake update” every minute to trigger progress advancement, preventing disk exhaustion.

Supabase-related extension versions and Docker image versions have also been updated.


OpenHalo and OrioleDB Full-Platform Support

The OpenHalo kernel provides MySQL compatibility on top of PG 14, while the OrioleDB kernel provides a cloud-native, bloat-free PostgreSQL version. In v3.4, only RPM packages were provided — now they’re fully available across all ten supported Linux systems.

OrioleDB has been acquired by Supabase and recently released its 11th Beta version. Although it hasn’t yet become Supabase’s default PG kernel fork, Pigsty is prepared in advance — ensuring seamless follow-up once Supabase decides to switch from vanilla PG to OrioleDB.


421 Extensions

Available extensions have reached 421, with numerous extensions receiving version updates. Notable new extensions:

pgsentinel: An observability extension providing Oracle Active Session History-like functionality, recording statistics and wait events for each session. Details: https://pigsty.io/ext/e/pgsentinel/

spat: An experimental extension providing a Redis-like interface in PG, achieving Redis-like performance using shared memory. Currently in Alpha stage — not for production use.

The new extension encyclopedia website is now live, more beautiful and comprehensive than the previous version:


New Documentation Site

The Pigsty documentation site has been rebuilt with Next.js, stepping from static page rendering into the modern frontend era. New site address: https://pigsty.io

Not only has the form been completely renovated, but the content has been thoroughly rewritten and reorganized for version 3.5, with extensive outdated information cleaned up. Currently only available in English — Simplified Chinese support coming soon.


Architecture Optimization

Pigsty v3.5 deeply optimized the PGSQL implementation:

  • Merged and reduced task count
  • Fine-tuned available task tags
  • Unified template file naming
  • Optimized system and database parameter defaults for modern NVMe environments
  • Adjusted role divisions

Important Change: The pgsql.yml playbook’s database deletion functionality has been completely removed. Starting with v3.5, database deletion can only be performed through the dedicated pgsql-rm.yml playbook, eliminating the need for various “safety valves” and “safeguards.”

Refactored PGSQL playbook tasks:

Refactored pgsql-rm.yml playbook tasks:


CLI Improvements

The pig command-line tool adds a new do subcommand, which can replace the wrapper scripts in the original pigsty/bin directory, executing various tasks in a unified, standardized manner.

Currently in pilot phase with API not yet finalized — documentation planned after a period of refinement.


Monitoring Improvements

Grafana 12.0 is released with numerous breaking changes, and the monitoring system has been improved accordingly.

Analysis was performed on AWR requirements from Oracle DBA users: most metrics are already provided by PG and Pigsty — the only exception being wait events.

The PG kernel itself only provides current active wait states, with no historical wait event records. This can only be achieved through extensions — both pg_wait_sampling and pgsentinel provide this functionality, and monitoring dashboards now support wait event analysis.


Apple Vagrant Support

Pigsty provides Vagrant/Terraform sandbox templates, allowing users to easily spin up required virtual machine resources locally or in the cloud. Previously, Vagrant/VirtualBox had various issues with Apple ARM architecture support — after retesting, the Vagrant + VirtualBox combination now runs smoothly on Apple Silicon.

While not all Vagrant Boxes provide ARM64 on VirtualBox support, the main EL9 and Ubuntu 24.04 are supported. This means users can smoothly spin up virtual machines and run Pigsty on Apple MacBook (whether Intel or M-series ARM architecture).


Future Plans

The next version may be v3.6 or v4.0. Pigsty v4.0 is expected to release alongside PostgreSQL 18’s stable version (September).

Planned improvements:

Area Plan
OS Add EL 10 support, compile and package all extensions
Log Collection Replace promtail with vector
Installation Simplify to three steps (Install / Configure / Deploy)
License Consider releasing an Apache-licensed lightweight version


v3.5.0

Pigsty v3.5.0 released with PostgreSQL 18 Beta support!

curl https://repo.pigsty.cc/get | bash -s v3.5.0

Highlights

  • PG 18 (Beta) support, extensions updated, total reaches 421
  • OrioleDB and OpenHalo kernels available on all platforms
  • Can use pig do subcommand instead of bin scripts
  • Enhanced Supabase self-hosting, resolving legacy issues like replication lag and key distribution
  • Code refactoring and architecture optimization, improved Postgres and Pgbouncer default parameters
  • Updated Grafana 12, pg_exporter 1.0 and related plugins, renovated dashboards

PostgreSQL 18 Support

  • PostgreSQL 18 support
  • PG18 monitoring metrics via pg_exporter 1.0.0
  • PG18 installation aliases via pig 0.4.1
  • pg18 configuration template provided

Code Refactoring

  • PGSQL refactored, PG monitoring extracted as separate pg_monitor role, clean logic removed
  • Redundant duplicate tasks removed, similar items merged, configuration streamlined. dir/utils task blocks removed
  • All extensions now install to extensions schema by default (consistent with Supabase security practices)
  • Template files renamed, all .j2 suffixes removed
  • SET commands added to clear search_path for all monitor functions in templates, following Supabase security best practices
  • Adjusted pgbouncer default parameters, increased default connection pool size, set connection pool cleanup query
  • Added pgbouncer_ignore_param parameter to configure list of parameters for pgbouncer to ignore
  • Added pg_key task for generating server-side keys required by pgsodium
  • sync_replication_slots enabled by default for PG 17
  • Sub-task tags re-adjusted to better match configuration section divisions

Module Refactoring

  • pg_remove module refactored
    • Parameters renamed: pg_rm_data, pg_rm_bkup, pg_rm_pkg to control what gets deleted
    • Role code structure re-adjusted with clearer tag divisions
  • New pg_monitor module added
    • pgbouncer_exporter no longer shares config file with pg_exporter
    • Added monitoring metrics for TimescaleDB, Citus, pg_wait_event
    • Uses pg_exporter 1.0.0, updated PG16/17/18 related monitoring metrics
    • Uses more compact, newly designed metric collector configuration files

Supabase Enhancements

Thanks to contributions from @lawso017!

  • Updated Supabase container images and database schemas to latest versions
  • Now supports pgsodium server-side key loading by default
  • Resolved logflare replication progress update issues via supa-kick cron job
  • Added set search_path clause to functions in monitor schema for security best practices

CLI and Monitoring Updates

  • CLI adds pig do command, allowing command-line tool to replace shell scripts in bin/
  • Updated Grafana major version to 12.0.0, updated related plugin/datasource packages
  • Updated Postgres datasource uid naming convention (to adapt to new uid length and character restrictions)
  • Added Static Datasource
  • Updated existing dashboards, fixed various legacy issues

Infrastructure Package Updates

  • pig 0.4.2
  • duckdb 1.3.0
  • etcd 3.6.0
  • vector 0.47.0
  • minio 20250422221226
  • mcli 20250416181326
  • pev 1.5.0
  • rclone 1.69.3
  • mtail 3.0.8 (new)

Observability Package Updates

  • grafana 12.0.0
  • grafana-victorialogs-ds 0.16.3
  • grafana-victoriametrics-ds 0.15.1
  • grafana-infinity-ds 3.2.1
  • grafana_plugins 12.0.0
  • prometheus 3.4.0
  • pushgateway 1.11.1
  • nginx_exporter 1.4.2
  • pg_exporter 1.0.0
  • pgbackrest_exporter 0.20.0
  • redis_exporter 1.72.1
  • keepalived_exporter 1.6.2
  • victoriametrics 1.117.1
  • victoria_logs 1.22.2

Database Package Updates

  • PostgreSQL 17.5, 16.9, 15.13, 14.18, 13.21
  • PostgreSQL 18beta1 support
  • pgbouncer 1.24.1
  • pgbackrest 2.55
  • pgbadger 13.1

PG Extension Package Updates

  • spat 0.1.0a4 new extension
  • pgsentinel 1.1.0 new extension
  • pgdd 0.6.0 (pgrx 0.14.1) new extension
  • convert 0.0.4 (pgrx 0.14.1) new extension
  • pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
  • pg_render 0.1.2 (pgrx 0.12.8)
  • pgx_ulid 0.2.0 (pgrx 0.12.7)
  • pg_idkit 0.3.0 (pgrx 0.14.1)
  • pg_ivm 1.11.0
  • orioledb 1.4.0 beta11 added debian/ubuntu support
  • openhalo 14.10 added debian/ubuntu support
  • omnigres 20250507 (latest version build failed on d12/u22)
  • citus 12.0.3
  • timescaledb 2.20.0 (removed PG14 support)
  • supautils 2.9.2
  • pg_envvar 1.0.1
  • pgcollection 1.0.0
  • aggs_for_vecs 1.4.0
  • pg_tracing 0.1.3
  • pgmq 1.5.1
  • tzf-pg 0.2.0 (pgrx 0.14.1)
  • pg_search 0.15.18 (pgrx 0.14.1)
  • anon 2.1.1 (pgrx 0.14.1)
  • pg_parquet 0.4.0 (0.14.1)
  • pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
  • pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
  • vchord_bm25 0.2.1 (pgrx 0.13.1)
  • vchord 0.3.0 (pgrx 0.13.1)
  • pg_vectorize 0.22.1 (pgrx 0.13.1)
  • wrappers 0.4.6 (pgrx 0.12.9)
  • timescaledb-toolkit 1.21.0 (pgrx 0.12.9)
  • pgvectorscale 0.7.1 (pgrx 0.12.9)
  • pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
  • pg_timetable 5.13.0
  • ferretdb 2.2.0
  • documentdb 0.103.0 (added aarch64 support)
  • pgml 2.10.0 (pgrx 0.12.9)
  • sqlite_fdw 2.5.0 (fix pg17 deb)
  • tzf 0.2.2 0.14.1 (rename src)
  • pg_vectorize 0.22.2 (pgrx 0.13.1)
  • wrappers 0.5.0 (pgrx 0.12.9)

Checksums

ab91bc05c54b88c455bf66533c1d8d43  pigsty-v3.5.0.tgz
4c9fabc2d1f0ed733145af2b6aff2f48  pigsty-pkg-v3.5.0.d12.x86_64.tgz
796d47de12673b2eb9882e527c3b6ba0  pigsty-pkg-v3.5.0.el8.x86_64.tgz
a53ef2cede1363f11e9faaaa43718fdc  pigsty-pkg-v3.5.0.el9.x86_64.tgz
36da28f97a845fdc0b7bbde2d3812a67  pigsty-pkg-v3.5.0.u22.x86_64.tgz
8551b3e04b38af382163e6857778437d  pigsty-pkg-v3.5.0.u24.x86_64.tgz

See GitHub Release for more details.

1.19 - Pigsty v3.4: PITR Enhancement, Locale Best Practices, Auto Certificates

Originally published on VONNG.

GitHub Release | Release Note

After a month of intensive development, Pigsty v3.4 is officially released. This version features significant architectural optimizations, addressing several core concerns highly valued by users and customers:

  • Restore physical backup PITR from one cluster to another
  • Monitoring metrics and dashboards for pgBackRest backup component
  • Auto-apply HTTPS certificates when deploying applications
  • Best practices for locale collation and character sets
  • Oracle-compatible IvorySQL now available on all platforms
  • Graph database extension Apache AGE now available on all platforms

Additionally, a new value proposition/feature introduction page was built using Cursor Vibe Coding: https://pigsty.cc/about/values/


Auto Certificate Issuance

Many users use Pigsty for self-hosting Dify, Odoo, Supabase. User feedback indicated certificate issuance was cumbersome, requiring manual certbot calls, with requests to automate it.

This version enhances Nginx configuration: when users define a certbot field on an Nginx Server, the make cert command completes certificate issuance and application in one step — no additional configuration or commands needed.

The Dify, Odoo, Supabase self-hosting templates all use this feature. After installation, make cert automatically updates or issues needed certificates. If certbot_sign = true, certificates are automatically issued during installation.

v3.4 offers richer Nginx configuration options: use config to inject nginx config, use enforce to force HTTPS redirect. Self-hosted websites can now completely avoid touching traditional Nginx config files in most scenarios.


Locale Collation Best Practices

Many programmers aren’t familiar with Locale/Collation rules, but this is actually an important configuration. Using improper Collation can not only cause several times performance loss but also lead to data inconsistency or even data loss — indexes are closely tied to collation rules. Collation is far from trivial.

Recommended reading:

Best Practice: Always use C or C.UTF-8 as Locale collation.

  • C: Best compatibility, supported on all systems, but lacks Unicode character set knowledge — case functions fail for non-ASCII characters
  • C.UTF-8: Adds Unicode semantics on top of C, more intuitive for users, but not supported by default on all systems
  • PostgreSQL 17 new feature: Built-in support for both collations, no longer dependent on OS libc

Pigsty v3.4 reflects this best practice:

  • All Locale-related parameters default to C (mainly pg_lc_ctypes changed from en_US.UTF-8 to C), ensuring it runs on any system
  • During auto-configuration, if PG >= 17 or system clearly supports C.utf8, Locale is configured as C.UTF-8 for better Unicode semantics

Unless your database works intensively with specific language sorting scenarios, this default is best practice. You can specify other collation rules on queries/indexes/columns using PostgreSQL COLLATION syntax — PG + ICU supports 841 collation rules.


Point-in-Time Recovery Enhancement

Point-in-time recovery is a core feature of relational databases. Previously, Pigsty helped users perform semi-automatic PITR through pg-pitr. v3.4 significantly improves PITR support, now allowing easy selection of any backup from a centralized backup repository for restoration.

When defining pg_pitr parameter on a PG cluster, Pigsty auto-generates the /pg/bin/pg-restore command and /pg/conf/pitr.conf config file.

When executing pg-restore, Pigsty automatically pauses the Patroni cluster, shuts down PG, begins in-place incremental PITR, and restarts PG after recovering to the specified point. Important improvement: when using a centralized backup repository, you can use another cluster’s backup to overwrite the current cluster.

For backup monitoring, v3.4 introduces pgbackrest_exporter to collect backup monitoring metrics, and the PGSQL PITR dashboard now displays current backup status. Previously, users could only query current status through PGCAT Instance with no history — this improvement greatly helps analyze backup status.


Extension Updates

After a year of continuous extension ecosystem expansion, Pigsty has now collected nearly all mainstream PG ecosystem extensions, reaching 405. The explosive extension growth phase is essentially complete; recent versions shift focus back to architecture and infrastructure, with extensions mainly consolidating.

v3.4 adds extension pgspider_ext for multi-data-source queries using various FDWs. Additionally, 28 extensions updated to latest versions with several version and bug fixes.

Apache AGE Graph Database Extension: The project’s developers seem to have been laid off, and it’s essentially in maintenance limbo. As a distribution, Pigsty does its best to provide support — we recompiled AGE 1.5.0 for PG 13-17 based on Debian patches, filling the gap of missing EL RPMs.


Multi-Kernel Support Updates

Pigsty v3.4 updates support for the latest versions of PolarDB, IvorySQL, and Babelfish.

Following PolarDB, IvorySQL becomes the second PostgreSQL kernel available on all platforms across Pigsty’s supported ten Linux distributions. Except for extension plugins, IvorySQL 4.4 experience is basically identical to PostgreSQL 17.4.

To use IvorySQL (Oracle compatibility mode), just modify four parameters:

pg_mode: ivory                                                 # Use IvorySQL compatibility mode
pg_packages: [ ivorysql, pgsql-common ]                        # Install IvorySQL packages
pg_libs: 'liboracle_parser, pg_stat_statements, auto_explain'  # Load Oracle compatibility extensions
repo_extra_packages: [ ivorysql ]                              # Download IvorySQL packages

Also updated Supabase template to latest version, updated Citus to 13.0.2. Next steps will focus on OrioleDB (OLTP performance-focused) and OpenHalo (MySQL protocol compatibility) kernels.


Infrastructure Enhancements

v3.4 updates many Infra package versions, adding new components:

Component Description
JuiceFS Mount S3/MinIO as local filesystem
Restic Similar to pgBackRest but for file backup
TimescaleDB EventStreamer Extract data change streams from TimescaleDB hypertables

These components are now downloaded by default and ready to install.

Another change: the following packages added to default download list:

docker-ce docker-compose-plugin ferretdb2 duckdb restic juicefs vray grafana-infinity-ds

Docker usage is indeed high, mainly for running pgAdmin and similar software, so it’s now in the default download.


v3.5 Feature Preview

v3.5 planned features:

Area Plan
CLI pig CLI fully wrapping Pigsty Playbooks
Config Vibe Config Wizard and MCP Server
Docker Debian 12 x86/ARM Pigsty Docker image
Kernel OrioleDB and OpenHalo support

v3.4.0 Release Notes

Pigsty v3.4.0 released — MySQL compatibility and comprehensive enhancements!

curl https://repo.pigsty.cc/get | bash -s v3.4.0

New Features

  • Added new pgBackRest backup monitoring metrics and dashboards
  • Enhanced Nginx server config options with auto Certbot signing support
  • Now prioritizes PostgreSQL built-in C/C.UTF-8 locale
  • IvorySQL 4.4 now fully supported on all platforms (RPM/DEB on x86/ARM)
  • Added new packages: Juicefs, Restic, TimescaleDB EventStreamer
  • Apache AGE graph database extension now fully supported on EL for PostgreSQL 13–17
  • Improved app.yml playbook: launch standard Docker apps without extra config
  • Upgraded Supabase, Dify, and Odoo app templates to latest versions
  • Added electric app template, local-first PostgreSQL sync engine

Infrastructure Packages

  • +restic 0.17.3
  • +juicefs 1.2.3
  • +timescaledb-event-streamer 0.12.0
  • Prometheus 3.2.1
  • AlertManager 0.28.1
  • blackbox_exporter 0.26.0
  • node_exporter 1.9.0
  • mysqld_exporter 0.17.2
  • kafka_exporter 1.9.0
  • redis_exporter 1.69.0
  • pgbackrest_exporter 0.19.0-2
  • DuckDB 1.2.1
  • etcd 3.5.20
  • FerretDB 2.0.0
  • tigerbeetle 0.16.31
  • vector 0.45.0
  • VictoriaMetrics 1.113.0
  • VictoriaLogs 1.17.0
  • rclone 1.69.1
  • pev2 1.14.0
  • grafana-victorialogs-ds 0.16.0
  • grafana-victoriametrics-ds 0.14.0
  • grafana-infinity-ds 3.0.0
  • Patroni 4.0.5
  • PolarDB 15.12.3.0-e1e6d85b
  • IvorySQL 4.4
  • pgbackrest 2.54.2
  • pev2 1.14
  • WiltonDB 13.17

PostgreSQL Extensions

  • pgspider_ext 1.3.0 (new extension)
  • apache age 13–17 el rpm (1.5.0)
  • timescaledb 2.18.2 → 2.19.0
  • citus 13.0.1 → 13.0.2
  • documentdb 1.101-0 → 1.102-0
  • pg_analytics 0.3.4 → 0.3.7
  • pg_search 0.15.2 → 0.15.8
  • pg_ivm 1.9 → 1.10
  • emaj 4.4.0 → 4.6.0
  • pgsql_tweaks 0.10.0 → 0.11.0
  • pgvectorscale 0.4.0 → 0.6.0 (pgrx 0.12.5)
  • pg_session_jwt 0.1.2 → 0.2.0 (pgrx 0.12.6)
  • wrappers 0.4.4 → 0.4.5 (pgrx 0.12.9)
  • pg_parquet 0.2.0 → 0.3.1 (pgrx 0.13.1)
  • vchord 0.2.1 → 0.2.2 (pgrx 0.13.1)
  • pg_tle 1.2.0 → 1.5.0
  • supautils 2.5.0 → 2.6.0
  • sslutils 1.3 → 1.4
  • pg_profile 4.7 → 4.8
  • pg_snakeoil 1.3 → 1.4
  • pg_jsonschema 0.3.2 → 0.3.3
  • pg_incremental 1.1.1 → 1.2.0
  • pg_stat_monitor 2.1.0 → 2.1.1

API Changes

  • Added new Docker parameters: docker_data and docker_storage_driver (#521 by @waitingsong)
  • Added new infra parameter: alertmanager_port to specify AlertManager port
  • Added new infra parameter: certbot_sign for certificate issuance during nginx init (default false)
  • Added new infra parameter: certbot_email for email used when requesting certificates via Certbot
  • Added new infra parameter: certbot_options for additional Certbot parameters
  • Updated IvorySQL: starting from IvorySQL 4.4, default binaries placed under /usr/ivory-4
  • Changed pg_lc_ctype and other locale-related parameter defaults from en_US.UTF-8 to C
  • For PostgreSQL 17 with UTF8 encoding and C or C.UTF-8 locale, PostgreSQL’s built-in locale rules now take priority
  • configure auto-detects if PG version and environment both support C.utf8 and adjusts locale options accordingly
  • Set default IvorySQL binary path to /usr/ivory-4
  • Updated pg_packages default to pgsql-main patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • Updated repo_packages default to [node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules]
  • Removed LANG and LC_ALL environment variable settings from /etc/profile.d/node.sh
  • Now using bento/rockylinux-8 and bento/rockylinux-9 as EL Vagrant box images
  • Added new alias extra_modules containing additional optional modules
  • Updated PostgreSQL aliases: postgresql, pgsql-main, pgsql-core, pgsql-full
  • GitLab repo now included in available modules
  • Docker module merged into infrastructure module
  • node.yml playbook now includes node_pip task for configuring pip mirrors on each node
  • pgsql.yml playbook now includes pgbackrest_exporter task for collecting backup metrics
  • Makefile now allows using META/PKG environment variables
  • Added /pg/spool directory as pgBackRest temporary storage
  • Disabled pgBackRest link-all option by default
  • Enabled block-level incremental backup for MinIO repos by default

Bug Fixes

  • Fixed exit status code in pg-backup (#532 by @waitingsong)
  • In pg-tune-hugepage, limit PostgreSQL to use only huge pages (#527 by @waitingsong)
  • Fixed logic error in pg-role task
  • Corrected type conversion for huge page config parameters
  • Fixed default value issue for node_repo_modules in slim template

Checksums

768bea3bfc5d492f4c033cb019a81d3a  pigsty-v3.4.0.tgz
7c3d47ef488a9c7961ca6579dc9543d6  pigsty-pkg-v3.4.0.d12.aarch64.tgz
b5d76aefb1e1caa7890b3a37f6a14ea5  pigsty-pkg-v3.4.0.d12.x86_64.tgz
42dacf2f544ca9a02148aeea91f3153a  pigsty-pkg-v3.4.0.el8.aarch64.tgz
d0a694f6cd6a7f2111b0971a60c49ad0  pigsty-pkg-v3.4.0.el8.x86_64.tgz
7caa82254c1b0750e89f78a54bf065f8  pigsty-pkg-v3.4.0.el9.aarch64.tgz
8f817e5fad708b20ee217eb2e12b99cb  pigsty-pkg-v3.4.0.el9.x86_64.tgz
8b2fcaa6ef6fd8d2726f6eafbb488aaf  pigsty-pkg-v3.4.0.u22.aarch64.tgz
83291db7871557566ab6524beb792636  pigsty-pkg-v3.4.0.u22.x86_64.tgz
c927238f0343cde82a4a9ab230ecd2ac  pigsty-pkg-v3.4.0.u24.aarch64.tgz
14cbcb90693ed5de8116648a1f2c3e34  pigsty-pkg-v3.4.0.u24.x86_64.tgz

v3.4.1 Release Notes

Pigsty v3.4.1 released — OpenHalo and OrioleDB kernel support!

curl https://repo.pigsty.cc/get | bash -s v3.4.1

Highlights

  • Added support for MySQL protocol-compatible PostgreSQL kernel on EL: openHalo
  • Added support for OLTP-enhanced PostgreSQL kernel on EL: orioledb
  • Optimized pgAdmin 9.2 app template with auto server list update and pgpass password filling
  • Increased PG default max connections to 250, 500, 1000
  • Removed mysql_fdw extension with dependency errors from EL8

Infrastructure Updates

  • pig 0.3.4
  • etcd 3.5.21
  • restic 0.18.0
  • ferretdb 2.1.0
  • tigerbeetle 0.16.34
  • pg_exporter 0.8.1
  • node_exporter 1.9.1
  • grafana 11.6.0
  • zfs_exporter 3.8.1
  • mongodb_exporter 0.44.0
  • victoriametrics 1.114.0
  • minio 20250403145628
  • mcli 20250403170756

Extension Updates

  • pg_search upgraded to 0.15.13
  • citus upgraded to 13.0.3
  • timescaledb upgraded to 2.19.1
  • pgcollection RPM upgraded to 1.0.0
  • pg_vectorize RPM upgraded to 0.22.1
  • pglite_fusion RPM upgraded to 0.0.4
  • aggs_for_vecs RPM upgraded to 1.4.0
  • pg_tracing RPM upgraded to 0.1.3
  • pgmq RPM upgraded to 1.5.1

Checksums

471c82e5f050510bd3cc04d61f098560  pigsty-v3.4.1.tgz
4ce17cc1b549cf8bd22686646b1c33d2  pigsty-pkg-v3.4.1.d12.aarch64.tgz
c80391c6f93c9f4cad8079698e910972  pigsty-pkg-v3.4.1.d12.x86_64.tgz
811bf89d1087512a4f8801242ca8bed5  pigsty-pkg-v3.4.1.el9.x86_64.tgz
9fe2e6482b14a3e60863eeae64a78945  pigsty-pkg-v3.4.1.u22.x86_64.tgz

See GitHub Release for more details.

1.20 - Pigsty v3.3: 404 Extensions, Turnkey Apps, New Website

Originally published on VONNG.

GitHub Release | Release Note

After two months of careful refinement, Pigsty v3.3 is officially released. As an open-source “batteries-included” PostgreSQL distribution, Pigsty aims to harness the collective power of the PG ecosystem, delivering a maintenance-free experience for self-hosting that rivals cloud RDS.

This version focuses on three key areas: extensions, website deployment, and application templates, significantly enhancing development, operations, and deployment capabilities.


400+ Extensions Available

PostgreSQL is renowned for its rich extension mechanism, fostering a vast database ecosystem. Pigsty takes PostgreSQL’s extension capabilities to the extreme.

A year ago when “PostgreSQL is Eating the Database World” was published, Pigsty had about 150 available extensions, primarily from PG built-ins (70) and the official PGDG repository.

Today, Pigsty v3.3 pushes the available extension count to 404! Users can plug-and-play virtually any PostgreSQL extension they want — more importantly, they can combine these extensions like building blocks.

Notable new extensions:

Extension Description
PGDocumentDB Microsoft open-source, adds document database capabilities to PostgreSQL
PGCollection From AWS, high-performance memory-optimized collection data types
pg_tracing DataDog open-source, distributed call chain tracing
pg_curl Supports dozens of network protocols for requests
pgpdf Directly read/store PDFs, SQL full-text search on PDF content
Omni series 30+ extensions from Omnigres for web app development inside PG

Pigsty has formed a deep partnership with Omnigres: Pigsty integrates and distributes Omnigres extensions, while Omnigres as a downstream delivers extensions from Pigsty’s repository to its users — a mutually beneficial arrangement.


FerretDB 2.0: PostgreSQL Becomes MongoDB

In collaboration with the FerretDB team, delivering a MongoDB solution based on PostgreSQL. FerretDB 2.0 uses Microsoft’s open-source DocumentDB as the backend implementation, providing better performance and more complete functionality.

Transform PG into a core-feature-complete MongoDB 5.0, accessing PostgreSQL data via MongoDB clients and wire protocol.


DuckDB Integration Race Continues

Pigsty v3.3 immediately tracks pg_duckdb 0.3.1, pg_mooncake 0.1.2, pg_analytics 0.5.4 — the latest versions adding ClickHouse-level analytics capabilities to PostgreSQL from different angles.

On ClickHouse’s own ClickBench leaderboard, the PG extension mooncake has successfully broken into the Top 10 T1 tier. Under intense competition, the PostgreSQL ecosystem will soon produce an OLAP player comparable to pgvector in the vector database ecosystem.


pig and Extension Repository

Managing so many extensions becomes challenging. Pigsty’s solution is the pig CLI tool and extension repository. One command gives PostgreSQL the combined superpowers of 400 extensions — even without using Pigsty.

While this unique extension library could serve as Pigsty’s core competitive advantage, we’d rather contribute more to the PostgreSQL ecosystem. Therefore, the pig package manager and PostgreSQL extension repository are open-sourced under the permissive Apache 2.0 license, open to the public and peers.

Several PostgreSQL vendors now install extensions from Pigsty’s extension repository, becoming Pigsty downstream users. This is a solid way to participate in the global software supply chain.


Website Experience: Nginx IaC and Free HTTPS Certificates

Pigsty isn’t just a PostgreSQL distribution — it’s also a complete monitoring infrastructure, Etcd, MinIO, Redis, and Docker deployment management solution, and can even serve as a web hosting tool.

Pigsty provides full-featured Nginx configuration and certificate issuance SOPs. The Pigsty website and software repository are built using Pigsty itself.

Simply define Nginx Servers in your config file, and Pigsty automatically creates the required configuration and applies for HTTPS certificates.

Pigsty v3.2 already integrated certbot with default installation. One command handles HTTPS certificate issuance and renewal. You can proxy various services with Nginx, differentiate by domain, and unify access through ports 80/443 — just open inbound 80/443 TCP ports.


Application Templates: One-Click Docker Software Delivery

Many software packages use PostgreSQL. Previously, Pigsty provided Docker Compose templates, but users still had to manually copy directories, edit .env configs, and start containers manually.

Pigsty v3.3 provides a new app.yml playbook, compressing PostgreSQL-based Docker software delivery to a single command.

Odoo ERP System:

Dify AI Workflow Orchestration:

Self-hosted Supabase:

From bare metal to complete production application services — just a few commands and a few minutes of waiting.


pig CLI Enhancements

pig v0.3 adds the pig build subcommand for quickly setting up PG extension build environments.

curl https://repo.pigsty.cc/pig | bash # Install pig
pig build repo        # Add upstream repos
pig build tool        # Install build tools
pig build rust        # Configure rust/pgrx toolchain (optional)
pig build spec        # Download build specs
pig build get citus   # Download an extension source package
pig build ext citus   # Build an extension

The 200+ extensions Pigsty maintains are all built this way. Even if your OS isn’t among Pigsty’s supported ten distros, you can easily DIY extension RPM/DEB packages.


New Website Design

Starting with v3.3, Pigsty’s international site (pigsty.io) and Chinese site (pigsty.cc) are officially separated, using independent domains, documentation, demos, and repositories.

A brand-new homepage built on a Next.js template. With help from GPT o1-pro and Cursor, modern landing page development was completed quickly.

For hosting, we tried various solutions: Vercel, Cloudflare Pages, Alibaba Cloud, Tencent Cloud EdgeOne, etc. Final conclusion: put overseas on Cloudflare, domestic on cloud servers.

The website deployment process is highly automated — within ten minutes, you can spin up Pigsty documentation + repository infrastructure sites in any region.

The PG extension catalog is now integrated into the documentation site at pigsty.cc/ext, with Chinese version available. A small tool automatically scans Pigsty and PGDG repository extension package versions and generates database records and info pages — users can browse and download extension RPM/DEB packages directly from the web.


Multi-Kernel Support Updates

v3.3 tracks IvorySQL 4.2 (PG 17 compatible version), resolving the issue where pgbackrest backups couldn’t work with IvorySQL. IvorySQL experience is now consistent with standard PG kernel.

We also pushed the PolarDB team to provide DEB packages for Debian and ARM64 platforms. PolarDB can now run smoothly on all 10 Linux distributions supported by Pigsty.

Use case for PolarDB kernel: If you have “localization” requirements, PolarDB is the simplest, most cost-effective solution — Pigsty can wrap the PolarDB kernel RPM/DEB into a powerful RDS service.


v3.3.0 Release Notes

Pigsty v3.3.0 released — available extensions increase to 404!

curl https://repo.pigsty.cc/get | bash -s v3.3.0

Highlights

  • Available extensions increase to 404!
  • PostgreSQL February minor updates: 17.4, 16.8, 15.12, 14.17, 13.20
  • New feature: app.yml script for auto-installing Odoo, Supabase, Dify, etc.
  • New feature: Further customize Nginx config in infra_portal
  • New feature: Certbot support for quick free HTTPS certificate issuance
  • New feature: pg_default_extensions now supports plain-text extension lists
  • New feature: Default repos now include mongo, redis, groonga, haproxy, etc.
  • New parameter: node_aliases for adding command aliases to nodes
  • Fix: Resolved default EPEL repo address issue in Bootstrap script
  • Improvement: Added Alibaba Cloud mirror for Debian Security repos
  • Improvement: pgBackRest backup support for IvorySQL kernel
  • Improvement: ARM64 and Debian/Ubuntu support for PolarDB

Tool Improvements

  • pg_exporter 0.8.0 now supports new metrics in pgbouncer 1.24
  • New feature: Auto-completion for common commands like git, docker, systemctl #506 #507 by @waitingsong
  • Improvement: Optimized ignore_startup_parameters in pgbouncer config template #488 by @waitingsong

Website and Documentation

  • New homepage design: Pigsty’s website now has a fresh new look
  • Extension catalog: Detailed info and download links for RPM/DEB binaries
  • Extension building: pig CLI now auto-sets up PostgreSQL extension build environments

See GitHub Release for more details.

1.21 - Pigsty v3.2: The pig CLI, Full ARM Support, Supabase & Grafana Enhancements

Originally published on VONNG.

GitHub Release | Release Note

Pigsty wraps up 2024 with its final release: v3.2. This release brings the pig command-line tool and complete ARM extension support. Together, they deliver silky-smooth PostgreSQL delivery across 10 major Linux distributions.

This release includes routine fixes, tracks Supabase’s intense release week changes, and provides RPM/DEB packages for Grafana plugins and data sources.


The pig CLI Tool

Pigsty v3.2 ships with the pig command-line tool by default, further simplifying Pigsty’s installation, deployment, and configuration process. But pig isn’t just a Pigsty CLI — it’s a full-featured standalone PostgreSQL package manager.

When installing PostgreSQL extensions, dealing with various distributions and chip architectures is always painful: endless time wasted digging through outdated READMEs, obscure config scripts, and random GitHub branches; or struggling with China’s network environment — missing repos, blocked mirrors, frustrating download speeds.

pig has arrived to solve all these problems. It’s a brand-new Go-based package manager that handles PostgreSQL and its ever-growing extension ecosystem uniformly, without getting stuck in debugging hell.

Pig is a lightweight binary written in Go — dependency-free and easy to install with a single command. It respects each OS’s package management traditions without reinventing the wheel, implementing package management on top of yum/dnf/apt.

Pig focuses on cross-distro harmony — whether on Debian, Ubuntu, or Red Hat derivatives, you get a single, smooth method to install and update PostgreSQL and any extension, without compiling from source or dealing with half-baked repos.

If PostgreSQL’s future is unstoppable extensibility, Pig is the tool that helps unlock that potential. After all, nobody complains about a PostgreSQL instance having too many extensions — unused ones have zero impact, and needed ones are right at your fingertips.


ARM Extension Repository

Behind Pig is a supplementary extension repository packed with rare and newly released extensions, so quality extensions are always easy to obtain — tested, curated, and ready to go.

Over the past month, Pigsty has completed full ARM64 architecture support. The five major Linux distributions (EL8, EL9, Debian12, Ubuntu 22/24) now have complete ARM support. By complete, we mean config files used on AMD64 work identically on ARM64 systems. Of course, there are scattered exceptions — a few extensions currently lack ARM support and will be addressed individually.

The Pigsty Extension Repo aggregates 340+ curated PostgreSQL extensions, compiled into convenient .rpm and .deb packages, supporting multiple versions and architectures:

Extension Category Support Status
TimescaleDB time-series suite Full support
Supabase-related extensions Complete
DuckDB analytics extensions Ready
Community new extensions Continuously added

Pigsty built a cross-distro pipeline that integrates community-developed new extensions, time-tested classic modules, and official PGDG packages, enabling one-click seamless installation across Debian, Ubuntu, Red Hat families, and more.

Key design principle: Don’t reinvent the wheel — build directly on each distro’s native package manager (YUM, APT, DNF, etc.) while maintaining version alignment with official PGDG repos.

Under the hood, this repo is part of the larger Pigsty PostgreSQL distribution, but it can also be used independently in your own environment without fully adopting Pigsty. Everything is free and open-source, easy to integrate. Several PostgreSQL vendors already use it as an additional upstream for extension installation.

Complete ARM64 support builds confidence for more chip architecture support. For example, IBM LinuxOne Cloud provides s390x mainframe support for open-source projects, and Pigsty is evaluating this direction.


Supabase Tracking

Pigsty’s previously released Supabase self-hosting tutorial lets users quickly spin up self-hosted Supabase on a single machine. This has generated interest among startup teams heavily using Supabase, so we continue tracking the latest Supabase versions.

Supabase released a series of important updates in December 2024, and Pigsty v3.2 tracks these changes, providing users with the latest Supabase version.

A recent major Supabase move was acquiring OrioleDB — a kernel fork focused on improving PostgreSQL OLTP performance. This feature is currently marked as Beta in Supabase, available as a user option. Pigsty is preparing OrioleDB RPM/DEB packages to ensure support even if Supabase adopts it as the mainline in the future.

With this opportunity, Pigsty is also preparing to extend extension capabilities to more PostgreSQL forks:

Kernel Compatibility
IvorySQL 3/4 Oracle compatible
WiltonDB SQL Server compatible
PolarDB PG Alibaba Cloud open-source
OrioleDB OLTP optimized

Grafana Extensibility

Grafana is an extremely popular open-source monitoring and visualization tool with many plugins: various data visualization panels and data sources. But installing and managing these plugins has always been problematic — Grafana’s own CLI tool can install plugins, but users in China must use VPN to access it, causing significant inconvenience.

In v3.2, commonly used Grafana panel and data source plugins are packaged as RPM/DEB for out-of-the-box use:

Architecture-independent plugins (grafana-plugins):

Category Plugins
Panels volkovlabs-echarts, image, form, table, variable
Panels knightss27-weathermap, marcusolsson-dynamictext
Panels marcusolsson-treemap, calendar, hourly-heatmap
Data Sources marcusolsson-static, json, volkovlabs-rss, grapi

Architecture-dependent plugins:

Additionally, independent RPM/DEB packages were created for architecture-dependent data source plugins (containing x86, ARM binaries). For example, Grafana’s new Infinity data source plugin: use any REST/GraphQL API, use CSV/TSV/XML/HTML as data sources — this greatly expands Grafana’s data ingestion capabilities.

Meanwhile, RPM/DEB packages were also created for VictoriaMetrics and VictoriaLogs Grafana data source plugins, making it convenient for users to use these two open-source time-series and log databases in Grafana.


Future Development Plans

Pigsty itself has reached a fairly mature state. The focus for the coming period will be on the pig tool and extension repository maintenance.

Currently, there’s a rare opportunity window: users and developers are realizing the importance of PostgreSQL extensions, but the PostgreSQL ecosystem doesn’t yet have a de facto standard for extension distribution. Pigsty is committed to making pig an influential PostgreSQL extension distribution standard.

Of course, Pigsty itself has always lacked a good enough CLI tool. Going forward, we’ll integrate functionality scattered across various Ansible playbooks into pig, making it more convenient for users to manage Pigsty and PostgreSQL.


v3.2.0 Release Notes

Highlights

  • Pigsty CLI tool: pig 0.2.0, for managing extensions
  • ARM64 extension support for 340 extensions across five major distros
  • Supabase release week latest version updates, self-hosting available on all distros
  • Grafana updated to 11.4, new Infinity data source

Package Changes

New Extensions

Updated Extensions

  • pgvectorscale 0.4.0 -> 0.5.1
  • pg_parquet 0.1.0 -> 0.1.1
  • pg_polyline 0.0.1
  • pg_cardano 1.0.2 -> 1.0.3
  • pg_vectorize 0.20.0
  • pg_duckdb 0.1.0 -> 0.2.0
  • pg_search 0.13.0 -> 0.13.1
  • aggs_for_vecs 1.3.1 -> 1.3.2
  • pgoutput marked as new PostgreSQL Contrib extension

Infrastructure

  • Added promscale 0.17.0
  • Added grafana-plugins 11.4
  • Added grafana-infinity-plugins
  • Added grafana-victoriametrics-ds
  • Added grafana-victorialogs-ds
  • vip-manager 2.8.0 -> 3.0.0
  • vector 0.42.0 -> 0.43.0
  • grafana 11.3 -> 11.4
  • prometheus 3.0.0 -> 3.0.1 (package name changed from prometheus2 to prometheus)
  • nginx_exporter 1.3.0 -> 1.4.0
  • mongodb_exporter 0.41.2 -> 0.43.0
  • VictoriaMetrics 1.106.1 -> 1.107.0
  • VictoriaLogs 1.0.0 -> 1.3.2
  • pg_timetable 5.9.0 -> 5.10.0
  • tigerbeetle 0.16.13 -> 0.16.17
  • pg_export 0.7.0 -> 0.7.1

Bug Fixes

  • el8.aarch64: Added python3-cdiff to fix patroni dependency issue
  • el9.aarch64: Added timescaledb-tools to fix missing official repo issue
  • el9.aarch64: Added pg_filedump to fix missing official repo issue

Removed Extensions

  • pg_mooncake: Removed due to conflict with pg_duckdb
  • pg_top: Removed due to too many missing versions, quality issues
  • hunspell_pt_pt: Removed due to conflict with PG official dictionary files
  • pg_timeit: Removed due to incompatibility with AARCH64 architecture
  • pgdd: Marked as deprecated due to lack of maintenance, outdated PG 17 and pgrx version
  • old_snapshot and adminpack: Marked as unavailable on PG 17
  • pgml: Set to not download/install by default

API Changes

  • repo_url_packages: Default now empty array, as all packages install via OS package manager
  • grafana_plugin_cache: Deprecated, Grafana plugins now install via OS package manager
  • grafana_plugin_list: Deprecated, Grafana plugins now install via OS package manager
  • The 36-node simulation template originally named prod is now renamed to simu
  • Config generation in node_id/vars for each distro code now also generates for aarch64
  • infra_packages: Default now includes CLI management tool pig
  • configure command also modifies version numbers in auto-generated config pgsql-xxx aliases
  • adminpack: Removed from PG 17, therefore removed from Pigsty default extensions

Bug Fixes

  • Fixed pgbouncer dashboard selector issue #474
  • pg-pitr: Added --arg value parameter parsing support by @waitingsong
  • Fixed Redis log info typo by @waitingsong

Checksums

8fdc6a60820909b0a2464b0e2b90a3a6  pigsty-v3.2.0.tgz
d2b85676235c9b9f2f8a0ad96c5b15fd  pigsty-pkg-v3.2.0.el9.aarch64.tgz
649f79e1d94ec1845931c73f663ae545  pigsty-pkg-v3.2.0.el9.x86_64.tgz
c42da231067f25104b71a065b4a50e68  pigsty-pkg-v3.2.0.d12.aarch64.tgz
ebb818f98f058f932b57d093d310f5c2  pigsty-pkg-v3.2.0.d12.x86_64.tgz
24c0be1d8436f3c64627c12f82665a17  pigsty-pkg-v3.2.0.u22.aarch64.tgz
0b9be0e137661e440cd4f171226d321d  pigsty-pkg-v3.2.0.u22.x86_64.tgz

1.22 - Pigsty v3.1: One-Click Supabase, PG17 Default, ARM & Ubuntu 24

Originally published on VONNG.

GitHub Release | Release Note

With PostgreSQL 17.2 released just days ago, Pigsty immediately follows up with v3.1. In this version, PostgreSQL 17 becomes the default major version, with nearly 340 extensions available out of the box.

Additionally, Pigsty 3.1 delivers one-click self-hosted Supabase capability and improved MinIO object storage best practices. Meanwhile, Pigsty provides initial ARM64 architecture support and adds support for the newly released Ubuntu 24.04 major OS release. Finally, this version offers a series of ready-to-use scenario templates, unifying configuration files across different OS distributions and dramatically simplifying configuration management.


Self-Hosted Supabase

Supabase is an open-source Firebase alternative that wraps PostgreSQL and provides authentication, instant APIs, edge functions, real-time subscriptions, object storage, and vector embeddings. Supabase’s tagline is: “Build in a weekend, scale to millions.” After trying it out, I’d say that’s no exaggeration. It’s a low-code one-stop backend platform that lets you say goodbye to most backend development work — just understand database design and frontend, and you can ship fast!

supa-price.png

For small-scale workloads (4c8g), Supabase cloud pricing is extremely competitive — practically a bargain. So why self-host when Supabase cloud is so attractive? A few reasons:

The most obvious reason is what we discussed in “Cloud Computing Mudslide”: cloud database services quickly explode in cost once you scale up even a little. Considering the unbeatable price-performance of local NVMe drives, the cost and performance advantages of self-hosting are obvious.

Another important reason is Supabase cloud’s feature limitations — following the same logic as RDS, many powerful extensions can’t be offered in multi-tenant cloud environments for security reasons. Supabase cloud has 64 available extensions, but when self-hosting Supabase with Pigsty, you get all 340. Additionally, Supabase officially uses PostgreSQL 15 as the underlying database, while with Pigsty, you can use any version from PG 14-17, running on EL / Debian / Ubuntu mainstream Linux bare metal without virtualization, fully leveraging modern hardware’s performance and cost advantages.

I’ve noticed many startups going overseas are using Supabase, and some have reached a scale where self-hosting makes sense — and people are willing to pay for consulting to make it happen. So Pigsty has supported self-hosting Supabase (the required PostgreSQL) since v2.4 released last September. But that still involved some manual steps like configuring the PG cluster and spinning up Docker. In this version, we’ve optimized the experience to this state — on a fresh OS install, run a few commands and a fresh Supabase instance is ready!

supabase-selfhosting.png

I’ll be preparing some tutorials on Supabase self-hosting best practices in the coming days, stay tuned.


PostgreSQL 17

In “PG12 EOL, PG17 Rises”, we already detailed PostgreSQL 17’s new features and improvements.

The most gratifying is the free performance improvement: PostgreSQL 17 reportedly has significant write performance gains. I tested it on a physical machine, and it’s impressive. Compared to the tests against PostgreSQL 14 three years ago in “How Powerful is PostgreSQL Really”, write performance has noticeably improved.

For example, PG 14 with standard config had WAL write throughput around 110 MB/s — that was a software bottleneck, not hardware. Under PG 17, that number reaches 180 MB/s. Of course, turning off all safety switches can multiply performance further, but fair benchmarks don’t play those games.

perf.png

Performance regression testing for Pigsty 3.1 + PostgreSQL 17. Detailed performance benchmark reports will be published in the coming days, stay tuned.


340 Extensions

Another highlight of Pigsty 3.1: this version provides 340 PostgreSQL extensions. That’s a staggering number, and this is after carefully curating and removing a dozen “extensions” — otherwise this release would have hit 360.

To achieve this, I built a YUM / APT repository covering EL 8/9, Ubuntu 22.04/24.04, and Debian 12 as major OS distributions, plus PG 12-17 (six major versions) with ready-to-use extension RPM/DEB packages. Currently providing x86_64 packages; ARM64 and other architectures are in progress, currently available on-demand for professional users. Beyond the repository, more importantly, I maintain an Extension Catalog with detailed metadata for each extension, OS/DB version availability, and usage notes to help users find what they need.

ext-repo.png

Pigsty’s extension repository is based on native OS package managers, publicly shared — you don’t have to use Pigsty to install these extensions. You can add this repo to existing systems or Dockerfiles and install extensions via yum/apt install. I’m pleased that a popular open-source cluster deployment project, postgresql-cluster, already uses this repository by default as part of its installation process to distribute extensions.

postgresql-cluster.png

For more details, see “PostgreSQL Achieves Mastery: The Most Complete Extension Repository”. Currently, there are quite a few new projects developing extensions with Rust + pgrx, and Pigsty includes 23 Rust extensions. If you have good extension recommendations, let me know — I’ll evaluate and test them and add them to the repository ASAP. If you’re a PostgreSQL extension author, we welcome you to submit your extension to the Pigsty repository — we can help you package and distribute it, solving the last-mile delivery problem.


Ubuntu 24.04 Support

Ubuntu 24.04 noble has been out for half a year, and some users are now running it in production. Therefore, Pigsty v3.1 provides official Ubuntu 24.04 support.

That said, as a newer system, Ubuntu 24.04 still has some gaps compared to 22.04 — for example, citus and topn extensions are missing across the system, and timescaledb_toolkit doesn’t yet provide u24 x86_64 support. But overall, aside from these exceptions, the vast majority of extensions already support Ubuntu 24.04. Including it in Pigsty’s primary support scope makes sense.

Correspondingly, we’re removing Ubuntu 20.04 focal from Pigsty’s primary supported OS list, even though Ubuntu 20.04 doesn’t officially EOL until May next year. However, due to its significant software gaps and dependency version issues (PostGIS), I’m happy to deprecate it early and exclude it from open-source version support. Of course, you can technically still install and use it on Ubuntu 20.04, and we continue to provide Ubuntu 20.04 support in our subscription service.

Currently, Pigsty’s supported mainstream OS distributions are: EL 8/9, Ubuntu 22.04 / Ubuntu 24.04, and Debian 12 — five total. We provide the latest software packages and complete extension sets for these five OS distributions.

Code OS Distro x86_64 PG17 PG16 PG15 PG14 PG13 PG12 Arm64 PG17 PG16 PG15 PG14 PG13 PG12
EL9 RHEL 9 / Rocky9 / Alma9 el9.x86_64 Primary Supported Supported Supported Supported Legacy el9.arm64 Primary Supported Supported Supported Supported Legacy
EL8 RHEL 8 / Rocky8 / Alma8 / Anolis8 el8.x86_64 Primary Supported Supported Supported Supported Legacy el8.arm64 Primary Supported Supported Supported Supported Legacy
U24 Ubuntu 24.04 (noble) u24.x86_64 Primary Supported Supported Supported Supported Legacy u24.arm64 Primary Supported Supported Supported Supported Legacy
U22 Ubuntu 22.04 (jammy) u22.x86_64 Primary Supported Supported Supported Supported Legacy u22.arm64 Primary Supported Supported Supported Supported Legacy
D12 Debian 12 (bookworm) d12.x86_64 Primary Supported Supported Supported Supported Legacy d12.arm64 Primary Supported Supported Supported Supported Legacy
D11 Debian 11 (bullseye) d12.x86_64 Legacy Legacy Legacy Legacy Legacy Legacy d11.arm64
U20 Ubuntu 20.04 (focal) d12.x86_64 Legacy Legacy Legacy Legacy Legacy Legacy u20.arm64
EL7 RHEL7 / CentOS7 / UOS … d12.x86_64 Legacy Legacy Legacy Legacy el7.arm64

Primary = Primary version support; Supported = Configurable support; Legacy = Legacy version commercial support


ARM Support

ARM architecture has been gaining ground, especially in cloud computing where ARM server market share is steadily growing. As early as two years ago, users were requesting ARM architecture support. Actually, Pigsty already had ARM support from earlier “localization system” adaptation work. But providing ARM64 support in the open-source version — v3.1 is the first time.

Of course, in the current version, ARM is still in Beta: functionality exists and works, but we need to run it for a while with feedback to know how well it performs.

Currently, Pigsty’s main features are all adapted — things like Grafana / Prometheus have ARM packages ready. The part not yet supported is mainly PG extensions — specifically the 140 extensions maintained by Pigsty — which don’t have ARM support yet, but it’s in progress. However, if the extensions you use are already provided by PGDG (like postgis, pgvector), you’re good to go.

Currently, the ARM version runs well on EL9, Debian 12, and Ubuntu 22.04. EL8 has some missing official PGDG packages, and Ubuntu 24 has some individual missing extensions, so we don’t recommend using the ARM version on these two systems yet.

I plan to pilot ARM for one or two minor versions, and once extensions are complete, I’ll mark it as GA. Welcome to try the ARM version and provide feedback.


Configuration Simplification

Another significant improvement in Pigsty v3.1 is configuration simplification. Managing package differences across OS distributions and versions has always been a headache.

For example, because package names and available software vary across OS distributions, previous Pigsty versions generated a separate config file for each OS distribution. But this quickly leads to combinatorial explosion — if Pigsty provides a dozen scenario templates and each needs versions for 5-7 OS versions, the total count explodes.

But any problem in computer science can be solved by adding another layer of indirection, and this is no exception. In v3.1, Pigsty introduces a new package_map config file defining package aliases. Then for each OS distribution, we generate a node_id/vars config file that translates fixed package aliases to concrete package lists for that OS.

config.png

For example, the Supabase self-hosting template enables dozens of extensions — users just need to provide extension names, and details like chip architecture, OS version, PG version, and package names are all handled internally.

pg_extensions: # extensions to be installed on this cluster
- supabase   # essential extensions for supabase
- timescaledb postgis pg_graphql pg_jsonschema wrappers pg_search pg_analytics pg_parquet plv8 duckdb_fdw pg_cron pg_timetable pgqr
- supautils pg_plan_filter passwordcheck plpgsql_check pgaudit pgsodium pg_vault pgjwt pg_ecdsa pg_session_jwt index_advisor
- pgvector pgvectorscale pg_summarize pg_tiktoken pg_tle pg_stat_monitor hypopg pg_hint_plan pg_http pg_net pg_smtp_client pg_idkit

For example, if you want to download and install PG 16 kernel and extensions, previously you’d need to change all packages in the download and install lists to version 16 — now you just modify one pg_version parameter. The end result is excellent: basically all OS distributions can use the same config file for installation, hiding system differences and management complexity internally.


Infrastructure Improvements

Beyond functional improvements, we continue improving infrastructure. For example, installing the MSSQL-compatible Babelfish kernel, Oracle-compatible IvorySQL kernel, and PolarDB kernel introduced in v3.0 required users to use an external repo for online installation.

Now, the official Pigsty repository directly provides mirrors for Babelfish, IvorySQL, PolarDB, and other kernels — installing these “exotic flavor” PG replacement kernels is much simpler. The effect now is that no extra configuration is needed; just use the preset template for one-click installation.

Additionally, we maintain Prometheus and Grafana YUM/APT x AMD/ARM repositories, tracking these observability component versions in real-time. In this upgrade, Prometheus upgrades to v3, and VictoriaLogs officially releases v1. In summary, if you need these monitoring tools, Pigsty’s repository can help.


MinIO Improvements

Finally, let’s discuss open-source object storage self-hosting: MinIO. Pigsty uses MinIO as PostgreSQL backup storage and Supabase’s underlying storage service, aiming to lower MinIO’s deployment barrier to “if you have hands, you can do it” — Deploy in minutes, Scale to millions.

When we first used MinIO internally, it was still version 0.x, and MinIO has made great progress since then. Back then we stored 25 PB with MinIO, and since MinIO didn’t support online expansion, we had to split it into seven or eight independent clusters used sequentially. Now, while MinIO still can’t modify disk/node counts online, you can achieve smooth expansion by adding storage pools, migrating, and retiring old storage pools.

minio.png

In Pigsty v3.1, I re-read MinIO’s documentation and adjusted best practice config templates and SOPs based on new version features. Beyond the previous MinIO single-node single-disk, single-node multi-disk, and multi-node multi-disk modes, we now support multi-pool deployment mode and provide MinIO management playbooks in Pigsty — including disk failure handling, node failure handling, cluster lifecycle, storage scaling, and using VIP + HAProxy for HA access — all documented and solvable with a few commands.

Object storage is foundational infrastructure in the cloud. MinIO, as the representative of open-source object storage, excels in both performance and functionality — more importantly, it’s cloud-neutral open-source software.

You can also use MinIO to replace cloud object storage services. As DHH described in “Leaving the Cloud Exceeded Expectations, Saving $100M”, they had 10PB of cloud object storage (list price $3M/year), discounted to $1.3M/year via SavingsPlans — about ¥930K RMB / PB·year. A 1.2 PB dedicated storage server costs around ¥100K RMB, with 3-way replication redundancy, slap MinIO on a few of those and you have object storage. Add in network, power, and ops, and the entire 5-year TCO doesn’t exceed one year’s discounted cloud spend — that’s massive cost-saving potential. If your business heavily uses object storage, local MinIO self-hosting + Cloudflare might be a much better solution worth considering.


Service System

Pigsty v3.1 has reached a state I’m fairly satisfied with. Going forward, my focus will shift to building the service system.

Pigsty is free open-source software that already solves the vast majority of PG operations problems. If you’re an open-source veteran, you can handle edge cases yourself. But for some enterprise users, especially those without dedicated DBAs, someone needs to “backstop” — after all, the core of open-source software is NO WARRANTY.

As discussed in “PolarDB ¥20 Brothers: What Should Databases Really Cost”, proper database services have a fair market price, typically around ¥10-20K RMB / vCPU·year. Whether you buy Oracle support, EDB, Fujitsu’s open-source PG services, or AWS RDS/Aurora — it’s all in this price range.

My previous service pricing was too low, drawing comments from domestic and international peers — “Aren’t you destroying the market with dumping? You as a top domestic PG expert setting and publishing this price, what are we supposed to do?”

price.png

So this time I’ve re-adjusted the pricing system, basically anchoring to industry average pricing levels. After all, it’s a mutual choice — welcome interested friends to purchase professional services and support! New customers get new pricing, existing customers keep old pricing.


v3.1.0 Release Notes

Highlights

  • PostgreSQL 17 is now the default major version (17.2)
  • Ubuntu 24.04 system support
  • ARM architecture support: EL9, Debian12, Ubuntu 22.04
  • One-click Supabase self-hosting, new supabase.yml playbook
  • MinIO best practice improvements, config templates and Vagrant templates
  • Series of ready-to-use config templates with documentation
  • Allow specifying PG major version with -v|--version during configure
  • Adjusted default extension policy: pg_repack, wal2json, and pgvector installed by default
  • Greatly simplified repo_packages local repo build logic, allowing package group aliases in repo_packages
  • Provided WiltonDB, IvorySQL, PolarDB repo mirrors, simplifying installation
  • Database checksums enabled by default
  • Fixed ETCD and MINIO log panels

Software Upgrades

  • PostgreSQL 17.2, 16.6, 15.10, 14.15, 13.18, 12.22
  • PostgreSQL extension versions: see https://pgext.cloud/en
  • Patroni 4.0.4
  • MinIO 20241107 / MCLI 20241117
  • Rclone 1.68.2
  • Prometheus: 2.54.0 -> 3.0.0
  • VictoriaMetrics 1.102.1 -> 1.106.1
  • VictoriaLogs v0.28.0 -> 1.0.0
  • vslogcli 1.0.0
  • MySQL Exporter 0.15.1 -> 0.16.0
  • Redis Exporter 1.62.0 -> 1.66.0
  • MongoDB Exporter 0.41.2 -> 0.42.0
  • Keepalived Exporter 1.3.3 -> 1.4.0
  • DuckDB 1.1.2 -> 1.1.3
  • etcd 3.5.16 -> 3.5.17
  • tigerbeetle 16.8 -> 0.16.13

API Changes

  • repo_upstream: Generates defaults for each specific OS distribution: roles/node_id/vars
  • repo_packages: Allows aliases defined in package_map
  • repo_extra_packages: New default when unspecified, allows aliases defined in package_map
  • pg_checksum: Default changed to true, enabled by default
  • pg_packages: Default changed to: postgresql, wal2json pg_repack pgvector, patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • pg_extensions: Default changed to empty array []
  • infra_portal: Allows specifying path for home server, replacing default local repo path nginx_home (/www)

1.23 - Pigsty v3.0: Pluggable Kernels & 340 Extensions

Originally published on VONNG.

GitHub Release | Release Note


Highlights

Extension Explosion:

Pigsty v3 ships an unprecedented 340 available PostgreSQL extensions. This includes 121 extension RPM packages and 133 DEB packages — more than the total extension count in the official PGDG repositories (135 RPM / 109 DEB). Moreover, Pigsty cross-ports EL-exclusive and Debian-exclusive extensions, achieving full ecosystem parity between the two major Linux families.

- timescaledb periods temporal_tables emaj table_version pg_cron pg_later pg_background pg_timetable
- postgis pgrouting pointcloud pg_h3 q3c ogr_fdw geoip #pg_geohash #mobilitydb
- pgvector pgvectorscale pg_vectorize pg_similarity pg_tiktoken pgml #smlar
- pg_search pg_bigm zhparser hunspell
- hydra pg_lakehouse pg_duckdb duckdb_fdw pg_fkpart pg_partman plproxy #pg_strom citus
- pg_hint_plan age hll rum pg_graphql pg_jsonschema jsquery index_advisor hypopg imgsmlr pg_ivm pgmq pgq #rdkit
- pg_tle plv8 pllua plprql pldebugger plpgsql_check plprofiler plsh #pljava plr pgtap faker dbt2
- prefix semver pgunit md5hash asn1oid roaringbitmap pgfaceting pgsphere pg_country pg_currency pgmp numeral pg_rational pguint ip4r timestamp9 chkpass #pg_uri #pgemailaddr #acl #debversion #pg_rrule
- topn pg_gzip pg_http pg_net pg_html5_email_address pgsql_tweaks pg_extra_time pg_timeit count_distinct extra_window_functions first_last_agg tdigest aggs_for_arrays pg_arraymath pg_idkit pg_uuidv7 permuteseq pg_hashids
- sequential_uuids pg_math pg_random pg_base36 pg_base62 floatvec pg_financial pgjwt pg_hashlib shacrypt cryptint pg_ecdsa pgpcre icu_ext envvar url_encode #pg_zstd #aggs_for_vecs #quantile #lower_quantile #pgqr #pg_protobuf
- pg_repack pg_squeeze pg_dirtyread pgfincore pgdd ddlx pg_prioritize pg_checksums pg_readonly safeupdate pg_permissions pgautofailover pg_catcheck preprepare pgcozy pg_orphaned pg_crash pg_cheat_funcs pg_savior table_log pg_fio #pgpool pgagent
- pg_profile pg_show_plans pg_stat_kcache pg_stat_monitor pg_qualstats pg_store_plans pg_track_settings pg_wait_sampling system_stats pg_meta pgnodemx pg_sqlog bgw_replstatus pgmeminfo toastinfo pagevis powa pg_top #pg_statviz #pgexporter_ext #pg_mon
- passwordcheck supautils pgsodium pg_vault anonymizer pg_tde pgsmcrypto pgaudit pgauditlogtofile pg_auth_mon credcheck pgcryptokey pg_jobmon logerrors login_hook set_user pg_snakeoil pgextwlist pg_auditor noset #sslutils
- wrappers multicorn mysql_fdw tds_fdw sqlite_fdw pgbouncer_fdw mongo_fdw redis_fdw pg_redis_pubsub kafka_fdw hdfs_fdw firebird_fdw aws_s3 log_fdw #oracle_fdw #db2_fdw
- orafce pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pgmemcache #pg_dbms_job #wiltondb
- pglogical pgl_ddl_deploy pg_failover_slots wal2json wal2mongo decoderbufs decoder_raw mimeo pgcopydb pgloader pg_fact_loader pg_bulkload pg_comparator pgimportdoc pgexportdoc #repmgr #slony
- gis-stack rag-stack fdw-stack fts-stack etl-stack feat-stack olap-stack supa-stack stat-stack json-stack

Pluggable Kernels:

Pigsty v3 lets you swap out the PostgreSQL kernel. Current options include SQL Server-compatible Babelfish (wire-protocol-level emulation), Oracle-compatible IvorySQL, and PolarDB (the PostgreSQL RAC). Self-hosted Supabase is also now available on Debian systems. You can run production-grade PostgreSQL clusters with HA, IaC, PITR, and full observability while emulating MSSQL (via WiltonDB), Oracle (via IvorySQL), Oracle RAC (via PolarDB), MongoDB (via FerretDB), or Firebase (via Supabase).

Pro Edition:

We now offer Pigsty Pro Professional Edition, providing value-added services on top of the open-source version. Pro includes additional modules: MSSQL, Oracle, Mongo, K8S, Victoria, Kafka, TigerBeetle, and more, with broader support for PG major versions, operating systems, and chip architectures. It provides precision-tuned offline packages for every OS minor version, plus support for legacy systems like EL7, Debian 11, and Ubuntu 20.04. Pro also offers customizable kernel support with native deployment, monitoring, and management for PolarDB PG/Oracle to meet localization requirements.

Quick Install:

curl -fsSL https://repo.pigsty.cc/get | bash
cd ~/pigsty; ./bootstrap; ./configure; ./install.yml

Breaking Changes

This Pigsty release bumps from 2.x to 3.0, introducing several breaking changes:

  • Primary OS support shifts to: EL 8 / EL 9 / Debian 12 / Ubuntu 22.04

    • EL7 / Debian 11 / Ubuntu 20.04 are now deprecated and no longer supported
    • Users requiring these systems should consider our subscription service
  • Default installation is now online; offline packages are no longer provided, resolving OS minor version compatibility issues.

    • The bootstrap process no longer prompts for offline package download, but will still auto-use one if /tmp/pkg.tgz exists.
    • For offline installation needs, build your own packages or consider our subscription service
  • Pigsty upstream repositories have been consolidated, addresses changed, with GPG signing and verification for all packages

    • Standard repo: https://repo.pigsty.io/{apt/yum}
    • China mirror: https://repo.pigsty.cc/{apt/yum}
  • API parameter changes and config template updates

    • EL and Debian config templates are now unified, with OS-specific parameters managed in roles/node_id/vars/.
    • Config directory restructured: all templates now in conf/, organized into default, dbms, demo, build categories.

Other Features

  • Epic OLAP enhancement: DuckDB 1.0.0, DuckDB FDW, PG Lakehouse, and Hydra ported to Debian.
  • Vector search and FTS improvements: Vectorscale brings DiskANN vector indexing, Hunspell dictionary support, pg_search 0.9.1.
  • Helped ParadeDB resolve package build issues — this extension is now available on Debian/Ubuntu.
  • All Supabase-required extensions now available on Debian/Ubuntu; Supabase can now self-host on all supported OSes.
  • Scenario-based extension stacks: if you’re unsure which extensions to install, we’ve prepared recommended bundles for specific use cases.
  • Complete metadata tables, docs, indexes, and name mappings for all PostgreSQL ecosystem extensions, aligned across EL and Debian.
  • Enhanced proxy_env parameter to address DockerHub access issues, with simplified configuration.
  • Built a dedicated new repository providing all extensions for PostgreSQL 12-17, with PG16 extensions enabled by default in Pigsty.
  • Upgraded existing repos with standard GPG signing and verification. APT repos now use standard layout built with reprepro.
  • Sandbox environments for 1, 2, 3, 4, and 43 nodes: meta, dual, trio, full, prod, plus quick config templates for 7 major OS distros.
  • PG Exporter adds PostgreSQL 17 and pgBouncer 1.23 metric collectors, with corresponding Grafana panels.
  • Monitoring dashboard fixes, added log dashboards for PGSQL Pgbouncer and PGSQL Patroni panels.
  • New cache.yml Ansible playbook replaces the old bin/cache and bin/release-pkg scripts for offline package creation.

API Changes

  • New parameter option: pg_mode now supports pgsql, citus, gpsql, mssql, ivory, polar for specifying PostgreSQL cluster mode
    • pgsql: Standard PostgreSQL HA cluster
    • citus: Citus distributed PostgreSQL native HA cluster
    • gpsql: Monitoring for Greenplum and GP-compatible databases (Pro)
    • mssql: Install WiltonDB/Babelfish, providing Microsoft SQL Server compatibility mode with wire-protocol support, extensions unavailable
    • ivory: Install IvorySQL for Oracle-compatible PostgreSQL HA cluster with Oracle syntax/datatypes/functions/stored procedures, extensions unavailable (Pro)
    • polar: Install PolarDB for PostgreSQL (PG RAC) open-source version for localized database support, extensions unavailable (Pro)
  • New parameter: pg_parameters for instance-level postgresql.auto.conf overrides, enabling per-instance customization.
  • New parameter: pg_files for copying additional files to PGDATA, designed for commercial PostgreSQL forks requiring license files.
  • New parameter: repo_extra_packages for specifying additional packages to download, works with repo_packages for OS-specific extension lists.
  • Parameter rename: patroni_citus_db renamed to pg_primary_db for specifying the primary database in a cluster (used in Citus mode)
  • Enhanced proxy_env: Proxy server config now written to Docker Daemon for network access; configure -x auto-writes current environment proxy settings.
  • Enhanced repo_url_packages: repo.pigsty.io auto-replaces with repo.pigsty.cc when region is China; can now specify downloaded filenames.
  • Enhanced pg_databases.extensions: The extension field now supports both dictionary and string modes; dictionary mode provides version support for installing specific extension versions.
  • Enhanced repo_upstream: If not explicitly overridden, defaults are extracted from repo_upstream_default in rpm.yml or deb.yml.
  • Enhanced repo_packages: If not explicitly overridden, defaults are extracted from repo_packages_default in the corresponding OS vars file.
  • Enhanced infra_packages: If not explicitly overridden, defaults are extracted from infra_packages_default in the corresponding OS vars file.
  • Enhanced node_default_packages: If not explicitly overridden, defaults are extracted from node_packages_default in the corresponding OS vars file.
  • Enhanced pg_packages and pg_extensions: Extensions now undergo lookup and translation from pg_package_map in the corresponding OS vars file.
  • Enhanced node_packages and pg_extensions: Packages are upgraded to latest version during installation; node_packages default now includes [openssh-server] to help fix OpenSSH CVE
  • Enhanced pg_dbsu_uid: Auto-adjusts to 26 (EL) or 543 (Debian) based on OS type, avoiding manual adjustment.
  • Bootstrap logic change: No longer downloads offline packages; added -k|--keep flag to preserve existing package sources during local ansible installation.
  • Configure: Removed -m|--mode parameter; use -m|--conf to specify config file, -x|--proxy for proxy config; no longer attempts to fix local SSH issues.
  • pgbouncer defaults: max_prepared_statements = 128 enables prepared statement support in transaction pooling mode; server_lifetime set to 600.
  • Patroni template defaults: Increased max_worker_processes by +8, raised max_wal_senders and max_replication_slots to 50, increased OLAP template temp file limit to 1/5 of main disk.

Software Upgrades

At release time, Pigsty’s major component versions are:

Pigsty has recompiled all PostgreSQL extensions. For the latest extension versions, see the Extension List.


New Applications

Pigsty now provides out-of-the-box Docker Compose templates for Dify and Odoo:

  • Dify: AI agent workflow orchestration and LLMOps
  • Odoo: Enterprise-grade open-source ERP system

Pigsty Pro now offers pilot Kubernetes deployment support and Kafka KRaft cluster deployment with monitoring:

  • KUBE: Deploy Pigsty-managed Kubernetes clusters using cri-dockerd or containerd
  • KAFKA: Deploy HA Kafka clusters powered by the KRaft protocol

Bug Fixes

  • CVE-2024-6387 is automatically patched during Pigsty installation via the node_packages default value [openssh-server].
  • Fixed Loki memory consumption issue caused by high-cardinality Nginx log labels.
  • Fixed bootstrap failure on EL8 due to upstream Ansible dependency changes (python3.11-jmespath upgraded to python3.12-jmespath).

v3.0.0 Release Notes

Highlights

  • PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20
  • 340 PostgreSQL extensions available
  • EL/Debian extension ecosystem parity achieved
  • Pluggable kernels: Babelfish, IvorySQL, PolarDB support
  • Supabase now available on Debian systems
  • Pigsty Pro edition with extended OS and module support

Breaking Changes

  • Primary OS support: EL8/EL9, Debian 12, Ubuntu 22.04
  • Legacy systems (EL7, Debian 11, Ubuntu 20.04) require subscription
  • Default online installation; offline packages discontinued
  • Repository consolidation with GPG signing

API Changes

  • New pg_mode options: pgsql, citus, gpsql, mssql, ivory, polar
  • New parameters: pg_parameters, pg_files, repo_extra_packages
  • patroni_citus_db renamed to pg_primary_db
  • Enhanced: proxy_env, repo_url_packages, pg_databases.extensions
  • Auto-derived defaults for repo_upstream, repo_packages, infra_packages, node_default_packages
  • Bootstrap -k|--keep flag; Configure -m|--conf and -x|--proxy flags

Bug Fixes

  • OpenSSH CVE-2024-6387 auto-remediation
  • Loki high-cardinality label memory fix
  • EL8 Ansible dependency bootstrap fix
MD5 (pigsty-v3.0.0.tgz) = acc802fc2a47a838f09a39e7615ee4d9

1.24 - Self-Hosting Dify with PG, PGVector, and Pigsty

Originally published on VONNG.

Dify – The Innovation Engine for GenAI Applications

Dify is an open-source LLM app development platform. Orchestrate LLM apps from agents to complex AI workflows, with an RAG engine. Which claims to be more production-ready than LangChain.

Of course, a workflow orchestration software like this needs a database underneath — Dify uses PostgreSQL for meta data storage, as well as Redis for caching and a dedicated vector database. You can pull the Docker images and play locally, but for production deployment, this setup won’t suffice — there’s no HA, backup, PITR, monitoring, and many other things.

Fortunately, Pigsty provides a battery-include production-grade highly available PostgreSQL cluster, along with the Redis and S3 (MinIO) capabilities that Dify needs, as well as Nginx to expose the Web service, making it the perfect companion for Dify.

docker-compose.png

Off-load the stateful part to Pigsty, you only need to pull up the stateless blue circle part with a simple docker compose up.

BTW, I have to criticize the design of the Dify template. Since the metadata is already stored in PostgreSQL, why not add pgvector to use it as a vector database? What’s even more baffling is that pgvector is a separate image and container. Why not just use a PG image with pgvector included?

Dify “supports” a bunch of flashy vector databases, but since PostgreSQL is already chosen, using pgvector as the default vector database is the natural choice. Similarly, I think the Dify team should consider removing Redis. Celery task queues can use PostgreSQL as backend storage, so having multiple databases is unnecessary. Entities should not be multiplied without necessity.

Therefore, the Pigsty-provided Dify Docker Compose template has made some adjustments to the official example. It removes the db and redis database images, using instances managed by Pigsty. The vector database is fixed to use pgvector, reusing the same PostgreSQL instance.

In the end, the architecture is simplified to three stateless containers: dify-api, dify-web, and dify-worker, which can be created and destroyed at will. There are also two optional containers, ssrf_proxy and nginx, for providing proxy and some security features.

There’s a bit of state management left with file system volumes, storing things like private keys. Regular backups are sufficient.

Reference:


Pigsty Preparation

Let’s take the single-node installation of Pigsty as an example. Suppose you have a machine with the IP address 10.10.10.10 and already pigsty installed.

We need to define the database clusters required in the Pigsty configuration file pigsty.yml.

Here, we define a cluster named pg-meta, which includes a superuser named dbuser_dify (the implementation is a bit rough as the Migration script executes CREATE EXTENSION which require dbsu privilege for now),

And there’s a database named dify with the pgvector extension installed, and a specific firewall rule allowing users to access the database from anywhere using a password (you can also restrict it to a more precise range, such as the Docker subnet 172.0.0.0/8).

Additionally, a standard single-instance Redis cluster redis-dify with the password redis.dify is defined.

pg-meta:
  hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
  vars:
    pg_cluster: pg-meta
    pg_users: [ { name: dbuser_dify ,password: DBUser.Dify  ,superuser: true ,pgbouncer: true ,roles: [ dbrole_admin ] } ]
    pg_databases: [ { name: dify, owner: dbuser_dify, extensions: [ { name: pgvector } ] } ]
    pg_hba_rules: [ { user: dbuser_dify , db: all ,addr: world ,auth: pwd ,title: 'allow dify user world pwd access' } ]

redis-dify:
  hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { } } } }
  vars: { redis_cluster: redis-dify ,redis_password: 'redis.dify' ,redis_max_memory: 64MB }

For demonstration purposes, we use single-instance configurations. You can refer to the Pigsty documentation to deploy high availability PG and Redis clusters. After defining the clusters, use the following commands to create the PG and Redis clusters:

bin/pgsql-add  pg-meta                # create the dify database cluster
bin/redis-add  redis-dify             # create redis cluster

Alternatively, you can define a new business user and business database on an existing PostgreSQL cluster, such as pg-meta, and create them with the following commands:

bin/pgsql-user pg-meta dbuser_dify    # create dify biz user
bin/pgsql-db   pg-meta dify           # create dify biz database

You should be able to access PostgreSQL and Redis with the following connection strings, adjusting the connection information as needed:

psql postgres://dbuser_dify:[email protected]:5432/dify -c 'SELECT 1'
redis-cli -u redis://[email protected]:6379/0 ping

Once you confirm these connection strings are working, you’re all set to start deploying Dify.

For demonstration purposes, we’re using direct IP connections. For a multi-node high availability PG cluster, please refer to the service access section.

The above assumes you are already a Pigsty user familiar with deploying PostgreSQL and Redis clusters. You can skip the next section and proceed to see how to configure Dify.


Starting from Scratch

If you’re already familiar with setting up Pigsty, feel free to skip this section.

Prepare a fresh Linux x86_64 node that runs compatible OS, then run as a sudo-able user:

curl -fsSL https://repo.pigsty.io/get | bash

It will download the Pigsty source to your home, then configure and install it.

cd ~/pigsty   # get pigsty source and entering dir
./bootstrap   # download bootstrap pkgs & ansible [optional]
./configure   # pre-check and config templating   [optional]

# change pigsty.yml, adding those cluster definitions above into all.children 

./install.yml # install pigsty according to pigsty.yml

You should insert the above PostgreSQL cluster and Redis cluster definitions into the pigsty.yml file, then run install.yml to complete the installation.

Redis Deploy

Pigsty will not deploy redis in install.yml, so you have to run redis.yml playbook to install Redis explicitly:

./redis.yml

Docker Deploy

Pigsty will not deploy Docker by default, so you need to install Docker with the docker.yml playbook.

./docker.yml

Dify Configuration

You can configure dify in the .env file:

All parameters are self-explanatory and filled in with default values that work directly in the Pigsty sandbox env. Fill in the database connection information according to your actual conf, consistent with the PG/Redis cluster configuration above.

Changing the SECRET_KEY field is recommended. You can generate a strong key with openssl rand -base64 42:

# meta parameter
DIFY_PORT=8001 # expose dify nginx service with port 8001 by default
LOG_LEVEL=INFO # The log level for the application. Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U # A secret key for signing and encryption, gen with `openssl rand -base64 42`

# postgres credential
PG_USERNAME=dbuser_dify
PG_PASSWORD=DBUser.Dify
PG_HOST=10.10.10.10
PG_PORT=5432
PG_DATABASE=dify

# redis credential
REDIS_HOST=10.10.10.10
REDIS_PORT=6379
REDIS_USERNAME=''
REDIS_PASSWORD=redis.dify

# minio/s3 [OPTIONAL] when STORAGE_TYPE=s3
STORAGE_TYPE=local
S3_ENDPOINT='https://sss.pigsty'
S3_BUCKET_NAME='infra'
S3_ACCESS_KEY='dba'
S3_SECRET_KEY='S3User.DBA'
S3_REGION='us-east-1'

Now we can pull up dify with docker compose:

cd pigsty/app/dify && make up

Expose Dify Service via Nginx

Dify expose web/api via its own nginx through port 80 by default, while pigsty uses port 80 for its own Nginx. T

herefore, we expose Dify via port 8001 by default, and use Pigsty’s Nginx to forward to this port.

Change infra_portal in pigsty.yml, with the new dify line:

infra_portal:                     # domain names and upstream servers
  home         : { domain: h.pigsty }
  grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
  prometheus   : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
  alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
  blackbox     : { endpoint: "${admin_ip}:9115" }
  loki         : { endpoint: "${admin_ip}:3100" }
  
  dify         : { domain: dify.pigsty ,endpoint: "10.10.10.10:8001", websocket: true }

Then expose dify web service via Pigsty’s Nginx server:

./infra.yml -t nginx

Don’t forget to add dify.pigsty to your DNS or local /etc/hosts / C:\Windows\System32\drivers\etc\hosts to access via domain name.

1.25 - Pigsty v2.7: The Extension Superpack

Originally published on VONNG.

GitHub Release | Release Note

On 2024-05-20, Pigsty v2.7 is released. The number of available extensions in this version reaches an astonishing 255, successfully elevating PostgreSQL’s versatility to a new height!

Additionally, we provide some new Docker app templates, including the open-source enterprise ERP suite — Odoo, Jupyter Notebook, and are the first to support Supabase GA version.

We’ve also paved the way for upcoming container versions, provided PolarDB support to help users pass domestic compliance audits, and officially differentiated Pro and Open Source editions.


Extensions Galore

In “PostgreSQL is Eating the Database World,” I argued that PostgreSQL isn’t just a relational database — it’s a data management abstraction framework with the power to encompass everything and devour the entire database world.

What enables PG to do this, beyond being open source and advanced, is the real secret: extensionsextreme extensibility and a thriving extension ecosystem are PostgreSQL’s unique characteristics and the secret weapon that sets it apart from countless other databases.

Therefore, in Pigsty v2.7, we’ve re-examined the entire PostgreSQL ecosystem’s extensions and included some standouts:

Extension Version Description
pg_jsonschema 0.3.1 JSON Schema validation
wrappers 0.3.1 Supabase’s foreign data wrapper bundle
duckdb_fdw 1.1 DuckDB foreign data wrapper (libduck 0.10.2)
pg_search 0.7.0 ParadeDB BM25 full-text search
pg_lakehouse 0.7.0 ParadeDB lakehouse analytics engine
pg_analytics 0.6.1 Accelerated analytics in PostgreSQL
pgmq 1.5.2 Lightweight message queue like AWS SQS/RSMQ
pg_tier 0.0.3 Tier cold data to AWS S3
pg_vectorize 0.15.0 RAG vector search wrapper in PG
pg_later 0.1.0 Execute SQL now, get results later
pg_idkit 0.2.3 Generate various IDs: UUIDv6, ULID, KSUID
plprql 0.1.0 PRQL pipelined query language in PostgreSQL
pgsmcrypto 0.1.0 Chinese SM cryptography: SM2, SM3, SM4
pg_tiktoken 0.0.1 Count OpenAI tokens
pgdd 0.5.2 Query database catalog via standard SQL
parquet_s3_fdw 1.1.0 Parquet FDW for S3/MinIO
plv8 3.2.2 PL/JavaScript (V8) trusted language
md5hash 1.0.1 Native 128-bit MD5 data type
pg_tde 1.0-alpha Experimental encrypted storage engine
pg_dirtyread 2.6 Read dead tuples for dirty reads

Many of these are extensions developed with Rust and pgrx, providing incredibly powerful capabilities:


Supabase’s wrappers looks like one extension, but it actually provides a Rust FDW framework with access to ten external data sources!

FDW Description Read Modify
HelloWorld Demo FDW for basic FDW development
BigQuery FDW for Google BigQuery
Clickhouse FDW for ClickHouse
Stripe FDW for Stripe API
Firebase FDW for Google Firebase
Airtable FDW for Airtable API
S3 FDW for AWS S3
Logflare FDW for Logflare
Auth0 FDW for Auth0
SQL Server FDW for Microsoft SQL Server
Redis FDW for Redis
AWS Cognito FDW for AWS Cognito

This means you can now read and write BigQuery, ClickHouse, and Stripe data from PostgreSQL. Firebase, Airtable, S3, Logflare, Auth0, SQL Server, Redis, and Cognito also provide SQL read access through PostgreSQL.


The plprql extension provides a new SQL-like database query language called PRQL:

from invoices
filter invoice_date >= @1970-01-16
derive {
  transaction_fees = 0.8,
  income = total - transaction_fees
}
filter income > 1
group customer_id (
  aggregate {
    average total,
    sum_income = sum income,
    ct = count total,
  }
)
sort {-sum_income}
take 10
join c=customers (==customer_id)
derive name = f"{c.last_name}, {c.first_name}"
select {
  c.customer_id, name, sum_income
}
derive db_version = s"version()"

And the new plv8 extension allows you to write stored procedures in JavaScript within PostgreSQL — the richness of PostgreSQL’s procedural language support is truly amazing!

Procedural Languages

parquet_s3_fdw might seem like it just lets you access Parquet files on S3, but its significance is that PG can become a true lakehouse — essentially adding an analytics engine with unlimited storage capacity!

Built on top of it, pg_tier provides convenient tiered cold storage — you can easily archive rarely accessed massive cold data from PG to S3/MinIO using SQL!

If Parquet alone isn’t enough, ParadeDB’s pg_lakehouse takes this to a new level — you can now use PG directly as a lakehouse, reading Parquet, CSV, JSON, Avro, DeltaLake, and upcoming ORC format files from S3/MinIO/local filesystem for lakehouse analytics!

CREATE EXTENSION pg_lakehouse;
CREATE FOREIGN DATA WRAPPER s3_wrapper HANDLER s3_fdw_handler VALIDATOR s3_fdw_validator;

-- Provide S3 credentials
CREATE SERVER s3_server FOREIGN DATA WRAPPER s3_wrapper
OPTIONS (region 'us-east-1', allow_anonymous 'true');

-- Create foreign table
CREATE FOREIGN TABLE trips (
    "VendorID"              INT,
    "tpep_pickup_datetime"  TIMESTAMP,
    "tpep_dropoff_datetime" TIMESTAMP,
    "passenger_count"       BIGINT,
    "trip_distance"         DOUBLE PRECISION,
    ...
)
SERVER s3_server
OPTIONS (path 's3://paradedb-benchmarks/yellow_tripdata_2024-01.parquet', extension 'parquet');

-- Query remote Parquet like a regular Postgres table
SELECT COUNT(*) FROM trips;
  count
---------
 2964624

ParadeDB’s pg_analytics and pg_search are also noteworthy — the former provides first-tier analytics performance, while the latter offers ElasticSearch BM25 full-text search capability as a PG alternative.

Tembo also provides four practical Rust PG extensions. Their pgmq provides a lightweight message queue API on PG, similar to AWS SQS and RSMQ, as an alternative to pgq.


In AI, pgvector 0.7 introduces major upgrades: sparse vectors (retiring pg_sparse!), half float quantization, doubled max vector dimensions to 4000, binary quantization (up to 64K dims), two new distance metrics and indexes. Most importantly, SIMD instructions are now supported — performance has improved dramatically compared to a year ago!

Plus other AI extensions: pg_vectorize helps wrap RAG services, pg_tiktoken counts OpenAI tokens in PG, pg_similarity provides 17 additional distance metrics, imgsmlr provides image similarity functions, bigm provides bigram-based full-text search, zhparser provides Chinese word segmentation.


For new data types: md5hash lets you efficiently store 128-bit MD5 digests natively. pg_idkit generates a dozen different ID schemes (UUIDv6, UUIDv7, nanoid, ksuid, ulid, etc.). rrule stores, parses, and processes calendar recurring events.


For database administration: pgdd accesses PG catalog via SQL, pg_later executes SQL asynchronously, pg_dirtyread reads dead tuples for data recovery, pg_show_plans shows running query execution plans!

For encryption: pg_tde provides experimental transparent encryption storage, pgsmcrypto provides Chinese SM cryptography (SM2,3,4) support.


Achieving Completeness

Including previous extensions, Pigsty v2.7 has 255 PG extensions available across all operating systems. We can proudly say that no distribution or provider in the PostgreSQL ecosystem matches our extension count:

Extensions

On EL systems, 230 RPM extensions are available (73 built-in + 157 third-party, 34 Pigsty-maintained). On Debian/Ubuntu, 189 DEB extensions are available (73 built-in + 116 third-party, 10 Pigsty-maintained).

Extensions are organized into 11 categories by function:

Category Extensions
TYPE pg_uuidv7, pgmp, semver, timestamp9, uint, roaringbitmap, unit, prefix, md5hash, ip4r, asn1oid, pg_rrule, pg_rational, debversion, numeral, pgfaceting
GIS pointcloud, pgrouting, h3, postgis, mobilitydb, geoip, h3_postgis, pointcloud_postgis
AI pg_tiktoken, imgsmlr, svector, pg_similarity, pgml, vectorize, vector
OLAP pg_lakehouse, duckdb_fdw, citus_columnar, parquet_s3_fdw, columnar, pg_analytics, timescaledb, pg_tier
FDW hdfs_fdw, mysql_fdw, pgbouncer_fdw, mongo_fdw, sqlite_fdw, tds_fdw, ogr_fdw, oracle_fdw, multicorn, db2_fdw, wrappers

These extensions can be combined for synergy, achieving 1+1 » 2 effects.

As TimescaleDB CEO Ajay stated in “Why PostgreSQL is the Foundation of Future Data,” PostgreSQL is becoming the de facto database standard.

Through the magic of extreme extensibility, PostgreSQL achieves completeness, balancing core stability with feature agility. A solid foundation plus amazing evolution speed makes it an anomaly in the database world, fundamentally changing the rules of the game.

Today, PostgreSQL is unstoppable. And Pigsty gives PostgreSQL wings to soar.


Out-of-the-Box ERP

Similar to “domestic databases,” many domestic ERP software is awkwardly positioned because there’s already a good enough open-source ERP — Odoo (formerly OpenERP).

Many Pigsty users run PG for Odoo, which piqued my curiosity. After exploring the Odoo community and trying it myself, it’s incredibly powerful — wish I’d tried it earlier instead of fumbling with DIY solutions.

Odoo Introduction

Odoo has many plugins with functionality far exceeding expectations — a true enterprise application suite king.

As open-source free software, Odoo monetizes via premium plugins, with reasonable subscription pricing. For those who want everything free, the community provides open-source alternatives for premium plugins!

Odoo Modules

Odoo uses only PostgreSQL for data storage. The entire ERP suite needs just one PG database and one Docker image! A perfect PostgreSQL killer app example.

As a PostgreSQL distribution, there’s no reason not to support Odoo. Pigsty v2.7 provides a Docker Compose template for one-click Odoo deployment. You can reuse Pigsty’s infrastructure to easily expose web services via Nginx with HTTPS.

The result: on a bare VM, you can spin up a production-quality enterprise ERP with just a few commands!


PITR and Dashboards

ERP systems like Odoo have very different database requirements from traditional internet applications. I saw this in the Odoo community: “My Odoo has been running for years, now PostgreSQL has 2.5GB of data,” with replies: “That’s really big!

2.5 GB is trivial for internet-scale apps but huge for ERP systems. Unlike performance and HA, ERP systems prioritize data integrity and confidentiality — often running on a single server without HA, needing only backup and Point-in-Time Recovery (PITR).

Pigsty already provides out-of-the-box PITR for rollback to any point in time. But the required information was scattered across the monitoring system, so Pigsty v2.7 provides a dedicated PGSQL PITR dashboard for PITR context.

PITR Dashboard

Open Source vs Pro Edition

In Pigsty v2.7, we’ve narrowed open-source OS support to Redhat, Debian, and Ubuntu mainlines. We provide first-class PostgreSQL 16 support on EL8, Debian12, and Ubuntu22.04 with offline packages. EL7, EL9, Debian11, and Ubuntu20.04 can still use Pigsty but won’t have offline packages — only online installation for initial deployment.

Pigsty OSS Pigsty Basic Pigsty Pro Pigsty Enterprise
Free! 50,000 ¥/year 150,000 ¥/year 400,000 ¥/year
Self-sufficient veterans Or 5,000 ¥/month Or 15,000 ¥/month Or 40,000 ¥/month
PG: 16 PG: 15, 16 PG: 12-16 PG: 9.0-16
OS: 3 main versions OS: 5 latest versions OS: All 5 versions OS: Custom

Pro differs mainly in compatibility and modules — PostgreSQL major versions, OS versions, and chip architectures.

In the original design, open source would include only INFRA, NODE, PGSQL, ETCD core modules. I debated whether to move MinIO, Redis, FerretDB (Mongo), and Docker to Pro, but ultimately kept them in open source — they’re already open, no reason to remove them. But future modules less related to PostgreSQL (Greenplum, MySQL, DuckDB, Kafka, Mongo, SealOS Cloud) will be Pro-only.

For compatibility, Pigsty Pro provides full lifecycle PG 12-16 support across seven major OS versions. We also maintain complete ARM64 Prometheus & Grafana repos for ARM servers and “domestic chips.”


Looking Forward

Overall, Pigsty has reached my ideal state. Functionally, it’s already excellent! Exceeding RDS in some areas (like extension support and monitoring!).

But as they say, even fine wine fears a deep alley — so upcoming work will shift to operations, marketing, and sales. Sustainable open source requires user and customer support. If Pigsty has helped you, please consider sponsoring us or purchasing our subscriptions.

Speaking of marketing — next week (May 28), I’ll be in Vancouver for 2024 PostgreSQL Developer Conference, a.k.a. the first PGConf.Dev (formerly PG Con), discussing PostgreSQL’s future and pushing Pigsty to the global stage!


v2.7.0 Release Notes

Highlights

New powerful extensions, especially Rust/pgrx-developed ones:

C/C++ extensions:

New Features

  • Allow Pigsty to run in Docker VM images
  • ARM64 packages for INFRA & PGSQL modules on Ubuntu and EL
  • New installer script with Cloudflare download, version specification, better prompts
  • PGSQL PITR dashboard for PITR observability
  • Guardrails to prevent running playbooks on unmanaged nodes
  • Per-distro config files: el7, el8, el9, debian11, debian12, ubuntu20, ubuntu22

Docker App Templates

Software Upgrades

  • PostgreSQL 16.3
  • Patroni 3.3.0
  • pgBackRest 2.51
  • VIP-Manager v2.5.0
  • HAProxy 2.9.7
  • Grafana 10.4.2
  • Prometheus 2.51
  • Loki & Promtail: 3.0.0 (Warning: breaking changes!)
  • Alertmanager 0.27.0
  • BlackBox Exporter 0.25.0
  • Node Exporter 1.8.0
  • pgBackRest Exporter 0.17.0
  • DuckDB 0.10.2
  • etcd 3.5.13
  • minio-20240510014138 / mcli-20240509170424
  • pev2 v1.8.0 -> v1.11.0
  • pgvector 0.6.1 -> 0.7.0
  • pg_tle: v1.3.4 -> v1.4.0
  • hydra: v1.1.1 -> v1.1.2
  • duckdb_fdw: v1.1.0 recompiled for libduckdb 0.10.2
  • pg_bm25 0.5.6 -> pg_search 0.7.0
  • pg_analytics: 0.5.6 -> 0.6.1
  • pg_graphql: 1.5.0 -> 1.5.4
  • pg_net 0.8.0 -> 0.9.1
  • pg_sparse (deprecated)

Bug Fixes

  • Fixed variable whitespace in pg_exporters role
  • Fixed minio_cluster not commented in global config
  • Fixed EL7 template postgis34 should be postgis33
  • Fixed EL8 python3.11-cryptography dependency renamed to python3-cryptography
  • Fixed /pg/bin/pg-role not getting OS username in non-interactive shell
  • Fixed /pg/bin/pg-pitr not prompting -X -P options correctly

API Changes

  • New node_write_etc_hosts parameter for controlling /etc/hosts writes
  • New prometheus_sd_dir parameter for Prometheus static discovery directory
  • Configure script adds -x|--proxy for writing proxy info
  • Stopped parsing Nginx log detail labels in Promtail/Loki to avoid label cardinality explosion
  • Using Alertmanager API v2 instead of v1
  • Using /pg/cert/ca.crt instead of /etc/pki/ca.crt in PGSQL module

Offline Package Checksums

MD5 (pigsty-pkg-v2.7.0.el8.x86_64.tgz) = ec271a1d34b2b1360f78bfa635986c3a
MD5 (pigsty-pkg-v2.7.0.debian12.x86_64.tgz) = f3304bfd896b7e3234d81d8ff4b83577
MD5 (pigsty-pkg-v2.7.0.ubuntu22.x86_64.tgz) = 5b071c2a651e8d1e68fc02e7e922f2b3

1.26 - Pigsty v2.6: PostgreSQL Crashes the OLAP Party

Originally published on VONNG.

GitHub Release | Release Note

On the last day of February, Pigsty v2.6 is officially released! This version makes PostgreSQL 16 the default major version and introduces a series of new extensions, including ParadeDB and DuckDB, elevating PostgreSQL’s OLAP analytical capabilities to an entirely new level. Calling it the HTAP benchmark and database all-rounder is well-deserved.

Additionally, we’ve completely refreshed the Pigsty official website, documentation, and blog, presenting six more refined core value propositions. Globally, we’re now using the Cloudflare-powered domain pigsty.io as the default official site and repository address. The original pigsty.cc domain, website, and repos continue to serve as mirrors within China.

Finally, we’re officially launching transparently-priced Pigsty Pro and service subscriptions, providing advanced features and support options for users who need them.


Epic-Level Analytics Enhancement

TPC-H and ClickBench are authoritative analytics benchmarks. ClickBench provides horizontal comparisons of many OLAP databases, serving as quantifiable references. In this representative example, we can see relative performance of many well-known database components (lower time is better):

olap.jpg

c6a.4xlarge, 500gb gp2 / 1 billion records

This chart shows PostgreSQL and its ecosystem extensions’ performance. Native untuned PostgreSQL takes (x1000), while tuned it reaches (x47). The PG ecosystem also has three analytics-related extensions: columnar Hydra (x42), time-series TimescaleDB (x103), and distributed Citus (x262). But compared to top-tier OLAP-focused systems — Umbra, ClickHouse, Databend, SelectDB (x3~x4) — there’s still a 10x+ performance gap. However, the recent arrival of ParadeDB and DuckDB has changed this!

ParadeDB’s native PG extension pg_analytics achieves second-tier (x10) performance, only 3-4x behind top-tier OLAP databases. Considering the extra benefits — ACID, data freshness, no ETL, no extra learning curve, no separate service to maintain (not to mention it also provides ElasticSearch-quality full-text search) — this performance gap is usually acceptable.

And DuckDB (x3.2) elevates OLAP to an entirely new level — setting aside academic databases like Umbra, DuckDB may be the fastest practical analytics database. While not a PG extension itself, it’s an embeddable component, and projects like DuckDB FDW and pg_quack let PostgreSQL fully leverage DuckDB’s complete analytical performance!

duck.jpg

Appreciation from ParadeDB’s founder and DuckDB FDW’s author


New Value Propositions

Value propositions are the soul of a database distribution. In this version, we present six core values as shown:

value1.jpg

This diagram lists six core problems PostgreSQL solves: Postgres extensibility, Infrastructure reliability, Graphics observability, Service availability, Toolbox maintainability, and component composabilitY.

value2.jpg

Pigsty’s six abbreviations form the PIGSTY acronym — besides PostgreSQL in Great STYle, these six value propositions offer another interpretation:

Postgres, Infras, Graphics, Service, Toolbox, Yours.

Your graphical Postgres infrastructure service toolbox.

We’ve also redesigned the logo, from the sunglasses-wearing pig head to a hexagonal composition with colors matching key components (PG Blue, ETCD Teal, Grafana Orange, Ansible Black, Redis/MinIO Red, Nginx Green) — a condensed version of the large hexagon above. The original sunglasses pig will continue as Pigsty’s mascot.

mascot.jpg

New Website

In this version, we’ve renovated the old website using the latest Docsy documentation framework, updating substantial content. We abandoned flashy impractical designs, putting Pigsty’s value propositions and core features directly on the landing page.

web1.jpg

The real content lives in the documentation. We restructured the doc directory:

web2.jpg

After letting go of pure Markdown purism, we can use attractive styles and features in documentation:

web3.jpg

Beyond docs, we’ve organized recent articles into the Pigsty blog, divided into six columns: Cloud Computing Mudslide, Database Veteran Driver, and PostgreSQL’s Ecosystem, Development, Administration, and Kernel sections.

web4.jpg

Meanwhile, Pigsty’s software repositories now have global mirrors powered by Cloudflare R2, hosted on Cloudflare for smooth access worldwide (China users can continue using pigsty.cc).


PostgreSQL 16 Becomes Default

The last notable feature: in Pigsty v2.6, PostgreSQL 16 (16.2) officially replaces PostgreSQL 15 as the default major version.

Three months ago, we noted that PostgreSQL’s main extensions were in place, plus with the second minor release, it was production-ready.

Pigsty v2.6 coincides with PostgreSQL 16.2’s third minor release, and important extensions like Hydra, PGML, and AGE have followed to PG 16. So we’ve decided to officially upgrade the default PG major version to 16, making it the only supported major version in the open-source edition (except EL7).

Therefore, another important technical decision in this version: we’ve removed the default PG 12-15 packages and extensions from the open-source edition. This doesn’t mean Pigsty doesn’t support PG 12-15 — with minor config adjustments, you can easily use older PostgreSQL versions and extensions — but we won’t run integration tests against these versions (though they’ve been thoroughly tested in older Pigsty releases).

pg16.jpg

Similarly, we’ve narrowed the open-source support scope to EL 8 / EL 9 and Ubuntu 22.04 — the three most widely-used OS distributions. In Pigsty 2.5, we supported PG 12-16 (five major versions) times seven OS distributions, totaling 34 combinations, plus upcoming ARM support, creating significant testing pressure.

Focusing the open-source edition on one core PG major version and three mainstream OS distributions better utilizes R&D bandwidth to meet the majority of open-source users’ needs. Again, this doesn’t mean Pigsty can’t run on older systems — you can still run smoothly on EL7, Ubuntu 20.04, Debian 11/12, but we won’t provide offline packages, smoke tests, or support for these OSes.

Supporting niche/legacy OSes and outdated major versions isn’t needed by the vast majority of users but requires substantial extra effort and cost, so it’s included in our paid commercial support.


Open Source vs Pro Edition

Some open-source users have feedback: “I don’t need stuff unrelated to PostgreSQL slowing down downloads/installation and adding management complexity — Redis, MinIO, Docker, K8S, Supabase — you think they help PG, but flashy extras only slow my attack speed.”

The specific feature division isn’t finalized yet, so 2.6 may be the last fully-featured open-source Pigsty version. But the basic principle: the open-source edition will retain all core modules and PG extensions (PGSQL, INFRA, NODE, ETCD), while modules less related to PostgreSQL may become Pro edition content later.

pro.jpg

Going forward, the Pigsty open-source edition will focus on doing one thing well — providing reliable, highly-available, extensible local PostgreSQL RDS services. Practical features like Docker templates may still stay in the open-source edition.

This doesn’t mean these features disappear from open-source Pigsty — seasoned open-source veterans can still easily recreate them by modifying config files — but they won’t be default components of the open-source version.


Commercial Subscriptions

Open source is a passion project powered by love, but sustainable development requires commercial interests. In this version, we officially launch commercial Pigsty editions, providing richer support options for those who need them.

Besides additional feature modules, Pigsty Professional Subscriptions provide consulting Q&A and backstop services, supporting a broader range of operating systems and database versions:

svc.jpg

While Pigsty’s mission is providing out-of-the-box database services — even with self-healing HA for hardware failures and PITR for software/human errors — you might spin it up and go a year, two, three without issues. Statistically, that’s normal.

But database problems are usually big problems. Misusing databases also tends to become big problems. So we provide expert consulting and services for paying customers as ultimate backstop for difficult issues. (Example: we’ve rescued a burned Gitlab database with no backups). We also offer professional PostgreSQL DBA consulting services: backup, security, compliance recommendations, management and development best practices, performance evaluation and optimization, design guidance and Q&A.

sub.jpg

Often, turning the ordinary into extraordinary and achieving orders-of-magnitude improvements comes down to one sentence from an expert. This is especially true for PostgreSQL, whose soul is extensibility and whose extension ecosystem is incredibly rich. Our services ensure every dollar you spend is worthwhile and spent on what truly matters.


Looking Forward

Pigsty’s next major version is planned as v3, officially implementing the open-source/pro feature division. We’ll complete missing extension DEBs for Ubuntu/Debian systems and provide a CLI tool to wrap management operations. We may package Pigsty itself as RPM/DEB, and plan beta MYSQL monitoring/deployment support.

For monitoring, we’ll redesign PostgreSQL monitoring dashboards based on PG 16’s IO metrics, provide MySQL monitoring capability, and try using Vector as an alternative to Promtail for log collection. We already have monitoring for Alibaba Cloud RDS PG and PolarDB; we also plan AWS RDS and Aurora monitoring support in v3.0.

For infrastructure, we’re choosing to abandon “cheap” Tencent Cloud CDN, fully embracing more reliable, faster, and cheaper Cloudflare to serve global users. Tencent Cloud CDN may serve as a domestic mirror for Pro edition acceleration.

Pigsty’s product and interfaces will stabilize in v2.6 and v3.0 — it’s already doing great on product and technology fronts! Even exceeding RDS in some areas (like extension support and monitoring!). So upcoming work will shift focus to marketing and sales. Sustainable open-source operations require user and customer support. If Pigsty has helped you, please consider sponsoring us or purchasing our service subscriptions.


v2.6.0 Release Notes

Highlights

Configuration Changes

  • Replaced node_repo_method with node_repo_modules, removed node_repo_local_urls
  • Temporarily disabled Grafana unified alerting to avoid “Database Locked” errors
  • New node_repo_modules parameter to specify upstream repos added to nodes
  • Removed node_local_repo_urls, functionality replaced by node_repo_modules & repo_upstream
  • Removed node_repo_method parameter, functionality replaced by node_repo_modules
  • Added new local source in repo_upstream, used via node_repo_modules to replace node_local_repo_urls
  • Reorganized node_default_packages, infra_packages, pg_packages, pg_extensions defaults
  • When replacing repo_upstream.baseurl, if EL8/9 PGDG minor-version-specific repos are available, use major.minor instead of major for $releasever for better minor version compatibility

Software Upgrades

  • Grafana 10.3
  • Prometheus 2.47
  • node_exporter 1.7.0
  • HAProxy 2.9.5
  • Loki / Promtail 2.9.4
  • minio-20240216110548 / mcli-20240217011557
  • etcd 3.5.11
  • Redis 7.2.4
  • Bytebase 2.13.2
  • DuckDB 0.10.0
  • FerretDB 1.19
  • Metabase: new Docker app template

PostgreSQL Extensions

  • PostgreSQL minor version upgrades: 16.2, 15.6, 14.11, 13.14, 12.18
  • PostgreSQL 16: now promoted to default major version
  • pg_exporter 0.6.1: security fix
  • Patroni 3.2.2
  • pgBadger 12.4
  • pgBackRest 2.50
  • vip-manager 2.3.0
  • PostGIS 3.4.2
  • TimescaleDB 2.14.1
  • Vector extension PGVector 0.6.0: added parallel HNSW index creation
  • New extension duckdb_fdw v1.1 for reading/writing DuckDB data
  • New extension pgsql-gzip for Gzip compression/decompression v1.0.0
  • New extension pg_sparse for efficient sparse vectors (ParadeDB) v0.5.6
  • New extension pg_bm25 for high-quality BM25 full-text search (ParadeDB) v0.5.6
  • New extension pg_analytics with SIMD + columnar storage for analytics (ParadeDB) v0.5.6
  • Upgraded AIML extension pgml to v2.8.1 with PG 16 support
  • Upgraded columnar extension hydra to v1.1.1 with PG 16 support
  • Upgraded graph extension age to v1.5.0 with PG 16 support
  • Upgraded GraphQL extension pg_graphql to v1.5.0 for Supabase support
MD5 (pigsty-v2.6.0.tgz) = 330e9bc16a2f65d57264965bf98174ff
MD5 (pigsty-pkg-v2.6.0.debian11.x86_64.tgz) = 81abcd0ced798e1198740ab13317c29a
MD5 (pigsty-pkg-v2.6.0.debian12.x86_64.tgz) = 7304f4458c9abd3a14245eaf72f4eeb4
MD5 (pigsty-pkg-v2.6.0.el7.x86_64.tgz) = f914fbb12f90dffc4e29f183753736bb
MD5 (pigsty-pkg-v2.6.0.el8.x86_64.tgz) = fc23d122d0743d1c1cb871ca686449c0
MD5 (pigsty-pkg-v2.6.0.el9.x86_64.tgz) = 9d258dbcecefd232f3a18bcce512b75e
MD5 (pigsty-pkg-v2.6.0.ubuntu20.x86_64.tgz) = 901ee668621682f99799de8932fb716c
MD5 (pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz) = 39872cf774c1fe22697c428be2fc2c22

1.27 - Pigsty v2.5: Ubuntu & PG16

Originally published on VONNG.

GitHub Release | Release Note

On Programmer’s Day (10/24), Pigsty v2.5.0 is released! This version adds support for Ubuntu and Debian operating systems. Combined with existing EL7/8/9 support, we’ve achieved a grand slam of mainstream Linux distributions.

Additionally, Pigsty now officially supports self-hosted Supabase and PostgresML, plus columnar storage extension hydra, LiDAR point cloud extension pointcloud, image similarity extension imgsmlr, extended distance function package pg_similarity, and multilingual fuzzy search extension pg_bigm.

For monitoring, Pigsty has optimized the PostgreSQL dashboard experience, added new Patroni & Exporter dashboards, and redesigned the PGSQL Query dashboard based on query macro-optimization methodology.


About Pigsty

Pigsty is an out-of-the-box PostgreSQL distribution providing a local-first open-source alternative to RDS PostgreSQL. It enables users to run better enterprise-grade PostgreSQL database services at a fraction of cloud RDS costs using pure hardware. For more information, visit https://pigsty.io.

intro

Ubuntu/Debian Support

Pigsty now supports Ubuntu and Debian operating systems (referred to as Deb support). Users have been requesting Ubuntu and Debian support since the 0.x era two years ago, so this is something that felt both important and right to do.

As a database distribution that builds on bare operating systems, supporting a new OS isn’t as simple as containerized databases just packaging an image. There’s substantial adaptation work required. The first challenge is package availability — Prometheus, for example, doesn’t have an official DEB repository, so we had to maintain our own packaging and provide a repository.

APT/YUM Repo

Pigsty-maintained APT/YUM repositories

The massive differences in package management require rewriting the entire bootstrap / local repository build logic for Deb systems. Distro FHS and convention differences need case-by-case handling. You’re not just dealing with PostgreSQL kernel and 100+ extensions — there’s also etcd, minio, redis, grafana, prometheus, haproxy, and various other components. Fortunately, Pigsty has overcome these issues, giving Ubuntu/Debian the same smooth experience as EL 7-9.

One-Click Install

One-click Pigsty installation

In terms of user experience, Deb support has an almost identical feature set to EL. The only exception is that Supabase and its specialized extensions haven’t been fully ported yet. Beyond that, Deb has some unique extensions like the chemical formula extension RDKit, LiDAR point cloud extension pointcloud, and extended distance function package pg_similarity (the latter two have been backported to EL). To fully leverage PostgresML + CUDA capabilities, Ubuntu is essential.

Pigsty’s auto-configuration now detects Debian/Ubuntu systems, automatically using the corresponding config template for single-node installations. Deb templates differ from EL in only 8 parameter defaults — package names differ between distributions, so parameters like xx_packages need adjustment. The only other changes are upstream repos repo_upstream, local repo URLs node_repo_local_urls, and default pg_dbsu_uid (DEB packages don’t assign fixed UIDs).

Ubuntu Config

Declarative config file for Ubuntu systems

Users typically don’t need to adjust these parameters, so the Pigsty workflow on Deb systems is virtually identical. In fact, Pigsty’s offline package build template works exactly this way: completing full Pigsty installations on seven different operating systems at once, without any special handling.


New Extensions

Pigsty v2.5 includes several user-requested extensions. First up is PostgresML. While the previous version already supported PostgresML on EL8/EL9, AI work is almost universally done on Ubuntu — at minimum, CUDA driver installation is much easier.

So in Pigsty v2.5, you can run native PostgresML clusters on Ubuntu. No fiddling with NVIDIA Docker or anything like that — just pip install the Python dependencies and you’re ready to go. Train models with SQL, invoke models, and complete your entire AI workflow within the database!

PostgresML

The second noteworthy extension is pointcloud. Thanks to PostGIS, PostgreSQL has always been a favorite of autonomous driving/EV companies. PointCloud extends PostgreSQL and PostGIS’s power to a new frontier. LiDAR continuously scans surroundings and generates “point cloud” data. The pointcloud extension provides PcPoint & PcPatch data types and forty functions, allowing efficient storage, retrieval, and computation on ultra-high-dimensional point sets. This extension is natively available in the PGDG APT repository, and Pigsty has ported it to EL systems so all users can benefit.

pointcloud

imgsmlr is a reverse image search extension. While many AI models can now encode images into high-dimensional vectors for semantic search using pgvector, what makes imgsmlr interesting is that it requires no external dependencies and can complete all functionality within the database. In the author’s words: “My goal isn’t to provide the most advanced image search method, but to show you how to write a PostgreSQL extension for even non-typical database tasks like image processing.”

imgsmlr

It first processes PNG/JPG images using Haar wavelet transform into 16K patterns and 64-byte signature digests, then uses GiST index retrieval on digests for efficient reverse image search. Using imgsmlr to retrieve the 10 most similar images from 400 million random images takes about 600ms.

Another interesting extension, pg_similarity, is available by default in Ubuntu/Debian APT repos, and Pigsty has ported it to EL. It provides efficient C implementations of 17 text distance metric functions, greatly enriching search and ranking capabilities. A related plugin is pg_bigm, similar to PostgreSQL’s built-in pg_trgm, except it uses bigrams instead of trigrams for fuzzy search, providing better full-text search support for CJK languages.

pg_similarity

Additionally, we’ve updated Supabase support to the latest version: 20231013070755. You can self-host Supabase on EL8/EL9 systems using Pigsty’s PostgreSQL database.

Including PostgreSQL’s built-in extensions, Pigsty 2.5 supports 150+ extensions. Despite this abundance, note that they’re all optional. Pigsty provides pg_repack, wal2json, and passwordcheck_cracklib (EL) for all PostgreSQL major versions, with only the online bloat management extension pg_repack installed by default. Other extensions, if not installed, impose no extra burden on the system.


Monitoring System Updates

Pigsty v2.5 brings monitoring system adjustments, updating the long-standing pg_exporter to v0.6.0 with TLS support, fixing two dependency security issues, building ARM64 packages, and using the latest metrics definition files. Additionally, four shared buffer I/O related metrics were added to the pg_query collector, enriching the information in PGSQL Query.

First, the new PGSQL Patroni dashboard provides a complete view of cluster HA status. Very helpful for analyzing historical service health and failover causes.

Patroni Dashboard

Then there’s PGSQL Exporter, providing detailed self-monitoring metrics and logs for PG Exporter and Pgbouncer Exporter. Useful for optimizing the monitoring system itself.

Exporter Dashboard

In component navigation panels across various dashboards, you can click Patroni/Exporter indicator tiles to jump directly to component details:

Component Navigation

The PGSQL Query dashboard now has five sections: Overview, core QPS/RT metrics, time-differential metrics, call-differential metrics, and percentage metrics. Following macro-optimization methodology:

Reduce Resource Consumption: Lower saturation risk, optimize CPU/memory/IO, typically targeting total query time/IO. Uses dM/dt: metric M differentiated over time (per-second increments).

Improve User Experience: Most common optimization goal. In OLTP, typically targets reduced average query response time. Uses dM/dc: metric M differentiated over call count (per-call increments).

Balance Workload: Ensure proper proportions of resource usage/performance across query groups. Uses M%: percentage of a query class’s metric relative to totals.

The PGSQL first screen shows the most critical query performance metrics: QPS and RT — plus their 1/5/15-minute averages, jitter, and distribution ranges.

Query QPS/RT

Next are dM/dc metrics for user experience optimization, where M includes:

  • Average rows returned per query
  • Average execution time per query
  • Average WAL size per query
  • Average I/O time per query
  • Average buffer blocks read/written per query
  • Average buffer blocks accessed/dirtied per query
Query dM/dc

Then dM/dt metrics for resource consumption reduction, with similar M metrics but differentiated over time instead of call count:

Query dM/dt

The final section shows %M metrics for workload balancing. Reveals a specific query group’s proportion and relative position in the overall workload, shown in bold. Click specific queries to navigate in-place — very convenient.

Query Percent

Beyond these three dashboards, Pigsty has optimized and fixed many other panels. Many panel info sections now provide more detail: what metrics the panel shows, what problems it solves, etc. We’ve also introduced three new Grafana plugins for CSV/JSON datasources and variable panels.


Release Notes

v2.5.0

curl https://get.pigsty.cc/latest | bash

Highlights

  • Ubuntu / Debian support: bullseye, bookworm, jammy, focal
  • CDN repo.pigsty.cc software repository providing RPM/DEB package downloads
  • Anolis OS support (compatible with EL 8.8)
  • PostgreSQL 16 replaces PostgreSQL 14 as the alternative primary supported version
  • New PGSQL Exporter / PGSQL Patroni dashboards, redesigned PGSQL Query dashboard
  • Extension updates:
    • PostGIS upgraded to 3.4 (EL8/EL9), EL7 remains on PostGIS 3.3
    • Removed pg_embedding as developer discontinued maintenance, recommend pgvector instead
    • New extension (EL): Point cloud plugin pointcloud support, natively available on Ubuntu
    • New extensions (EL): imgsmlr, pg_similarity, pg_bigm for search
    • Recompiled pg_filedump as PG version-independent package
    • Added hydra columnar storage extension, citus no longer installed by default
  • Software updates:
    • Grafana to v10.1.5
    • Prometheus to v2.47
    • Promtail/Loki to v2.9.1
    • Node Exporter to v1.6.1
    • Bytebase to v2.10.0
    • Patroni to v3.1.2
    • pgbouncer to v1.21.0
    • pg_exporter to v0.6.0
    • pgbackrest to v2.48.0
    • pgbadger to v12.2
    • pg_graphql to v1.4.0
    • pg_net to v0.7.3
    • FerretDB to v0.12.1
    • SealOS to 4.3.5
    • Supabase support to 20231013070755

Ubuntu Support Notes

Pigsty supports Ubuntu 22.04 (jammy) and 20.04 (focal) LTS versions with corresponding offline packages.

Compared to EL systems, some parameter defaults need explicit adjustment. See ubuntu.yml for details:

  • repo_upstream: Adjusted for Ubuntu/Debian package names
  • repo_packages: Adjusted for Ubuntu/Debian package names
  • node_repo_local_urls: Defaults to ['deb [trusted=yes] http://${admin_ip}/pigsty ./']
  • node_default_packages:
    • zlib -> zlib1g, readline -> libreadline-dev
    • vim-minimal -> vim-tiny, bind-utils -> dnsutils, perf -> linux-tools-generic
    • Added acl package to ensure Ansible permissions work correctly
  • infra_packages: All packages with _ replaced by -, postgresql-client-16 replaces postgresql16
  • pg_packages: Ubuntu conventionally uses - instead of _, no need to manually install patroni-etcd
  • pg_extensions: Extension names differ from EL, Ubuntu lacks passwordcheck_cracklib
  • pg_dbsu_uid: Ubuntu DEB packages don’t specify explicit UID, manual specification required, Pigsty defaults to 543

API Changes

Default value changes:

  • repo_modules now defaults to infra,node,pgsql,redis,minio, enabling all upstream sources

  • repo_upstream changed, now adds Pigsty Infra/MinIO/Redis/PGSQL modular software sources

  • repo_packages changed, removed unused karma,mtail,dellhw_exporter, removed PG14 main extensions, added PG16 main extensions, added virtualenv package

  • node_default_packages changed, now installs python3-pip by default

  • pg_libs: timescaledb removed from shared_preload_libraries, no longer auto-enabled by default

  • pg_extensions changed, Citus no longer installed by default, passwordcheck_cracklib installed by default, EL8,9 PostGIS default version upgraded to 3.4

    - pg_repack_${pg_version}* wal2json_${pg_version}* passwordcheck_cracklib_${pg_version}*
    - postgis34_${pg_version}* timescaledb-2-postgresql-${pg_version}* pgvector_${pg_version}*
  • All Patroni templates remove wal_keep_size parameter by default to avoid triggering Patroni 3.1.1 bug, functionality covered by min_wal_size

MD5 (pigsty-pkg-v2.5.0.el7.x86_64.tgz) = 87e0be2edc35b18709d7722976e305b0
MD5 (pigsty-pkg-v2.5.0.el8.x86_64.tgz) = e71304d6f53ea6c0f8e2231f238e8204
MD5 (pigsty-pkg-v2.5.0.el9.x86_64.tgz) = 39728496c134e4352436d69b02226ee8
MD5 (pigsty-pkg-v2.5.0.debian11.x86_64.tgz) = e3f548a6c7961af6107ffeee3eabc9a7
MD5 (pigsty-pkg-v2.5.0.debian12.x86_64.tgz) = 1e469cc86a19702e48d7c1a37e2f14f9
MD5 (pigsty-pkg-v2.5.0.ubuntu20.x86_64.tgz) = cc3af3b7c12f98969d3c6962f7c4bd8f
MD5 (pigsty-pkg-v2.5.0.ubuntu22.x86_64.tgz) = c5b2b1a4867eee624e57aed58ac65a80

v2.5.1

Following PostgreSQL v16.1, v15.5, 14.10, 13.13, 12.17, 11.22 routine minor version updates.

All important PostgreSQL 16 extensions are now in place (added pg_repack and timescaledb support).

  • Software updates:
    • PostgreSQL to v16.1, v15.5, 14.10, 13.13, 12.17, 11.22
    • Patroni v3.2.0
    • PgBackrest v2.49
    • Citus 12.1
    • TimescaleDB 2.13
    • Grafana v10.2.0
    • FerretDB 1.15
    • SealOS 4.3.7
    • Bytebase 2.11.1
  • Removed monitor schema prefix from PGCAT dashboard queries (allowing users to install pg_stat_statements elsewhere)
  • New wool.yml config template designed for Alibaba Cloud free 99 ECS single-node
  • Added python3-jmespath package for EL9 to fix jmespath missing after Ansible dependency update during bootstrap
MD5 (pigsty-pkg-v2.5.1.el7.x86_64.tgz) = 31ee48df1007151009c060e0edbd74de
MD5 (pigsty-pkg-v2.5.1.el8.x86_64.tgz) = a40f1b864ae8a19d9431bcd8e74fa116
MD5 (pigsty-pkg-v2.5.1.el9.x86_64.tgz) = c976cd4431fc70367124fda4e2eac0a7
MD5 (pigsty-pkg-v2.5.1.debian11.x86_64.tgz) = 7fc1b5bdd3afa267a5fc1d7cb1f3c9a7
MD5 (pigsty-pkg-v2.5.1.debian12.x86_64.tgz) = add0731dc7ed37f134d3cb5b6646624e
MD5 (pigsty-pkg-v2.5.1.ubuntu20.x86_64.tgz) = 99048d09fa75ccb8db8e22e2a3b41f28
MD5 (pigsty-pkg-v2.5.1.ubuntu22.x86_64.tgz) = 431668425f8ce19388d38e5bfa3a948c

1.28 - Pigsty v2.4: Monitor Cloud RDS

Originally published on VONNG.

GitHub Release | Release Note

PostgreSQL released its new major version 16 today, bringing a series of improvements. Pigsty followed up within 1 hour of release with Pigsty v2.4, providing complete support for PostgreSQL 16 GA. Additionally, v2.4 adds enhanced support for monitoring existing PG instances, especially RDS for PostgreSQL and PolarDB. Redis monitoring has been improved based on 7.x, with automated Sentinel-based high availability configuration.

banner

Highlights

  • PostgreSQL 16 GA released, Pigsty provides support within 1 hour of release
  • Monitor cloud databases: RDS for PostgreSQL and PolarDB, with brand-new PGRDS dashboards
  • Commercial support and consulting services officially launched. First LTS version released, providing up to 5 years of support for subscribers
  • New extension: Apache AGE — graph database query capability on PostgreSQL
  • New extension: zhparser — Chinese word segmentation for full-text search
  • New extension: pg_roaringbitmap — efficient RoaringBitmap implementation
  • New extension: pg_embedding — another HNSW-based vector database plugin, alternative to pgvector
  • New extension: pg_tle — AWS’s trusted language stored procedure management/publishing/packaging extension
  • New extension: pgsql-http — send HTTP requests and handle responses using SQL interface
  • Other new extensions: pg_auth_mon, pg_checksums, pg_failover_slots, pg_readonly, postgresql-unit, pg_store_plans, pg_uuidv7, set_user
  • Redis improvements: Sentinel monitoring support, automatic HA configuration for primary-replica clusters

API Changes

  • New parameter: REDIS.redis_sentinel_monitor — specify list of primaries monitored by Sentinel cluster

PostgreSQL 16 Support

Pigsty is probably the first distribution to provide PostgreSQL 16 support — we’ve been tracking it since 16 beta1. So when PostgreSQL 16 was released, Pigsty completed GA support within an hour. You can already spin up PostgreSQL 16 high-availability clusters, though some important extensions aren’t yet available in the official PGDG repository, such as Citus and TimescaleDB. But other extensions are ready: including PostGIS 3.4, pgvector, pg_squeeze, wal2json, pg_cron, and extensions maintained and packaged by Pigsty: zhparser, roaringbitmap, pg_embedding, pgsql-http, and more.

PostgreSQL 16 brings practical new features: logical decoding and logical replication from standbys, new I/O statistics views, parallel execution of full joins, better freezing performance, new SQL/JSON standard function set, and regular expressions in HBA authentication.

Note that the official PGDG repository has decided to drop EL7 support for PostgreSQL 16, so PG16 is only available on EL8 and EL9 and compatible OS distributions.


Monitoring RDS and PolarDB

Pigsty v2.4 provides RDS monitoring support, with particular emphasis on PolarDB cloud database monitoring. When you only have a remote PostgreSQL connection string, you can use this method to integrate it into Pigsty monitoring.

PolarDB Cluster

Example: Monitoring a primary-replica PolarDB RDS cluster

Pigsty v2.4 provides RDS monitoring support with special attention to PolarDB cloud database monitoring. When you only have a remote PostgreSQL connection string, you can bring it into Pigsty monitoring. Pigsty provides two brand-new dashboards: PGRDS Cluster and PGRDS Instance, for presenting complete RDS PG metrics.

PGRDS ClusterPGRDS Dashboard 1PGRDS Dashboard 2

Commercial Support

Pigsty v2.4 is the first LTS version, providing 3 years of long-term support for enterprise subscribers. We’re also officially launching subscription and support services — contact us if interested.

https://pigsty.io/docs/support/

Support Page

Redis High Availability

In Pigsty v2.4, we provide a new parameter redis_sentinel_monitor for automatically configuring high availability for classic Redis primary-replica clusters. This parameter can only be defined on Sentinel clusters, and primaries defined in it will be automatically managed by the Sentinel cluster.

Redis Sentinel

Meanwhile, we’ve added Sentinel-related metrics and panels to Redis monitoring, adapted for Redis 7.x’s new features.


New Extensions

Pigsty v2.4 provides a series of new extensions, including important ones not yet in the official PGDG repository. For example: graph database plugin Apache AGE, Chinese full-text search plugin zhparser, HTTP plugin pgsql-http, trusted extension packaging plugin pg_tle, bitmap plugin pg_roaringbitmap, and pg_embedding as an alternative vector database implementation to PGVector, and more.

All extensions are compiled and packaged for PostgreSQL 12 through PostgreSQL 16 on EL7 through EL9, though EL7 doesn’t yet support pg_tle and pg_embedding due to compiler version issues. These RPM packages are maintained by Pigsty and hosted in Pigsty’s own Yum repository.

Extension List

For example, you can use AGE to add graph database capabilities to PostgreSQL, create Graphs, and explore graph data using Cypher query language alongside SQL — achieving Neo4j-like functionality.

Apache AGE

Or you can use the zhparser Chinese word segmentation plugin to split Chinese text and queries into keywords, using PostgreSQL’s classic full-text search capability to achieve search engine and ElasticSearch-like functionality.

zhparser

Even more impressively, you can use the pgsql-http plugin to send HTTP requests and process HTTP responses using a SQL interface. This enables deep integration and interaction between the database and external systems, opening up endless possibilities:

pgsql-http

You can also use roaringbitmap to efficiently perform counting statistics with minimal resources:

roaringbitmap

We won’t go into all the details here — we’ll publish dedicated articles introducing how to use these powerful extensions.


v2.4.0 Release Notes

Highlights

  • PostgreSQL 16 GA released, Pigsty provides support
  • Monitor cloud databases: RDS for PostgreSQL and PolarDB with brand-new PGRDS dashboards
  • Commercial support and consulting services officially launched. First LTS version released, providing up to 5 years of support for subscribers
  • New extension: Apache AGE, openCypher graph query engine on PostgreSQL
  • New extension: zhparser, full text search for Chinese language
  • New extension: pg_roaringbitmap, roaring bitmap for PostgreSQL
  • New extension: pg_embedding, HNSW alternative to pgvector
  • New extension: pg_tle, admin/manage stored procedure extensions
  • New extension: pgsql-http, issue HTTP requests with SQL interface
  • Additional extensions: pg_auth_mon, pg_checksums, pg_failover_slots, pg_readonly, postgresql-unit, pg_store_plans, pg_uuidv7, set_user
  • Redis improvements: Sentinel monitoring support, automatic HA configuration for primary-replica clusters

API Changes

  • New parameter: REDIS.redis_sentinel_monitor — specify list of primaries monitored by Sentinel cluster

Bug Fixes

  • Fixed missing uid when registering datasources in Grafana 10.1
MD5 (pigsty-pkg-v2.4.0.el7.x86_64.tgz) = 257443e3c171439914cbfad8e9f72b17
MD5 (pigsty-pkg-v2.4.0.el8.x86_64.tgz) = 41ad8007ffbfe7d5e8ba5c4b51ff2adc
MD5 (pigsty-pkg-v2.4.0.el9.x86_64.tgz) = 9a950aed77a6df90b0265a6fa6029250

1.29 - Pigsty v2.3: Richer App Ecosystem

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v2.3 is here! This release further refines the monitoring system, enriches the application ecosystem, and keeps pace with PostgreSQL’s routine minor version updates (CVE fixes).

Pigsty v2.3 follows PostgreSQL’s minor version updates including 15.4, 14.9, 13.12, 12.16, and 16 beta3, addressing a CVE security vulnerability. The HA controller Patroni is also upgraded to version 3.1, fixing several bugs.

v2.3 adds support for FerretDB — a truly open-source MongoDB alternative built on PostgreSQL. Users can access it with MongoDB clients, but all data is actually stored in the underlying PostgreSQL.

v2.3 also includes NocoDB by default: an open-source Airtable alternative. It’s a database-spreadsheet hybrid that lets you quickly build collaborative applications using a low-code approach.

Pigsty v2.3 introduces the ability to bind an L2 VIP to a host node cluster using the VRRP protocol to eliminate single points of failure across the entire chain, with full monitoring support: keepalived_exporter collects metrics, and every Node VIP (keepalived) and PGSQL VIP (vip-manager) is added to blackbox_exporter’s ICMP/PING monitoring list.

For monitoring, Pigsty v2.3 builds on v2.2’s foundation with additional polish: new VIP monitoring, VIP and node PING metrics prominently placed in NODE/PGSQL monitoring, a new lock wait tree view in PGSQL monitoring, Redis monitoring style updates, MinIO monitoring adapted to new metric names, and MySQL/MongoDB monitoring stubs laying groundwork for future implementation.

MongoDB Support?

MongoDB is a popular NoSQL document database. But due to licensing issues (SSPL) and positioning concerns (Postgres distribution), Pigsty chose to use FerretDB to provide MongoDB support. FerretDB is an interesting open-source project: it lets PostgreSQL provide MongoDB capabilities.

ferretdb

MongoDB and PostgreSQL are very different database systems: MongoDB uses a document model with its own query language. But since PostgreSQL offers complete JSON/JSONB/GIN functionality, this is theoretically entirely feasible: FerretDB translates your MongoDB queries into SQL queries:

use test                            -- CREATE SCHEMA test;
db.dropDatabase()                   -- DROP DATABASE test;
db.createCollection('posts')        -- CREATE TABLE posts(_data JSONB,...)
db.posts.insert({title: 'Post One',
  body: 'Body of post one',
  category: 'News',
  tags: ['news', 'events'],
  user: {name: 'John Doe',
         status: 'author'},
  date: Date()})                    -- INSERT INTO posts VALUES(...);
db.posts.find().limit(2).pretty()   -- SELECT * FROM posts LIMIT 2;
db.posts.createIndex({ title: 1 })  -- CREATE INDEX ON posts(_data->>'title');

Defining a FerretDB cluster in Pigsty is no different from other database types — you just need to provide core identity parameters: cluster name and instance number. The key parameter is mongo_pgurl, which specifies the underlying PostgreSQL address that FerretDB uses.

ferret:
  hosts:
    10.10.10.45: { mongo_seq: 1 }
    10.10.10.46: { mongo_seq: 2 }
    10.10.10.47: { mongo_seq: 3 }
  vars:
    mongo_cluster: ferret
    mongo_pgurl: 'postgres://test:[email protected]:5436/test'

You can directly specify any PostgreSQL service address created by Pigsty. No special database configuration is needed — just ensure the user has DDL privileges.

ferretdb-monitoring

After configuration, run ./mongo.yml -l ferret to complete installation. If you prefer containers, you can also cd pigsty/app/ferretdb; make to spin up FerretDB via docker-compose. Once installed, use any MongoDB client to access FerretDB, such as MongoSH:

mongosh 'mongodb://test:[email protected]:27017/test?authMechanism=PLAIN'

For users looking to migrate from MongoDB to PostgreSQL, this is a minimal-effort compromise solution. Pigsty also offers another approach via MongoFDW: query existing MongoDB clusters using SQL from within PostgreSQL.

New App: NocoDB

Pigsty v2.3 adds built-in support for NocoDB. Use the default Docker Compose template to spin up NocoDB with one command and use the built-in PostgreSQL for storage.

NocoDB is an open-source Airtable alternative. What’s Airtable? Think Google Docs / Google Sheets, but with extremely rich APIs and hooks that enable powerful functionality.

nocodb

NocoDB transforms any relational database into a spreadsheet, running your own local cloud document software. It also lets users implement requirements via low-code approaches: for example, you can send auto-generated forms to others for filling out, with results automatically organized into real-time shared, collaborative, programmable multi-dimensional tables.

In Pigsty, spinning up NocoDB is dead simple — just one command. Modify the DATABASE_URL parameter in .env to use different databases.

cd ~/pigsty/app/nocodb; make up

Node VIP Support

Pigsty v2.3 introduces the ability to bind an L2 VIP to a host node cluster using the VRRP protocol to eliminate single points of failure across the entire chain, with complete monitoring support.

In ancient Pigsty versions (pre-0.5), keepalived-based L2 VIP was available but was later replaced by HAProxy + VIP-Manager: HAProxy works with any network, provides flexible health checks and traffic distribution, plus a simple admin interface. VIP-Manager binds an L2 VIP to the database cluster primary.

But the general L2 VIP requirement still exists. For example, if users choose HAProxy cluster access, how do you ensure HAProxy’s own reliability? While DNS-based load balancing works, VRRP clearly wins on reliability and ease of use. MinIO, ETCD, and Prometheus sometimes have similar needs.

Binding an L2 VIP to a cluster is simple: enable vip_enabled, assign a unique VirtualRouterID and VIP address within the VLAN. By default, all cluster members use BACKUP initial state in non-preemptive mode. Set vip_role and vip_preempt to change this behavior.

vip-config

L2 VIPs are automatically monitored. When the MASTER goes down, BACKUP takes over immediately.

vip-failover

Monitoring Improvements

Pigsty v2.2 completely overhauled the monitoring system based on Grafana 10. v2.3 adds more refinements on top of v2.2.

For example, the new NODE VIP dashboard displays VIP status: owning cluster/members, network RT, keepalived state, and more.

node-vip-dashboard

The image above shows live monitoring of an L2 VIP automatic failover: bound to a 3-node MinIO cluster. When the original Master (.27) goes down, (.26) takes over immediately.

The same information appears in prominent positions on NODE and PGSQL dashboards: for example, the Overview instance list now includes VIP quick navigation (purple):

node-overviewpgsql-overview

Similarly, NODE Cluster and PGSQL Cluster prominently display VIP and all member ICMP reachability status (Ping network latency).

node-cluster-pingpgsql-cluster-ping

Additionally, PGCAT adds a default 1-second refresh PGCAT Locks dashboard for intuitive observation of current database activity and lock waits.

pgcat-locks

Lock waits are organized into a wait tree, with Level and indentation indicating hierarchy. You can select different refresh rates, up to 10 times per second.

Lock Wait Tree

For Redis monitoring, related dashboards have been unified to match PGSQL and NODE styling:

redis-monitoring

Smoother Build Process

Pigsty v2.2 introduced official Yum repos; v2.3 enables site-wide HTTPS by default.

When downloading Pigsty software directly from the internet, you might encounter firewall/GFW issues. For example, default Grafana/Prometheus Yum repos can be extremely slow. Additionally, some scattered RPM packages need web URL downloads rather than repotrack.

Pigsty v2.2 solved this with an official Yum repo at http://get.pigsty.cc, configured as a default upstream source. All scattered RPMs and packages requiring VPN access are hosted there, significantly speeding up online installation/builds.

Installation

The Pigsty v2.3 installation command is:

bash -c “$(curl -fsSL https://get.pigsty.cc/latest)"

One command for a complete Pigsty installation on a fresh machine. For beta versions, replace latest with beta. For air-gapped environments, download Pigsty and offline packages:

download
https://get.pigsty.cc/v2.3.0/pigsty-v2.3.0.tgz
https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el7.x86_64.tgz
https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el8.x86_64.tgz
https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el9.x86_64.tgz

That’s what Pigsty v2.3 brings to the table.

For more details, check out the official Pigsty documentation: https://pigsty.io and GitHub Release Notes: https://github.com/pgsty/pigsty/releases/tag/v2.3.0


v2.3.0 Release Notes

Highlights

  • INFRA: Added NODE/PGSQL VIP monitoring support
  • PGSQL: Fixed PostgreSQL CVE-2023-39417 via minor upgrades: 15.4, 14.9, 13.12, 12.16, and Patroni v3.1.0
  • NODE: Allow users to bind L2 VIP to node clusters using keepalived
  • REPO: Pigsty Yum repo optimized, site-wide HTTPS by default: get.pigsty.cc and demo.pigsty.cc
  • APP: Upgraded app/bytebase to v2.6.0, app/ferretdb to v1.8; added new app template: NocoDB, open-source Airtable
  • REDIS: Upgraded to v7.2, redesigned Redis dashboards
  • MONGO: Added basic support via FerretDB 1.8
  • MYSQL: Added Prometheus/Grafana/CA stubs for future integration

API Changes

Added new parameter group NODE.NODE_VIP with 8 new parameters:

  • NODE.VIP.vip_enabled: Enable VIP on this node cluster?
  • NODE.VIP.vip_address: Node VIP address in IPv4 format, required if VIP enabled
  • NODE.VIP.vip_vrid: Required, integer 1-255, must be unique within same VLAN
  • NODE.VIP.vip_role: master/backup, defaults to backup, used as initial role
  • NODE.VIP.vip_preempt: Optional, true/false, defaults to false, enable VIP preemption
  • NODE.VIP.vip_interface: Node VIP network interface to listen on, eth0 by default
  • NODE.VIP.vip_dns_suffix: Node VIP DNS name suffix, defaults to .vip
  • NODE.VIP.vip_exporter_port: Keepalived exporter listen port, defaults to 9650
MD5 (pigsty-pkg-v2.3.0.el7.x86_64.tgz) = 81db95f1c591008725175d280ad23615
MD5 (pigsty-pkg-v2.3.0.el8.x86_64.tgz) = 6f4d169b36f6ec4aa33bfd5901c9abbe
MD5 (pigsty-pkg-v2.3.0.el9.x86_64.tgz) = 4bc9ae920e7de6dd8988ca7ee681459d

v2.3.1 Release Notes

Highlights

  • pgvector updated to 0.5 with HNSW algorithm support
  • PostgreSQL 16 RC1 support (el8/el9)
  • Added SealOS to default packages for quick Kubernetes cluster deployment

Bug Fixes

  • Fixed infra.repo.repo_pkg task: downloads could be affected by existing /www/pigsty content when repo_packages contains * wildcards
  • Changed vip_dns_suffix default from .vip to empty string, so cluster name itself becomes the default Node cluster L2 VIP
  • modprobe watchdog and chown watchdog if patroni_watchdog_mode is required
  • When pg_dbsu_sudo = limit and patroni_watchdog_mode = required, grant database dbsu sudo for:
    • /usr/bin/sudo /sbin/modprobe softdog: Ensure softdog kernel module enabled when starting Patroni service
    • /usr/bin/sudo /bin/chown {{ pg_dbsu }} /dev/watchdog: Ensure watchdog ownership correct when starting Patroni service

Documentation Updates

  • Added updated content to English documentation
  • Added simplified Chinese built-in docs, fixed Chinese docs on pigsty.cc

Software Updates

  • PostgreSQL 16 RC1 for EL8/EL9
  • PGVector 0.5.0 with HNSW index support
  • TimescaleDB 2.11.2
  • Grafana 10.1.0
  • Loki & Promtail 2.8.4
  • Redis Stack 7.2 on el7/8
  • mcli-20230829225506 / minio-20230829230735
  • FerretDB 1.9
  • SealOS 4.3.3
  • pgBadger 1.12.2
MD5 (pigsty-pkg-v2.3.1.el7.x86_64.tgz) = ce69791eb622fa87c543096cdf11f970
MD5 (pigsty-pkg-v2.3.1.el8.x86_64.tgz) = 495aba9d6d18ce1ebed6271e6c96b63a
MD5 (pigsty-pkg-v2.3.1.el9.x86_64.tgz) = 38b45582cbc337ff363144980d0d7b64

1.30 - Pigsty v2.2: Monitoring System Reborn

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v2.2 is here! The world’s most powerful PostgreSQL monitoring system receives an epic upgrade — completely rebuilt on Grafana v10, pushing PG observability to a whole new level with a dramatically improved user experience. Live Demo: http://demo.pigsty.cc

This release also introduces a 42-node production simulation sandbox template, adds support for Citus 12 and PG 16 beta2, provides KVM-based Vagrant templates, establishes dedicated Pigsty Yum repos for scattered/hard-to-reach RPM packages, and adds compatibility with UOS20 (a domestic Chinese Linux distribution).


Monitoring Overhaul: Visual Design

In Pigsty v2.2, the monitoring dashboards were completely rebuilt from scratch, fully leveraging Grafana v10’s new features to deliver a fresh visualization experience.

The most obvious change is color. Pigsty v2.2 adopts a brand-new color scheme. Take the PGSQL Overview dashboard as an example — the new palette uses lower saturation, resulting in a more harmonious and aesthetically pleasing visual experience compared to the previous version.

PGSQL Overview v2.0

Pigsty v2.0 used Grafana’s default high-saturation colors

PGSQL Overview v2.2

Pigsty v2.2: Failed instances shown in black, click to jump directly to the incident scene

The v2.2 monitoring dashboards use PG Blue, Nginx Green, Redis Red, Python Yellow, and Grafana Orange as the base colors. The inspiration for this color scheme came from an article about applying the color palette from Makoto Shinkai’s “Weathering With You” to scientific paper illustrations.

color-scheme

Monitoring Overhaul: Cluster Navigation

Beyond colors, v2.2 also redesigns content organization and layout. For instance, stats tiles now replace the old table-style navigation, making problematic services immediately visible on the first screen. Click any anomalous tile to jump straight to the incident.

The traditional navigation tables still exist for when you need richer information — they’ve been moved to dedicated Instances / Members sections. Let’s look at the most commonly used PGSQL Cluster dashboard:

PGSQL Cluster Stats

The first screen shows tile-based visual navigation displaying cluster component health and service availability, core metrics, load levels, and alert events. It also provides quick navigation to cluster resources — instances, connection pools, load balancers, services, and databases.

PGSQL Cluster Table

Table-style navigation in PGSQL Cluster

The detailed cluster resource tables appear in the second section for reference. Combined with the metrics and logs sections that follow, it presents a complete picture of a PostgreSQL cluster’s core state.

PGSQL Cluster Metrics

Monitoring Overhaul: Instance View

PGSQL Instance shows detailed status for a single instance and has also been redesigned in v2.2. The fundamental design principle: only non-blue/green states need attention. Through color-coded visual encoding, users can quickly identify root causes during incident analysis.

PGSQL Instance

Other instances, host nodes, ETCD, MinIO, and Redis all use similar designs. For example, here’s the Node Instance first screen:

Node Instance

Node Instance metrics remain largely unchanged, but the overview section was redesigned. MinIO Overview follows the same pattern:

MinIO Overview

ETCD Overview uses State Timeline to visualize DCS service availability. The image below shows a simulated ETCD failure scenario: instances are shut down one by one in a 5-node ETCD cluster. The cluster tolerates two node failures, but three failures render the entire ETCD service unavailable (yellow bars turn dark blue, indicating overall ETCD service unavailability).

ETCD Overview

When DCS fails, PostgreSQL clusters relying on ETCD for high availability enable FailSafeMode by default: when all cluster members are reachable and the issue is confirmed to be DCS rather than the instance itself, it prevents unnecessary primary demotion. This status is reflected in PG monitoring:

PG FailSafe

Monitoring Overhaul: Services

Another completely redesigned area is Service and Proxy monitoring. The Service dashboard now includes critical service information: SLI. Through State Timeline bars, users can intuitively see service interruptions, obtain availability metrics, and understand the status of load balancers and backend database servers.

PGSQL Service

In this example, the four HAProxy instances for the pg-test cluster were drained, put into maintenance mode, then the backend database servers were shut down. The pg-test-replica read service only becomes unavailable when all cluster instances are offline.

HAProxy Drain

This shows the monitoring dashboard for pg-test cluster’s HAProxy #1 load balancer. Every service it handles is listed, showing backend server status and calculating SLI. HAProxy’s own status and metrics are in the Node Haproxy dashboard.

HAProxy Instance

The global overview shows the overall status timeline and SLI metrics for all database services in Pigsty.


Monitoring Overhaul: Database Statistics

Besides monitoring database servers, Pigsty also monitors the logical objects they host — databases, tables, queries, indexes, and more.

PGSQL Databases shows cluster-level database statistics. For example, the pg-test cluster has 4 database instances and one database called test. This view enables horizontal comparison of database metrics across all 4 instances.

PGSQL Databases

Users can drill down into statistics within a single database instance via the PGSQL Database dashboard. This dashboard provides key metrics about the database and connection pool, but most importantly, it indexes the most active tables and queries — the two most critical in-database objects.

PGSQL DatabasePGSQL Database TablesPGSQL Database Queries

Monitoring Overhaul: System Catalog

Beyond metrics collected by pg_exporter, Pigsty uses another type of optional supplementary data — system catalogs. This is what the PGCAT dashboard series does. PGCAT Instance directly queries database system catalogs (using at most 8 read-only monitoring connections) to retrieve and present information.

For example, you can get current database activities, locate and analyze slow queries, unused indexes, and sequential scans using various metrics. You can also examine database roles, sessions, replication status, configuration changes, memory usage details, and backup/persistence specifics.

PGCAT Instance 1PGCAT Instance 2

While PGCAT Instance focuses on the database server itself, PGCAT Database focuses on object details within a single database: schemas, tables, indexes, bloat, top SQL, top tables, and more.

PGCAT Database

Each schema, table, and index can be clicked to drill down into more detailed dedicated dashboards. For example, PGCAT Schema shows detailed objects within a schema.

PGCAT Schema

Database queries are also aggregated by execution plan, making it easy to find problematic SQL and quickly locate slow queries.

PGCAT Query

Monitoring Overhaul: Tables and Queries

In Pigsty, you can examine every aspect of a table. The PGCAT Table dashboard shows table metadata, its indexes, statistics for each column, and related queries.

PGCAT Table

You can also use the PGSQL Table dashboard to view key metrics for a table across any historical time period from a metrics perspective. Click the table name to easily switch between views.

PGSQL Table

Similarly, you can get detailed information about SQL queries (grouped by identical execution plans).

PGSQL Query 1PGSQL Query 2

Pigsty includes many more topic-specific dashboards. Due to space constraints, this covers the monitoring system overview. The best way to experience it is to visit the public Pigsty demo: http://demo.pigsty.cc and explore it yourself. While it’s just a modest 4-node environment with 1-core VMs, it’s sufficient to demonstrate Pigsty’s core monitoring capabilities.


Production Simulation Sandbox

Pigsty provides a Vagrant + VirtualBox sandbox environment that runs on your laptop/Mac. There’s a minimal 1-node version and a full 4-node version for demos and learning. Now v2.2 adds a 42-node production simulation sandbox.

All production sandbox details are described in the prod.yml config file — under 500 lines. It runs easily on a single physical server, and spinning it up is no different from the 4-node version: just make prod install.

Prod Config

Pigsty v2.2 provides libvirt-based Vagrantfile templates. Simply adjust the machine inventory in the config above, and you can create all required VMs with one command. Everything runs comfortably on a used Dell R730 (48C 256G) — which costs under $400 secondhand. Of course, you can still use Pigsty’s Terraform templates to spin up VMs on cloud providers with one click.

After installation, the environment looks like this: a two-node monitoring infrastructure with primary-standby setup, a dedicated 5-node ETCD cluster, a 3-node MinIO cluster providing object storage for PG backups, and a dedicated 2-node HAProxy cluster for unified database load balancing.

Prod Infra

On top of this, there are 3 Redis clusters and 10 PostgreSQL clusters of various configurations, including a ready-to-use 5-shard Citus 12 distributed PostgreSQL cluster.

This configuration serves as a reference for medium-to-large enterprises managing large-scale database clusters — and you can spin it up completely in half an hour on a single physical server.


Smoother Build Process

When downloading Pigsty software directly from the internet, you might encounter firewall/GFW issues. For example, the default Grafana/Prometheus Yum repos can be extremely slow. Additionally, some scattered RPM packages need to be downloaded via web URLs rather than repotrack.

Pigsty v2.2 solves this problem. Pigsty now provides an official Yum repo: http://get.pigsty.cc, configured as one of the default upstream sources. All scattered RPMs and packages requiring VPN access are hosted there, significantly speeding up online installation/build processes.

Additionally, v2.2 adds support for the domestic Chinese operating system UOS 1050e uel20, meeting special requirements for certain customers. Pigsty has recompiled PG-related RPM packages for these systems.


Installation

Starting with v2.2, the Pigsty installation command is:

bash -c “$(curl -fsSL http://get.pigsty.cc/latest)"

One command to complete a full Pigsty installation on a fresh machine. To try beta versions, replace latest with beta. For air-gapped environments without internet access, you can download Pigsty and the offline packages containing all software:

http://get.pigsty.cc/v2.2.0/pigsty-v2.2.0.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el7.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el8.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el9.x86_64.tgz

That’s what Pigsty v2.2 brings to the table.

For more details, check out the official Pigsty documentation: https://pigsty.io and the GitHub Release Notes: https://github.com/pgsty/pigsty/releases/tag/v2.2.0


v2.2.0 Release Notes

Highlights

  • Monitoring Dashboard Overhaul: https://demo.pigsty.cc
  • Vagrant Sandbox Redesign: libvirt support with new config templates
  • Pigsty EL Yum Repos: Consolidated scattered RPMs, simplified installation/build process
  • OS Compatibility: Added UOS-v20-1050e support
  • New Config Template: 42-node production simulation configuration
  • Unified official PGDG Citus packages (el7)

Software Upgrades

  • PostgreSQL 16 beta2
  • Citus 12 / PostGIS 3.3.3 / TimescaleDB 2.11.1 / PGVector 0.44
  • Patroni 3.0.4 / pgBackRest 2.47 / pgBouncer 1.20
  • Grafana 10.0.3 / Loki/Promtail/logcli 2.8.3
  • etcd 3.5.9 / HAProxy v2.8.1 / Redis v7.0.12
  • MinIO 20230711212934 / mcli 20230711233044

Bug Fixes

  • Fixed Docker group permission issue 29434bd
  • Made infra OS user group supplementary rather than primary
  • Fixed Redis Sentinel systemd service auto-enable state 5c96feb
  • Relaxed bootstrap & configure checks, especially when /etc/redhat-release doesn’t exist
  • Upgraded to Grafana 10, fixing Grafana 9.x CVE-2023-1410
  • Added PG 14-16 command tags and error codes to CMDB pglog schema

API Changes

New variable:

  • INFRA.NGINX.nginx_exporter_enabled: Users can now disable nginx_exporter by setting this parameter

Default value changes:

  • repo_modules: node,pgsql,infra : Redis now provided by pigsty-el repo, no longer needs redis module
  • repo_upstream:
    • Added pigsty-el: EL version-independent RPMs: grafana, minio, pg_exporter, etc.
    • Added pigsty-misc: EL version-specific RPMs: redis, prometheus stack, etc.
    • Removed citus: PGDG now has complete EL7-EL9 Citus 12 support
    • Removed remi: Redis now provided by pigsty-el repo
  • repo_packages: Consolidated package lists (see source for details)
  • repo_url_packages:
  • node_default_packages: Updated package list
  • infra_packages: Updated package list
  • PGSERVICE in .pigsty replaced with PGDATABASE=postgres, allowing users to access specific instances from admin node using just IP address

Directory structure changes:

  • bin/dns and bin/ssh moved to vagrant/ directory
MD5 (pigsty-pkg-v2.2.0.el7.x86_64.tgz) = 5fb6a449a234e36c0d895a35c76add3c
MD5 (pigsty-pkg-v2.2.0.el8.x86_64.tgz) = c7211730998d3b32671234e91f529fd0
MD5 (pigsty-pkg-v2.2.0.el9.x86_64.tgz) = 385432fe86ee0f8cbccbbc9454472fdd

1.31 - Pigsty v2.1: Vector + Full PG Version Support!

Originally published on VONNG.

GitHub Release | Release Note

Following PostgreSQL’s summer minor version updates and the release of PG 16 Beta, Pigsty closely tracks the PG community with the v2.1 release. This update supports PostgreSQL 16 Beta1 high availability and new monitoring metrics, while also providing support for PG 12-15. Meanwhile, the AI vector extension PGVector officially joined Pigsty in v2.0.2 and is now enabled by default.

Vector Database Extension: PGVector

Vector databases have been extremely hot lately. There are many specialized vector database products on the market — commercial ones like Pinecone and Zilliz, and open-source ones like Milvus and Qdrant. Among all existing vector databases, pgvector is unique — it chose to build on the world’s most powerful open-source relational database PostgreSQL as an extension, rather than starting from scratch as another specialized “database”. After all, building a good TP database from zero is very difficult.

pgvector has an elegant, simple, and easy-to-use interface, respectable performance, and inherits PostgreSQL’s ecosystem superpowers. Previously, PGVECTOR required manual download, compilation, and installation, so I submitted an issue to get it added to the PostgreSQL Global Development Group’s official repository. Now you can simply use the PGDG repo and run yum install pgvector_15 to complete installation. In database instances with pgvector installed, just use CREATE EXTENSION vector to enable it.

But with Pigsty, you don’t even need this process. In Pigsty v2.0.2 released in late March, PGVector extension was already integrated and installed by default. You just need CREATE EXTENSION vector and it’s ready to use.

We’re also working on a better PGVector implementation with improved functionality, performance, and usability — stay tuned for future versions.

pgvector

PG16 Support and Observability

Pigsty is perhaps the fastest distribution to provide PostgreSQL 16 support — although still in Beta, with some extensions yet to catch up, you can already spin up PostgreSQL 16 high-availability clusters for testing. PostgreSQL 16 has some practical new features: logical decoding and logical replication from standbys, new statistics views for I/O, parallel execution of full joins, better freezing performance, new SQL/JSON standard function set, and regular expressions in HBA authentication.

Pigsty pays special attention to PostgreSQL 16’s observability improvements. The new pg_stat_io view lets users access important I/O statistics directly from within the database — extremely significant for performance optimization and failure analysis. Previously, users could only see limited statistics at the database/BGWriter level; for finer statistics, they had to correlate with OS-level I/O metrics. Now you can deeply analyze reads/writes/extends/fsyncs/hits/evictions across three dimensions: backend process type, relation type, and operation type.

pg-stat-io

Another valuable observability improvement: pg_stat_all_tables and pg_stat_all_indexes now record the timestamp of the last sequential scan / index scan. While Pigsty’s monitoring system could achieve this through scan statistics charts, official direct support is certainly better: users can intuitively draw conclusions like whether an index is unused and can be removed. Additionally, the n_tup_newpage_upd metric tells us how many rows on a table were moved to a new page during updates rather than updated in-place — this metric is valuable for optimizing UPDATE performance and adjusting table fill factor.

PGSQL 12-15 Support

Pigsty has supported PostgreSQL since version 10, always closely following the community’s latest major versions. But users do have needs for older versions — some external components only support up to a certain version, some are cautious about upgrading to the latest major version, and some want to create a Pigsty-managed Standby Cluster from existing lower-version clusters for migration. Regardless, support for lower PostgreSQL versions is a real user demand. So in v2.1, we added support for PG 12-14, all included in the offline packages by default.

Each major version includes not just core packages, but also important extensions for that version: geospatial extension PostGIS, time-series database extension TimescaleDB, distributed database extension citus, vector database extension PGVector, online garbage collection extension pg_repack, CDC logical decoding extensions wal2json and pglogical, scheduled task extension pg_cron, and password strength checking extension passwordcheck_cracklib — ensuring each major version enjoys PostgreSQL ecosystem’s core capabilities.

PostgreSQL 11 can actually be supported too, but due to some missing extensions and its upcoming EOL, it was excluded from this update. For users new to PostgreSQL, we always recommend starting with the latest stable major version (currently 15). If you really need versions 10 or 11, you can follow the tutorial to adjust package versions in the repository and build yourself.

Grafana Monitoring System Improvements

With Grafana upgraded to v9.5.3, the new navigation bar and panel layout give Pigsty’s monitoring system UI a fresh look. All monitoring dashboards have been fine-tuned and adapted for the new UI, and some inconsistent styling issues have been fixed.

grafana-ui

Pigsty 2.1 introduces 4 Grafana extension plugins from volkovlabs. Using Grafana + Echarts for data visualization and analysis has always been a feature highlight that Pigsty advocates and supports, but limited author bandwidth made it difficult to invest resources in this direction.

Before v2.1’s release, I was happy to see a professionally maintained Apache Echarts panel plugin — finally I can breathe easy and retire my self-maintained echarts panel. A professional startup team chose to expand in this direction, developing a series of useful extension plugins: Dynamic Text plugin for rendering SVG and text from backend data, Form plugin for form submissions, dynamic data calendar plugin, and more.

volkovlabs

Additionally, Pigsty specifically added echarts-gl extension resources in Grafana’s public/chart directory, allowing users to create cool 3D globe panels like those in Apache Echarts’ official gallery using Pigsty’s built-in Grafana without internet access.

Other Utility Improvements

Pigsty 2.1 adds 3 convenience commands: profile, validate, and repo-add.

The bin/validate command accepts a config file path as input, checking and validating Pigsty configuration file correctness. Common issues like accidentally writing the same IP in different clusters, configuration name/type errors, and the most common YAML indentation format errors can all be automatically detected and reported. After modifying configuration, users can use bin/validate to ensure their changes are valid.

The bin/repo-add command is for manually adjusting YUM repos on nodes. When users want to add new packages to local repos, they often need to use Ansible playbook subtasks, which is inconvenient. Now you can use the wrapped command-line tool: for example, bin/repo-add infra node,pgsql will add repos categorized as node and pgsql to nodes in the infra group.

The bin/profile command conveniently performs perf sampling for 1 minute on a process with a specific PID at a given IP address, generating a flame graph in Pigsty’s web server directory. Users can open and browse it directly from the web interface — this feature is especially useful for analyzing internal database failures and performance bottlenecks.


v2.1.0 Release Notes

Highlights

  • PostgreSQL 16 beta support, plus support for versions 12-15
  • Added PGVector extension support for PG 12-15 for storing AI embeddings
  • Added 6 additional default extension panel/datasource plugins for Grafana
  • Added bin/profile script for remote profiling and flame graph generation
  • Added bin/validate for validating pigsty.yml configuration file correctness
  • Added bin/repo-add for quickly adding Yum repo definitions to nodes
  • PostgreSQL 16 observability: added pg_stat_io support and related monitoring dashboards

Software Upgrades

  • PostgreSQL 15.3, 14.8, 13.11, 12.15, 11.20, and 16 beta1
  • pgBackRest 2.46 / pgbouncer 1.19
  • Redis 7.0.11
  • Grafana v9.5.3
  • Loki / Promtail / Logcli 2.8.2
  • Prometheus 2.44
  • TimescaleDB 2.11.0
  • minio-20230518000536 / mcli-20230518165900
  • Bytebase v2.2.0

Improvements

  • When adding local user public keys, all id*.pub files are now added to remote machines (e.g., keys generated with elliptic curve algorithms)

1.32 - Pigsty v2.0: Open-Source RDS PostgreSQL Alternative

Originally published on VONNG.

GitHub Release | Release Note

2023/02/28, Pigsty v2.0.0 is officially released, bringing a series of major feature updates.

PIGSTY now stands for “PostgreSQL In Great STYle” — PostgreSQL at its best. Pigsty’s positioning has also evolved from “batteries-included PostgreSQL distribution” to “Me Better Open-Source RDS PG Alternative”.

No beating around the bush — this is an ambitious goal: overthrow cloud database monopolies and disrupt RDS!

intro

2.0 New Features

Pigsty is a better, local-first, open-source RDS for PostgreSQL alternative.

features

Powerful Distribution

Unleash the full power of the world’s most advanced relational database!

PostgreSQL is a near-perfect database kernel, but it needs more tools and systems to become a good enough database service (RDS) — Pigsty helps PostgreSQL make this leap.

Pigsty deeply integrates PostgreSQL ecosystem’s three core extensions: PostGIS, TimescaleDB, and Citus, ensuring they work together to provide distributed geospatial time-series database capabilities. Pigsty also provides software needed to run enterprise-grade RDS services, packaging all dependencies into offline bundles. All components can be installed and deployed with one click without internet access, ready for production.

In Pigsty, functional components are abstracted into modules that can be freely combined for various scenarios. The INFRA module comes with a complete modern monitoring stack, while the NODE module tunes nodes to specified states and integrates them into monitoring. Installing the PGSQL module on multiple nodes automatically forms a high-availability database cluster based on primary-replica replication, and the ETCD module provides consensus and metadata storage for database HA. The optional MINIO module can serve as storage for large files like images and videos, or as a database backup repository. REDIS, which pairs excellently with PG, is also supported. More modules (like GPSQL, MYSQL, KAFKA) will be added later, and you can develop your own modules to extend Pigsty’s capabilities.

modules

Stunning Observability

Unparalleled monitoring best practices using modern open-source observability stack!

Pigsty provides monitoring best practices based on the open-source Grafana/Prometheus observability stack: Prometheus for metric collection, Grafana for visualization, Loki for log collection and querying, Alertmanager for alert notifications. PushGateway for batch job monitoring, Blackbox Exporter for service availability checks. The entire system is designed as a one-click, out-of-the-box INFRA module.

Any component managed by Pigsty is automatically integrated into monitoring, including host nodes, HAProxy load balancers, Postgres databases, Pgbouncer connection pools, ETCD metadata stores, Redis KV caches, MinIO object storage, and the entire monitoring infrastructure itself. Numerous Grafana dashboards and preset alert rules will qualitatively enhance your system observability. This system can also be reused for your application monitoring infrastructure, or to monitor existing database instances or RDS.

Whether for failure analysis or slow query optimization, capacity assessment or resource planning, Pigsty provides comprehensive data support for truly data-driven operations. In Pigsty, over three thousand metric types describe every aspect of the system, further processed, aggregated, analyzed, refined, and presented in intuitive visualizations. From global fleet overviews to CRUD details of individual objects (tables, indexes, functions) in a database instance — everything is visible. You can drill down, roll up, and navigate horizontally, browsing system current state and historical trends while predicting future evolution. See the public demo: http://demo.pigsty.cc.

observability

Battle-Tested Reliability

Out-of-the-box high availability and point-in-time recovery ensure your database is rock solid!

For table/database drops caused by software defects or human error, Pigsty provides out-of-the-box PITR point-in-time recovery, enabled by default without additional configuration. As long as storage is sufficient, base backups and WAL archiving powered by pgBackRest give you the ability to quickly return to any point in time. You can use local directories/disks, dedicated MinIO clusters, or S3 object storage for longer retention periods — your choice.

More importantly, Pigsty makes high availability and self-healing standard for PostgreSQL clusters. The self-healing architecture built on patroni, etcd, and haproxy handles hardware failures with ease: RTO < 30s for automatic primary failover, RPO = 0 in consistency-priority mode ensuring zero data loss. As long as any instance in the cluster survives, the cluster can provide full service, and clients connecting to any node in the cluster get complete service.

Pigsty includes HAProxy load balancer for automatic traffic switching, offering DNS/VIP/LVS and other access methods for clients. Failover and planned switchover are nearly imperceptible to applications except for brief blips — no need to modify connection strings and restart. Minimal maintenance windows bring great flexibility: you can perform rolling maintenance and upgrades without application coordination. Hardware failures can wait until the next day for leisurely handling — letting developers, ops, and DBAs sleep peacefully. Many large organizations and core institutions have been using Pigsty in production for extended periods. The largest deployment has 25K CPU cores and 200+ PostgreSQL instances. In this case, Pigsty experienced dozens of hardware failures and incidents over three years while maintaining 99.999%+ overall availability.

reliability

Simple and Maintainable

Infra as Code — declarative APIs encapsulate database management complexity.

Pigsty uses declarative interfaces, elevating system controllability to a new level: users tell Pigsty “what kind of database cluster I want” via configuration inventory, without worrying about how to do it. In effect, this is similar to K8S CRDs and Operators, but Pigsty works on any node’s database and infrastructure — containers, VMs, or bare metal.

Whether creating/destroying clusters, adding/removing replicas, or provisioning databases/users/services/extensions/ACL rules, you just modify the configuration inventory and run Pigsty’s idempotent playbooks — Pigsty adjusts the system to your desired state. Users don’t worry about configuration details; Pigsty automatically tunes based on machine hardware. You only need to focus on basics like cluster name, which instances go on which machines, which template to use (transaction/analytics/critical/tiny) — developers can self-service. But if you want to dive deeper, Pigsty provides rich, fine-grained control parameters to satisfy the pickiest DBA’s customization needs.

Additionally, Pigsty installation itself is one-click simple, with all dependencies pre-packaged for offline installation without internet access. Machine resources for installation can be automatically provisioned via Vagrant or Terraform templates, letting you spin up a complete Pigsty deployment on your local laptop or cloud VMs in ten-ish minutes. The local sandbox can run on 1-core 2GB micro VMs, providing identical functionality to production for development, testing, demos, and learning.

maintainability

Solid Security

Encryption and backup all in one — as long as hardware and keys are secure, you don’t need to worry about database security.

Each Pigsty deployment creates a self-signed CA for certificate issuance. All network communication can use SSL encryption. Database passwords are encrypted with compliant scram-sha-256 algorithm, remote backups use AES-256 encryption. Additionally, an out-of-the-box access control system for PGSQL addresses security needs for most scenarios.

Pigsty provides an out-of-the-box, easy-to-use, refined and flexible, easily extensible access control system for PostgreSQL, including four default roles with separation of duties: read (DQL) / write (DML) / admin (DDL) / offline (ETL), and four default users: dbsu / replicator / monitor / admin. All database templates have sensible default permissions for these roles and users, and any new database objects automatically follow this permission system. Client access is restricted by HBA rule groups designed on the principle of least privilege, with all sensitive operations logged for audit.

All network communication can use SSL encryption. Sensitive management pages and API endpoints are protected by multiple layers: username/password authentication, access restricted to management node/infrastructure node IPs/subnets, HTTPS required for network traffic. Patroni API and Pgbouncer have SSL disabled by default for performance reasons, but security switches are available when needed. Properly configured systems pass security certifications easily. With internal network deployment, properly configured security groups and firewalls, database security will no longer be your pain point.

security

Broad Application Scenarios

One-click launch massive software using PostgreSQL with preset Docker templates!

In data-intensive applications, databases are often the trickiest part. For example, the core difference between GitLab Enterprise and Community editions is the underlying PostgreSQL database monitoring and HA. If you already have a good enough local PG RDS, why pay for software’s homegrown database?

Pigsty provides the Docker module with many out-of-the-box Compose templates. You can use Pigsty-managed HA PostgreSQL (plus Redis and MinIO) as backend storage, launching these applications statelessly with one click: Gitlab, Gitea, Wiki.js, Odoo, Jira, Confluence, Habour, Mastodon, Discourse, KeyCloak, etc. If your application needs a reliable PostgreSQL database, Pigsty might be the simplest way to get one.

Pigsty also provides development toolkits tightly integrated with PostgreSQL: PGAdmin4, PGWeb, ByteBase, PostgREST, Kong, plus “upper-layer databases” using PostgreSQL as storage like EdgeDB, FerretDB, and Supabase. Even better, you can build interactive data applications using Pigsty’s built-in Grafana and Postgres in a low-code way, and even create more expressive interactive visualizations with Pigsty’s built-in ECharts panel.

applications

Open-Source Free Software

Pigsty is free software under AGPLv3, nurtured by community members who love PostgreSQL

Pigsty is completely open-source and free, allowing you to run enterprise-grade PostgreSQL database services at nearly bare-metal hardware costs without database experts. By comparison, public cloud vendors charge premiums of several to over ten times the underlying hardware resources as “service fees” for RDS.

Many users choose cloud because they can’t handle databases themselves; many use RDS because there’s no alternative. We will break cloud vendor monopolies, providing users with a cloud-neutral, better open-source RDS alternative: Pigsty closely follows the PostgreSQL upstream trunk, with no vendor lock-in, no annoying “license fees”, no node limits, and no data collection. All your core assets — data — remain “autonomous and controllable” in your own hands.

Pigsty aims to replace tedious manual database ops with database autopilot software, but no software can solve every problem. There will always be some rare edge cases requiring expert intervention. This is why we offer professional subscription services for enterprise users needing PostgreSQL support. A few thousand dollars in subscription/consulting fees is a tiny fraction of a top DBA’s annual salary, giving you complete peace of mind and putting costs where they matter. For community users, we also provide free support and daily Q&A.

opensource

2.0 Quick Start

Pigsty 2.0 installation is still one command:

curl -fsSL http://download.pigsty.cc/get | bash
install

For limited internet access, you can download the offline package for your OS from GitHub or CDN in advance. The monitoring system has a public demo: http://demo.pigsty.cc.

demo

v2.0.0 Release Notes

Highlights

  • Perfect integration of PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 — distributed geospatial time-series hyper-converged database
  • Major OS compatibility improvements: supports EL7, 8, 9, plus RHEL, CentOS, Rocky, OracleLinux, AlmaLinux compatible distros
  • Security improvements: self-signed CA, global SSL network encryption, scram-sha-256 password auth, AES-encrypted backups, redesigned HBA rule system
  • Patroni upgraded to 3.0, providing native HA Citus distributed cluster support, FailSafe mode enabled by default — no fear of DCS failures causing global primary outages
  • Out-of-the-box PITR support based on pgBackRest, default support for local filesystem and dedicated MinIO/S3 cluster backups
  • New ETCD module: independently deployable, easy scaling, built-in monitoring and HA, completely replacing Consul as DCS for HA PG
  • New MINIO module: independently deployable, multi-disk multi-node support, S3 local replacement, also for centralized PostgreSQL backup repository
  • Significantly simplified configuration parameters, usable without defaults; templates auto-adjust host and PG parameters based on machine specs, HBA/service definitions more concise and universal
  • License changed from Apache License 2.0 to AGPL 3.0 due to Grafana and MinIO dependencies

Compatibility

  • Supports EL7, EL8, EL9 major versions with corresponding offline packages, default dev/test environment upgraded from EL7 to EL9
  • Supports more EL-compatible Linux distros: RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux, etc.
  • Source and offline package naming conventions changed — version, OS version, and architecture now reflected in package names
  • PGSQL: PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 now work together harmoniously
  • PGSQL: Patroni upgraded to 3.0 as PGSQL HA component
    • ETCD now default DCS, replacing Consul, eliminating one Consul Agent failure point
    • vip-manager upgraded to 2.1 using ETCDv3 API, completely deprecating ETCDv2 API; same for Patroni
    • Native HA Citus distributed cluster support using fully open-source Citus 11.2
    • FailSafe mode enabled by default — no fear of DCS failures causing global primary outages
  • PGSQL: pgBackrest v2.44 introduced for out-of-the-box PostgreSQL PITR
    • Default backup repo on primary’s backup directory, rolling two-day recovery window
    • Default alternative repo is dedicated MinIO/S3 cluster, rolling two-week recovery window; local use requires enabling MinIO module
  • ETCD now an independently deployed module with complete scale-out/in solution and monitoring
  • MINIO now an independently deployed module, multi-disk multi-node support, S3 local replacement, also for centralized backup repository
  • NODE module now includes haproxy, docker, node_exporter, promtail components
    • chronyd now replaces ntpd as default NTP service on all nodes
    • HAPROXY now part of NODE rather than PGSQL-exclusive, can expose services via NodePort
    • PGSQL module can now use dedicated centralized HAPROXY cluster for unified external service
  • INFRA module now includes dnsmasq, nginx, prometheus, grafana, loki components
    • DNSMASQ server in Infra module enabled by default, added as default DNS server for all nodes
    • Added blackbox_exporter for host PING probing, pushgateway for batch job metrics
    • loki and promtail now use Grafana’s default packages with official Grafana Echarts panel plugin
    • Monitoring support for PostgreSQL 15’s new observability points, added Patroni monitoring
  • Software version upgrades
    • PostgreSQL 15.2 / PostGIS 3.3 / TimescaleDB 2.10 / Citus 11.2
    • Patroni 3.0 / Pgbouncer 1.18 / pgBackRest 2.44 / vip-manager 2.1
    • HAProxy 2.7 / Etcd 3.5 / MinIO 20230131022419 / mcli 20230128202938
    • Prometheus 2.42 / Grafana 9.3 / Loki & Promtail 2.7 / Node Exporter 1.5

Security

  • Complete local self-signed CA: pigsty-ca for issuing internal component certificates
  • User creation/password changes no longer leave traces in log files
  • Nginx enables SSL support by default (for HTTPS, trust pigsty-ca in your system or use Chrome thisisunsafe)
  • ETCD fully enables SSL encryption for client and peer communication
  • PostgreSQL SSL support added and enabled by default, management connections use SSL
  • Pgbouncer SSL support added, disabled by default for performance
  • Patroni SSL support added, management API restricted to local and admin node access with password auth
  • PostgreSQL default password auth changed from md5 to scram-sha-256
  • Pgbouncer auth query support added for dynamic connection pool user management
  • pgBackRest uses AES-256-CBC encryption by default for remote centralized backup storage
  • High-security template provided: enforces global SSL and requires admin certificate login
  • All default HBA rules now explicitly defined in config files

Maintainability

  • Existing config templates auto-adjust optimizations based on machine specs (CPU/memory/storage)
  • Postgres/Pgbouncer/Patroni/pgBackRest log directories now dynamically configurable: default /pg/log/<type>/
  • Original IP placeholder 10.10.10.10 replaced with dedicated variable ${admin_ip}, referenceable in multiple places for switching backup admin nodes
  • region can be specified to use upstream mirrors from different regions for faster package downloads
  • Finer-grained upstream source addresses now allowed based on EL version, architecture, and region
  • Terraform templates for Alibaba Cloud and AWS China provided for one-click EC2 VM provisioning
  • Multiple Vagrant sandbox templates provided: meta, full, el7/8/9, minio, build, citus
  • New dedicated playbook: pgsql-monitor.yml for monitoring existing Postgres instances or RDS
  • New dedicated playbook: pgsql-migration.yml for seamless logical replication migration to Pigsty-managed clusters
  • Series of dedicated shell utilities added, wrapping common ops operations
  • All Ansible roles optimized for simplicity, readability, and maintainability — usable without default parameters
  • Additional Pgbouncer parameters can be defined at business database/user level

API Changes

Pigsty v2.0 has extensive changes: 64 new parameters, 13 removed, 17 renamed.

New Parameters

  • INFRA.META.admin_ip: Primary meta node IP address
  • INFRA.META.region: Upstream mirror region: default|china|europe
  • INFRA.META.os_version: Enterprise Linux version: 7,8,9
  • INFRA.CA.ca_cn: CA Common Name, default pigsty-ca
  • INFRA.CA.cert_validity: Certificate validity, default 20 years
  • INFRA.REPO.repo_enabled: Build local yum repo on infra node?
  • INFRA.REPO.repo_upstream: Upstream yum repo definition list
  • INFRA.REPO.repo_home: Local yum repo home directory, usually same as nginx_home ‘/www’
  • INFRA.NGINX.nginx_ssl_port: HTTPS listen port
  • INFRA.NGINX.nginx_ssl_enabled: Enable nginx HTTPS?
  • INFRA.PROMETHEUS.alertmanager_endpoint: Alertmanager endpoint (ip|domain):port format
  • NODE.NODE_TUNE.node_hugepage_ratio: Memory hugepage ratio, default 0 (disabled)
  • NODE.HAPROXY.haproxy_service: List of haproxy services to expose
  • PGSQL.PG_ID.pg_mode: pgsql cluster mode: pgsql,citus,gpsql
  • PGSQL.PG_BUSINESS.pg_dbsu_password: dbsu password, empty string means no dbsu password
  • PGSQL.PG_INSTALL.pg_log_dir: postgres log directory, default /pg/data/log
  • PGSQL.PG_BOOTSTRAP.pg_storage_type: SSD|HDD, default SSD
  • PGSQL.PG_BOOTSTRAP.patroni_log_dir: patroni log directory, default /pg/log
  • PGSQL.PG_BOOTSTRAP.patroni_ssl_enabled: Use SSL for patroni RestAPI?
  • PGSQL.PG_BOOTSTRAP.patroni_username: patroni rest api username
  • PGSQL.PG_BOOTSTRAP.patroni_password: patroni rest api password (important: change this)
  • PGSQL.PG_BOOTSTRAP.patroni_citus_db: Citus database managed by patroni, default postgres
  • PGSQL.PG_BOOTSTRAP.pg_max_conn: postgres max connections, auto uses recommended value
  • PGSQL.PG_BOOTSTRAP.pg_shmem_ratio: postgres shared memory ratio, default 0.25, range 0.1~0.4
  • PGSQL.PG_BOOTSTRAP.pg_rto: Recovery Time Objective, failover ttl, default 30s
  • PGSQL.PG_BOOTSTRAP.pg_rpo: Recovery Point Objective, max 1MB data loss by default
  • PGSQL.PG_BOOTSTRAP.pg_pwd_enc: Password encryption algorithm: md5|scram-sha-256
  • PGSQL.PG_BOOTSTRAP.pgbouncer_log_dir: pgbouncer log directory, default /var/log/pgbouncer
  • PGSQL.PG_BOOTSTRAP.pgbouncer_auth_query: If enabled, query pg_authid for biz users instead of populating user list
  • PGSQL.PG_BOOTSTRAP.pgbouncer_sslmode: pgbouncer client SSL: disable|allow|prefer|require|verify-ca|verify-full
  • PGSQL.PG_BOOTSTRAP.pg_service_provider: Dedicated haproxy node group name, or empty for local node
  • PGSQL.PG_BOOTSTRAP.pg_default_service_dest: Default service destination if svc.dest=‘default’
  • PGSQL.PG_BACKUP.pgbackrest_enabled: Enable pgbackrest?
  • PGSQL.PG_BACKUP.pgbackrest_clean: Remove pgbackrest data during init?
  • PGSQL.PG_BACKUP.pgbackrest_log_dir: pgbackrest log directory, default /pg/log
  • PGSQL.PG_BACKUP.pgbackrest_method: pgbackrest backup repo method: local or minio
  • PGSQL.PG_BACKUP.pgbackrest_repo: pgbackrest backup repo config
  • PGSQL.PG_DNS.pg_dns_suffix: pgsql dns suffix, default empty
  • PGSQL.PG_DNS.pg_dns_target: auto, primary, vip, none, or ad hoc ip
  • ETCD.etcd_seq: etcd instance identifier, required
  • ETCD.etcd_cluster: etcd cluster and group name, default etcd
  • ETCD.etcd_safeguard: Prevent purging running etcd instances?
  • ETCD.etcd_clean: Clean existing etcd during init?
  • ETCD.etcd_data: etcd data directory, default /data/etcd
  • ETCD.etcd_port: etcd client port, default 2379
  • ETCD.etcd_peer_port: etcd peer port, default 2380
  • ETCD.etcd_init: etcd initial cluster state: new or existing
  • ETCD.etcd_election_timeout: etcd election timeout, default 1000ms
  • ETCD.etcd_heartbeat_interval: etcd heartbeat interval, default 100ms
  • MINIO.minio_seq: minio instance identifier, required
  • MINIO.minio_cluster: minio cluster name, default minio
  • MINIO.minio_clean: Clean minio during init? default false
  • MINIO.minio_user: minio OS user, default minio
  • MINIO.minio_node: minio node name pattern
  • MINIO.minio_data: minio data directory, use {x…y} for multiple drives
  • MINIO.minio_domain: minio external domain, default sss.pigsty
  • MINIO.minio_port: minio service port, default 9000
  • MINIO.minio_admin_port: minio console port, default 9001
  • MINIO.minio_access_key: root access key, default minioadmin
  • MINIO.minio_secret_key: root secret key, default minioadmin
  • MINIO.minio_extra_vars: extra environment variables for minio server
  • MINIO.minio_alias: alias for local minio deployment
  • MINIO.minio_buckets: list of minio buckets to create
  • MINIO.minio_users: list of minio users to create

Removed Parameters

  • INFRA.CA.ca_homedir: CA home directory, now fixed to /etc/pki/
  • INFRA.CA.ca_cert: CA certificate filename, now fixed to ca.key
  • INFRA.CA.ca_key: CA key filename, now fixed to ca.key
  • INFRA.REPO.repo_upstreams: Replaced by repo_upstream
  • PGSQL.PG_INSTALL.pgdg_repo: Now handled by node playbooks
  • PGSQL.PG_INSTALL.pg_add_repo: Now handled by node playbooks
  • PGSQL.PG_IDENTITY.pg_backup: Unused and conflicted with partial names
  • PGSQL.PG_IDENTITY.pg_preflight_skip: No longer used, replaced by pg_id
  • DCS.dcs_name: Removed due to etcd usage
  • DCS.dcs_servers: Replaced by ad hoc group etcd
  • DCS.dcs_registry: Removed due to etcd usage
  • DCS.dcs_safeguard: Replaced by etcd_safeguard
  • DCS.dcs_clean: Replaced by etcd_clean

Renamed Parameters

  • nginx_upstream -> infra_portal
  • repo_address -> repo_endpoint
  • pg_hostname -> node_id_from_pg
  • pg_sindex -> pg_group
  • pg_services -> pg_default_services
  • pg_services_extra -> pg_services
  • pg_hba_rules_extra -> pg_hba_rules
  • pg_hba_rules -> pg_default_hba_rules
  • pgbouncer_hba_rules_extra -> pgb_hba_rules
  • pgbouncer_hba_rules -> pgb_default_hba_rules
  • vip_mode -> pg_vip_enabled
  • vip_address -> pg_vip_address
  • vip_interface -> pg_vip_interface
  • node_packages_default -> node_default_packages
  • node_packages_meta -> infra_packages
  • node_packages_meta_pip -> infra_packages_pip
  • node_data_dir -> node_data

Special thanks to Italian user @alemacci for contributions on SSL encryption, backup, multi-OS distro adaptation, and adaptive parameter templates!


v2.0.1 Release Notes

Security improvements and bug fixes for v2.0.0.

Improvements

  • New pig logo to comply with PostgreSQL trademark policy
  • Grafana upgraded to v9.4 with better UI and bug fixes
  • Patroni upgraded to v3.0.1 with bug fixes
  • Grafana systemd service file reverted to rpm default
  • Use slower copy instead of rsync for Grafana dashboard sync, more reliable
  • Bootstrap now restores default repo files after execution
  • Added asciinema videos for various admin tasks
  • Security enhancement mode: restricted monitoring user permissions
  • New config template: dual.yml for two-node deployment
  • Enable log_connections and log_disconnections in crit.yml template
  • Enable $lib/passwordcheck in pg_libs in crit.yml template
  • Explicitly grant pg_monitor role monitoring view permissions
  • Remove default dbrole_readonly from dbuser_monitor to restrict monitoring user permissions
  • Patroni now listens on {{ inventory_hostname }} instead of 0.0.0.0
  • pg_listen now controls postgres/pgbouncer listen address
  • ${ip}, ${lo}, ${vip} placeholders now available in pg_listen
  • Aliyun terraform image upgraded from centos 7.9 to Rocky Linux 9
  • Bytebase upgraded to v1.14.0

Bug Fixes

  • Added missing advertise address for alertmanager
  • Fixed missing pg_mode variable when creating database users with bin/pgsql-user
  • Added -a password option for Redis cluster join task in redis.yml
  • Added missing default value in infra-rm.yml.remove infra data task
  • Fixed prometheus monitoring target definition file owner to prometheus user
  • Use admin user instead of root to delete DCS metadata
  • Fixed issue caused by Grafana 9.4 bug: missing Meta datasource

v2.0.2 Release Notes

Highlights

Use out-of-the-box pgvector to store AI Embeddings, index, and retrieve vectors.

Changes

  • New extension pgvector for storing AI embeddings and vector similarity search
  • Fixed MinIO CVE-2023-28432, using new policy API from 20230324
  • Added dynamic reload command for DNSMASQ systemd service
  • Updated PEV version to v1.8
  • Updated Grafana version to v9.4.7
  • Updated MinIO and MCLI versions to 20230324
  • Updated Bytebase version to v1.15.0
  • Updated monitoring dashboards and fixed dead links
  • Updated Aliyun Terraform template, default to RockyLinux 9
  • Using Grafana v9.4 Provisioning API
  • Added asciinema videos for many admin tasks
  • Fixed EL8 PostgreSQL broken dependencies: removed anonymizer_15 faker_15 pgloader
MD5 (pigsty-pkg-v2.0.2.el7.x86_64.tgz) = d46440a115d741386d29d6de646acfe2
MD5 (pigsty-pkg-v2.0.2.el8.x86_64.tgz) = 5fa268b5545ac96b40c444210157e1e1
MD5 (pigsty-pkg-v2.0.2.el9.x86_64.tgz) = c8b113d57c769ee86a22579fc98e8345

1.33 - Pigsty v1.5: Docker Application Support, Infrastructure Self-Monitoring

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v1.5 is officially released! Complete Docker support brings a rich application ecosystem — countless database-backed software works out of the box!

Other improvements include: infrastructure self-monitoring, better cold backup support, new CMDB compatible with Redis and Greenplum, ETCD as high-availability DCS, and better log collection and visualization. GitHub Stars crossed 500!


Highlights

Feature Description
Docker Support Enabled by default on meta node, with rich out-of-the-box software templates
Infra Self-Monitoring Nginx, ETCD, Consul, Prometheus, Grafana, Loki
CMDB Upgrade Supports Redis/Greenplum cluster metadata, configuration visualization
Service Discovery Consul auto-discovers monitoring targets for Prometheus
Cold Backup Enhancement Default scheduled backups, pg_probackup, one-click delayed replica
ETCD as DCS Alternative to Consul for PostgreSQL/Patroni
Redis Improvements Supports single-instance level init and remove operations

Docker Support

The most important feature in Pigsty v1.5 is Docker support. Countless software and tools can work out of the box via Docker: out-of-the-box database + out-of-the-box applications = out-of-the-box software solutions.

Many software products need databases, but putting databases in containers remains controversial. There’s a huge gap between Docker-based toy databases and production-grade databases. Pigsty combines the best of both: stateful databases are managed by Pigsty, running on standard physical or virtual machines (like PostgreSQL and Redis); stateless applications run via Docker, with their state stored in Pigsty-managed external databases.

In Pigsty v1.4.1, Docker was added as an experimental feature; in v1.5, Docker becomes a default Pigsty component, enabled by default on the meta node. Regular nodes have it disabled by default, but you can enable Docker on all nodes via configuration.


Application Ecosystem

Docker itself is just a tool — what matters is the massive application ecosystem Docker represents!

Pigsty curated some commonly used software, especially those using PostgreSQL and Redis, providing one-click launch tutorials and shortcuts, plus an offline-ready Docker image package docker.tgz.

Code Hosting Platform: Gitea

To start a private code hosting service, use this command to launch Gitea:

cd ~/pigsty/app/gitea; make up

This command uses Docker Compose to launch the Gitea image, using Pigsty’s default CMDB pg-meta.gitea as metadata storage. Access the domain or port specified in the config file to access your code hosting service.

Database Management Platform: PgAdmin

PgAdmin4 is a classic PostgreSQL management tool with many useful features. Pigsty provides the latest PgAdmin4 6.9 support — just one command to start the image, automatically loading all managed database instances from Pigsty.

cd ~/pigsty/app/pgadmin; make up; make conf

Schema Change Tool: Bytebase

Bytebase is a schema change management tool designed for PostgreSQL, using Git workflows and ticket approval to version-control database schemas. Bytebase itself stores metadata in PostgreSQL.

cd ~/pigsty/app/bytebase; make up

Web Client: PGWEB

Sometimes users want to query small amounts of data from production databases using personal accounts — a browser-based PostgreSQL client works great. PGWEB can be deployed on the management node or a dedicated bastion host, with specific HBA rules allowing personal users to query production read-only instances.

cd ~/pigsty/app/pgweb; make up

Object Storage: MinIO

Object storage is a fundamental cloud service. For private deployments, you can use MinIO to quickly build your own object storage. It can store documents, images, videos, backups, with automatic redundancy and disaster recovery, exposing a standard S3-compatible API.

cd ~/pigsty/app/minio; make up

Building on MinIO, you can use JuiceFS to convert massive distributed storage into a filesystem for other services.


Data Analysis Environment: Jupyter

Pigsty provides a powerful data analysis tool: Jupyter Lab, allowing combined Python and SQL data processing and analysis. Jupyter Lab doesn’t run via Docker by default — it runs directly under a restricted OS user on the management node for easier database interaction.

Database Schema Reports: SchemaSPY

To generate detailed schema reports for a database:

bin/schemaspy 10.10.10.10 meta pigsty

Database Log Analysis Reports

To view database log summary information:

bin/pglog-summary 10.10.10.10

More Applications

Many well-known software applications can be launched with Pigsty + Docker:

Application Description
Gitlab Open-source code hosting platform using PG
Habour Open-source image registry using PG
Jira Open-source project management platform using PG
Confluence Open-source knowledge hosting platform using PG
Odoo Open-source ERP using PG
Mastodon Social network based on PG
Discourse Open-source forum based on PG and Redis
KeyCloak Open-source SSO single sign-on solution

Better Cold Backups

Data failures broadly fall into two categories: hardware failures/resource exhaustion (disk failure/crash) and software defects/human errors (dropping databases/tables). Physical replication addresses the former, while delayed replicas and cold backups typically address the latter. Because erroneous deletion operations are immediately replicated to replicas, hot and warm backups cannot solve errors like DROP DATABASE or DROP TABLE — you need cold backups or delayed replicas.

In Pigsty v1.5, the cold backup mechanism was improved:

  • Added scheduled tasks for daily full cold backups
  • Improved delayed replica creation — just declare it and it’s automatically created
  • For power users, pg_probackup is provided as a backup solution
  • Built-in MinIO Docker images lay the foundation for out-of-the-box offsite disaster recovery

Scheduled Tasks

Pigsty v1.5 supports configuring scheduled tasks for nodes, including both append and overwrite modes for /etc/crontab. Basic physical cold backups, log analysis, schema dumps, garbage collection, and statistics collection can all be managed in a unified, declarative way.

The most important is the default daily full backup at 1:00 AM. Combined with Pigsty’s default last-day WAL archive, you can restore the database to any state within the past day, providing a solid safety net for software defects and human-error-induced data loss.

Delayed Replicas

In Pigsty v1.5, creating a delayed replica no longer requires manually running patronictl edit-config to adjust cluster configuration — just declare it like this to create a delayed replica (cluster):


CMDB Compatibility Improvements

Pigsty has an optional CMDB, allowing you to store configuration in the default PostgreSQL database on the meta node instead of the default config file pigsty.yml.

Pigsty CMDB was first introduced in v0.8, designed only for PostgreSQL. When Pigsty started supporting Redis, Greenplum, and more database types, the original design became outdated. So in Pigsty v1.5, the CMDB was redesigned.

Just use bin/inventory_load to load the current config file into CMDB, and bin/inventory_cmdb to switch to CMDB mode. When using CMDB, you can view the visual configuration inventory directly from Grafana’s CMDB Overview panel:

You can see PostgreSQL, Redis, and Greenplum/MatrixDB cluster member information from CMDB Overview.

You can adjust configuration directly via SQL, or via the API exposed by PostgREST, for example creating new clusters or scaling.

PostgREST is a binary component that automatically generates REST APIs from PostgreSQL database schemas, bundled in Pigsty v1.5’s Docker image package.

cd ~/pigsty/app/postgrest; make up

It can also auto-generate API definitions via Swagger OpenAPI Spec, expose API documentation with Swagger Editor, and generate client stubs in different programming languages.

PostgREST isn’t just for exposing CMDB CRUD interfaces. If you already have a well-designed database schema, PostgREST can immediately build a backend REST API service without hand-coding tedious CRUD logic — complex logic can be exposed via stored procedures.

For more powerful API support, consider the Kong API gateway. It can turn any existing API into a full-featured API service, enabling various authentication mechanisms, automatic logging, tracing, rate limiting, and disaster recovery. Kong is built on Nginx + Lua (OpenResty), storing metadata in PostgreSQL and Redis:

cd ~/pigsty/app/kong; make up

Infrastructure Monitoring

In Pigsty v1.5, infrastructure self-monitoring received major improvements: INFRA now uses the same management pattern as NODES, PGSQL, and REDIS. Infrastructure registers itself via the infra_register role, adding itself to Prometheus monitoring targets. Corresponding dashboards were added to Grafana.

In Pigsty v1.5’s Home dashboard, infrastructure appears as light-green components, listed alongside NODES, REDIS, and PGSQL instances. Additionally, Infra services register to Service Registry (Consul) and can be automatically managed via service discovery.

INFRA Overview provides basic status and quick navigation for all infrastructure components

Prometheus Overview: time-series database self-monitoring

Grafana Overview: monitoring dashboard self-monitoring

Loki Overview: log collection component self-monitoring


ETCD as DCS

In Pigsty v1.5, you can use ETCD as an alternative to Consul for PostgreSQL high-availability DCS.

Compared to Consul, ETCD lacks service discovery, built-in DNS, health checks, and an out-of-the-box UI, but ETCD requires no agent, is simpler to deploy, has higher popularity thanks to the Kubernetes ecosystem, has one fewer failure point than Consul, and offers better metric observability.

Just specify pg_dcs_type: etcd to use ETCD as DCS. You can also use both Consul and ETCD simultaneously — for example, ETCD for DCS and Consul for service discovery.

Pigsty v1.5 provides an out-of-the-box monitoring dashboard for ETCD and Consul: DCS Overview

Currently, ETCD as DCS is a minimum viable implementation without CA certificates and TLS support — this will be added in a future security hardening update.


Better Log Collection and Visualization

In Pigsty v1.5, separate access logs are enabled by default for each upstream service, with all fields parsed by Loki for direct analysis. If you have a website on Pigsty, you can immediately do interactive log traffic analysis and statistics.

NGINX Overview: showing Nginx metrics and logs



v1.5.0 Release Notes

Highlights

  • Complete Docker support: enabled by default on meta node with many out-of-the-box software templates: bytebase, pgadmin, pgweb, postgrest, minio, etc.
  • Infrastructure self-monitoring: Nginx, ETCD, Consul, Prometheus, Grafana, Loki self-monitoring
  • CMDB upgrade: compatibility improvements, supports Redis cluster/Greenplum cluster metadata, config file visualization
  • Service discovery improvements: Consul can auto-discover all monitoring targets and integrate with Prometheus
  • Better cold backup support: default scheduled backup tasks, pg_probackup backup tool, one-click delayed replica creation
  • ETCD can now be used as PostgreSQL/Patroni DCS service, as an alternative to Consul
  • Redis playbook/role improvements: now allows init and remove operations for individual Redis instances, not just entire Redis nodes

Monitoring System

Dashboards

  • CMDB Overview: visualize Pigsty CMDB Inventory
  • DCS Overview: view Consul and ETCD cluster monitoring metrics
  • Nginx Overview: view Pigsty Web access metrics and logs
  • Grafana Overview: Grafana self-monitoring
  • Prometheus Overview: Prometheus self-monitoring
  • INFRA Dashboard redesigned to reflect overall infrastructure status

Monitoring Architecture

  • Now allows Consul for service discovery (when all services are registered to Consul)
  • All Infra components now enable self-monitoring and register to Prometheus and Consul via infra_register role
  • Metrics collector pg_exporter updated to v0.5.0, new features: scale and default, allowing metric multiplication factors and default values
  • pg_bgwriter, pg_wal, pg_query, pg_db, pgbouncer_stat time-related metrics now uniformly scaled to seconds from milliseconds/microseconds
  • Related counter metrics in pg_table now have default value 0 instead of NaN
  • pg_class metrics collector removed by default, related metrics added to pg_table and pg_index collectors
  • pg_table_size metrics collector now enabled by default with 300-second cache time

Deployment

  • New optional package docker.tgz with common app images: Pgadmin, Pgweb, Postgrest, ByteBase, Kong, Minio, etc.
  • New ETCD role: automatically deploys ETCD service on DCS Server nodes and integrates with monitoring
  • pg_dcs_type specifies DCS service for PG high-availability: Consul (default), ETCD (alternative)
  • node_crontab parameter for configuring node scheduled tasks like database backups, VACUUM, statistics collection
  • New pg_checksum option: when enabled, database cluster enables data checksums (previously only crit template enabled by default)
  • New pg_delay option: when instance is Standby Cluster Leader, this parameter configures a delayed replica
  • New pg_probackup package, default role replicator now has backup-related function permissions
  • Redis deployment split into two parts: Redis node and Redis instance, redis_port parameter controls specific instances
  • Loki and Promtail now installed via fpm-built RPM packages
  • DCS3 config template now uses a 3-node pg-meta cluster with a single-node delayed replica

Software Upgrades

  • PostgreSQL upgraded to 14.3
  • Redis upgraded to 6.2.7
  • PG Exporter upgraded to 0.5.0
  • Consul upgraded to 1.12.0
  • vip-manager upgraded to v1.0.2
  • Grafana upgraded to v8.5.2
  • Loki & Promtail upgraded to v2.5.0, using fpm packaging

Bug Fixes

  • Fixed Loki and Promtail default config filename issues
  • Fixed Loki and Promtail environment variable expansion issues
  • Complete English documentation translation and revision; documentation JS resources now served locally, no internet access required

API Changes

New Parameters

  • node_data_dir: Main data mount path, created if doesn’t exist
  • node_crontab_overwrite: Overwrite /etc/crontab instead of appending
  • node_crontab: Node crontab content to append or overwrite
  • nameserver_enabled: Enable nameserver on this infra node?
  • prometheus_enabled: Enable prometheus on this infra node?
  • grafana_enabled: Enable grafana on this infra node?
  • loki_enabled: Enable loki on this infra node?
  • docker_enable: Enable docker on this infra node?
  • consul_enable: Enable consul server/agent?
  • etcd_enable: Enable etcd server/client?
  • pg_checksum: Enable pg cluster data checksums?
  • pg_delay: Application delay when backup cluster leader replays replication

Parameter Redesign

*_clean is now a boolean parameter for cleaning existing instances during init.

*_safeguard is also a boolean parameter to prevent cleaning running instances during any playbook execution.

  • pg_exists_action -> pg_clean
  • pg_disable_purge -> pg_safeguard
  • dcs_exists_action -> dcs_clean
  • dcs_disable_purge -> dcs_safeguard

Parameter Renames

  • node_ntp_config -> node_ntp_enabled
  • node_admin_setup -> node_admin_enabled
  • node_admin_pks -> node_admin_pk_list
  • node_dns_hosts -> node_etc_hosts_default
  • node_dns_hosts_extra -> node_etc_hosts
  • node_dns_server -> node_dns_method
  • node_local_repo_url -> node_repo_local_urls
  • node_packages -> node_packages_default
  • node_extra_packages -> node_packages
  • node_packages_meta -> node_packages_meta
  • node_meta_pip_install -> node_packages_meta_pip
  • node_sysctl_params -> node_tune_params
  • app_list -> nginx_indexes
  • grafana_plugin -> grafana_plugin_method
  • grafana_cache -> grafana_plugin_cache
  • grafana_plugins -> grafana_plugin_list
  • grafana_git_plugin_git -> grafana_plugin_git
  • haproxy_admin_auth_enabled -> haproxy_auth_enabled
  • pg_shared_libraries -> pg_libs
  • dcs_type -> pg_dcs_type

v1.5.1 Release Notes

Highlights

IMPORTANT: Fixed the issue where CREATE INDEX|REINDEX CONCURRENTLY in PG14.0-14.3 could corrupt index data.

Pigsty v1.5.1 upgrades the default PostgreSQL version to 14.4. Strongly recommend updating ASAP.

Software Upgrades

  • postgres upgraded to 14.4
  • haproxy upgraded to 2.6.0
  • grafana upgraded to 9.0.0
  • prometheus upgraded to 2.36.0
  • patroni upgraded to 2.1.4

Bug Fixes

  • Fixed TYPO in pgsql-migration.yml
  • Removed PID config item from HAProxy configuration
  • Removed i686 packages from default packages
  • Enabled all Systemd Redis Services by default
  • Enabled all Systemd Patroni Services by default

API Changes

  • grafana_database and grafana_pgurl marked as deprecated API, will be removed in future versions

New Applications

  • wiki.js: Build local Wikipedia with Postgres
  • FerretDB: Provide MongoDB API using Postgres

1.34 - Pigsty v1.4: Modular Architecture, MatrixDB Data Warehouse Support

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v1.4 is officially released! A brand new modular architecture: four built-in modules INFRA, NODES, PGSQL, REDIS can be used independently and freely combined; new MatrixDB time-series data warehouse deployment and monitoring support; global CDN acceleration for downloads.

GitHub stars are taking off!


Modular Architecture

The core feature of Pigsty v1.4 is a major refactor of the underlying architecture. In v1.4, the entire system decouples into 4 independent modules that can be maintained separately and freely combined:

Module Purpose
INFRA Infrastructure: monitoring/alerting/visualization/logging/DNS/NTP and other shared components
NODES Host node management module
PGSQL PostgreSQL database deployment and management module
REDIS Redis database deployment and management module

The new Pigsty v1.4 monitoring home dashboard

Typical deployment scenarios:

  • Single-node PostgreSQL distribution: Install INFRA + NODES + PGSQL modules sequentially on one machine to get a ready-to-use, self-monitoring database instance.

  • Production-grade host monitoring system: Install the INFRA module on one machine, install the NODES module on all monitored nodes. All host nodes get configured with software repos, packages, DNS, NTP, node monitoring, log collection, DCS Agent — everything needed for production.

  • Massive PostgreSQL clusters: Add the PGSQL module on nodes managed by Pigsty. One-click deploy various PostgreSQL clusters: single instance, primary with N replicas HA cluster, synchronous cluster, quorum-commit sync cluster, clusters with offline ETL roles, standby clusters for disaster recovery, delayed replication clusters, Citus distributed clusters, TimescaleDB clusters, MatrixDB data warehouse clusters.

  • Redis clusters: Add the REDIS module on Pigsty-managed nodes. Future database modules (like KAFKA, MINIO, MYSQL) can be added to Pigsty in similar fashion.

Modular playbooks and configuration parameters


New Database Support

PostgreSQL is a versatile database kernel, but as organizations and data grow, specialized data components become necessary. The two most typical are: caching (Redis) and data warehousing (Greenplum).

Redis further strengthens business system OLTP capabilities, offloads database pressure, and developers love its simple model. Greenplum significantly enhances OLAP capabilities, using the same language, drivers, and interfaces as PostgreSQL, scaling analytics from tens of TB to PB or even ZB scale.

Redis and Greenplum extend PostgreSQL’s capability boundaries in two directions — both are common PostgreSQL companions, frequently used together. Therefore, Pigsty v1.4 provides preliminary support for Redis and Greenplum.

Redis Overview Dashboard

Note that Pigsty supports not native Greenplum, but a fork: MatrixDB. The official Greenplum version is still 6.x based on PostgreSQL 9.6 kernel. MatrixDB is based on Greenplum 7 and PostgreSQL 12 kernel, with additional time-series functionality. So Pigsty uses MatrixDB as the Greenplum implementation.

In Pigsty v1.4, there’s no dedicated MATRIXDB module — MatrixDB deployment completely reuses the PGSQL module. You can configure MatrixDB with familiar configuration parameters. From Pigsty’s perspective, a MatrixDB data warehouse is logically N pairs of standard primary-replica PGSQL clusters: one standard Master cluster (Master & Standby), and multiple Segment clusters (Primary & Mirror) distributed across nodes. All PGSQL dashboards work directly with MatrixDB.

PGSQL MatrixDB Dashboard

The dedicated PGSQL Matrix dashboard shows core monitoring metrics for a MatrixDB deployment, while other monitoring dashboards reuse existing PGSQL panels.

Defining a 4-node MatrixDB requires only this configuration


Monitoring System Evolution

The monitoring system has always played a core role in Pigsty. In v1.4, Pigsty’s monitoring system has significant improvements.

Host Monitoring

Pigsty v1.4 introduces brand new node monitoring capabilities — a direct result of the modular refactor. Previously, machine monitoring metrics were 1:1 bound to PostgreSQL instances. For a PostgreSQL distribution, this design was fine. But as Pigsty evolved, this design became outdated.

NODES Overview panel, providing navigation for all nodes

Users may have various deployment strategies, such as deploying multiple database instances on one node, or even multiple different database types. In such cases, the right approach is to separate node management and monitoring from specific database types.

This brings two significant benefits: first, if users only need node monitoring and management without database monitoring, it’s much simpler than before; second, a single node can deploy multiple or even different types of databases while reusing the same node monitoring data. Anytime you click an IP address, you jump to the specific NODES Instance to view node details.

The former PGSQL Node is now NODES Instance

Node monitoring provides three levels: global overview, cluster, and single node. Node clusters can be configured to match PostgreSQL database clusters by default, or have independent identity configuration for viewing cluster resources from different perspectives.

New Nodes Cluster panel, focusing on aggregate metrics and horizontal comparison within a node group

While Pigsty is positioned as a batteries-included PostgreSQL distribution, it also contains host monitoring best practices. Some users don’t need database features at all — they just use Pigsty for host monitoring.

Log Collection

In Pigsty v1.4, Loki and Promtail log collection components are upgraded to default system components. Loki, made by Grafana Labs, uses a label system similar to Prometheus with LogQL similar to PromQL. It’s a lightweight, elegant log collection, processing, and analysis solution.

After a year of testing and refinement, Loki is now a default part of Pigsty, collecting various logs in real-time: node syslog, dmesg, cron logs, database postgres/pgbouncer/patroni logs, and Redis logs.

LOGS Instance monitoring panel in the INFRA section for real-time log browsing and searching

ELK is overkill for SRE logging needs — what people really want is an efficient, fast, massively parallel GREP. Loki excels at this.

Additionally, besides node logs, you can also view real-time infrastructure log data from the new INFRA Overview panel.

INFRA Overview panel showing infrastructure logs

PGSQL Monitoring

Pigsty v1.4 provides monitoring support for new database types, but classic PostgreSQL monitoring wasn’t neglected. In v1.4, many PGSQL monitoring panels were adjusted and remade. The most representative is the PGSQL Cluster panel.

New PGSQL Cluster monitoring panel first screen

PGSQL Cluster is one of the most core monitoring panels in Pigsty database monitoring, serving as a connecting hub to display an autonomous database cluster’s key status. The new design hides unnecessary information and focuses on cluster resources. You can quickly click cluster resource objects from the first screen to navigate to detailed monitoring panels: including nodes, instances, load balancers, services, databases, and service components.

Beyond cluster resource objects, PGSQL Cluster’s first screen only shows the most critical monitoring metrics, alert events, and cluster/instance pressure levels. Other details are hidden in the topic sections below.

Member details table in the hidden second section by default

The second significant improvement is the new PGSQL Databases panel. Previously, database-internal monitoring only focused on single objects within single instances. But for business objects like tables and indexes, the focus is on their overall metrics across the entire cluster. PGSQL Databases was created for this. You can query a database’s performance across the entire cluster, horizontally comparing differences between instances:

PGSQL Databases panel: agg(metrics{datname=*}) by (ins)

More importantly, you can see aggregate views of every table and query type across the cluster scope. For example, check a table’s or query type’s QPS on the cluster’s primary and replica instances, or confirm an index’s usage across different cluster instances — enabling targeted business and application optimization.

Cluster-level aggregate display of database objects: Tables & Queries, click to drill down

The colored TreeMap quickly reflects two-dimensional attributes: for tables, size represents space occupied, color represents access frequency. For queries, size represents total time spent on that query type, color represents average response time.

Application Dashboards

Besides the four core modules INFRA, NODES, PGSQL, REDIS, the Pigsty Grafana home has one more section: APP. This is for user applications. Any monitoring dashboard tagged with APP and Overview appears in Pigsty’s dashboard navigation. Pigsty ships with a ready-to-use small app PGLOG for analyzing PostgreSQL’s own CSV logs, quickly locating anomalies from logs and jumping to specific connection details.

PGLOG Overview, using shortcuts to quickly load logs into application tables for analysis

Additionally, Pigsty established a dedicated code repository pigsty-app for hosting Pigsty sample applications. Current applications include:

Application Description
ISD NOAA global surface weather station historical weather data query
COVID WHO COVID-19 pandemic data query
DBENG DB-Engine database popularity trends and predictions
APPLOG Apple app privacy log visualization
WORKTIME Work hours at major tech companies

More data application examples will be added continuously.

DBEng Trend: Using authoritative DB-Engines popularity data to predict when PostgreSQL will become the world’s most popular relational database


Installation Experience / CDN

Previously Pigsty used GitHub as the release platform, which was difficult to access from mainland China. So we enabled a global CDN domain http://download.pigsty.cc. For example, the latest source package and offline package download URLs are:

http://download.pigsty.cc/v1.4.0/pigsty.tgz  (2MB)
http://download.pigsty.cc/v1.4.0/pkg.tgz     (940MB)

Pigsty’s software packages were reorganized and slimmed down from 1.3GB to 940MB in v1.4. Users needing Greenplum and MatrixDB can download a separate offline package matrix.tgz (338MB).

Pigsty v1.4 provides a dedicated download script download for automatically downloading and extracting optional packages pkg.tgz, matrix.tgz, app.tgz. This script auto-detects network environment, using GitHub Releases outside the GFW and Tencent Cloud CDN inside China.

The Pigsty installation process is now:

bash -c "$(curl -fsSL http://download.pigsty.cc/get)" # Download
./download pkg matrix app   # Download and extract optional packages (optional)
cd ~/pigsty && ./configure  # Configure
make install                # Install

Case Study: Tantan

Tantan is Pigsty’s largest user case. In March 2022, Tantan decommissioned the last legacy PostgreSQL database pg.meta.tt, with all production databases migrated to Pigsty. One hundred clusters are all managed by Pigsty v1.3.1 (with v1.4 monitoring). Auto-failover is enabled for all clusters, marking the official completion of the two-year Database Ascension Project.

Tantan’s main production Pigsty deployment: 240 instances, 13,400 cores of PostgreSQL OLTP clusters

At Tantan, Pigsty underwent long-term, large-scale, rigorous production testing. Over two years of continuous refinement led to what it is today. In recent chaos engineering drills, ops randomly selected database machines for multiple crash tests. Pigsty automatically performed HA primary-replica/traffic failover with no human intervention. Replica crashes had no business impact; primary crashes affected business writes for less than 1 minute.

A typical replica crash scenario: read traffic quickly handled by primary, only a few in-flight queries interrupted, then immediate recovery

A typical primary crash scenario: 30s after primary goes down, replica is promoted to new primary, 30s of business write impact then self-healing



v1.4.0 Release Notes

Architecture

  • Decoupled system into 4 major categories: INFRA, NODES, PGSQL, REDIS, making Pigsty clearer and more extensible
  • Single-node deployment = INFRA + NODES + PGSQL
  • PGSQL cluster deployment = NODES + PGSQL
  • Redis cluster deployment = NODES + REDIS
  • Other database deployment = NODES + xxx (e.g., MONGO, KAFKA…)

Accessibility

  • CDN for mainland China
  • Use bash -c "$(curl -fsSL http://get.pigsty.cc/latest)" to get latest source
  • New download script to download and extract packages

Monitoring Enhancements

  • Split monitoring into 5 categories: INFRA, NODES, REDIS, PGSQL, APP
  • Logging enabled by default
    • loki and promtail now enabled by default, with prebuilt loki-rpm
  • Model and labels
    • Added hidden ds prometheus datasource variable to all dashboards
    • Added ip label to all metrics, used as join key between database and node metrics
  • INFRA Monitoring
    • INFRA main dashboard: INFRA Overview
    • Added Log dashboard: Logs Instance
    • PGLOG Analysis and PGLOG Session now treated as sample Pigsty APPs
  • NODES Monitoring Application
    • Pigsty can be used standalone as host monitoring software
    • Includes 4 core dashboards: Nodes Overview & Nodes Cluster & Nodes Instance & Nodes Alert
    • New identity variables for nodes: node_cluster and nodename
  • PGSQL Monitoring Enhancements
    • New PGSQL Cluster, simplified and focused on what matters in a cluster
    • New dashboard PGSQL Databases for cluster-level object monitoring
    • PGSQL Alert dashboard now focuses solely on PGSQL alerts
    • PGSQL Shard added to PGSQL
  • Redis Monitoring Enhancements
    • Added node monitoring to all Redis dashboards

MatrixDB Support

  • MatrixDB (Greenplum 7) can be deployed via pigsty-matrix.yml playbook
  • MatrixDB monitoring dashboard: PGSQL MatrixDB
  • Added sample configuration: pigsty-mxdb.yml

Software Upgrades

  • PostgreSQL 14.2
  • PostGIS 3.2
  • TimescaleDB 2.6
  • Patroni 2.1.3 (Prometheus metrics + failover slots)
  • HAProxy 2.5.5 (fixed stats errors, more metrics)
  • PG Exporter 0.4.1 (timeout parameters, etc.)
  • Grafana 8.4.4
  • Prometheus 2.33.4
  • Greenplum 6.19.4 / MatrixDB 4.4.0
  • Loki now provided as RPM package instead of ZIP archive

Bug Fixes

  • Removed Patroni’s Consul dependency, making migration to new Consul clusters easier
  • Fixed Prometheus bin/new script default data directory path
  • Added restart seconds in vip-manager systemd service
  • Fixed typos and tasks

API Changes

New Variables

  • node_cluster: Identity variable for node cluster
  • nodename_overwrite: If set, nodename will be set to node’s hostname
  • nodename_exchange: Exchange node hostnames between play hosts (in /etc/hosts)
  • node_dns_hosts_extra: Extra static DNS records easily overridable by single instance/cluster
  • patroni_enabled: If disabled, postgres & patroni bootstrap not executed during postgres role
  • pgbouncer_enabled: If disabled, pgbouncer not started during postgres role
  • pg_exporter_params: Extra URL parameters for pg_exporter when generating monitoring target URL
  • pg_provision: Boolean variable indicating whether to execute provisioning part of postgres role
  • no_cmdb: Used for infra.yml and infra-demo.yml playbooks, won’t create CMDB on meta node

v1.4.1 Release Notes

Bug fixes / Docker support / English documentation

Docker is now enabled by default on the meta node, allowing you to spin up various software.

Bug Fixes

  • Fixed Promtail & Loki configuration variable issues
  • Fixed Grafana legacy alerts
  • Disabled nameserver by default
  • Renamed pg-alias.sh for Patroni shortcuts
  • Disabled exemplars queries for all dashboards
  • Fixed Loki data directory issue
  • Changed autovacuum_freeze_max_age from 100000000 to 1000000000

1.35 - Pigsty v1.3: Redis Support, PGCAT Overhaul, PGSQL Enhancements

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v1.3 is officially released, featuring Redis support, a rebuilt PGCAT application, and enhanced PGSQL monitoring.


Redis Support

While PostgreSQL is the world’s most advanced open-source relational database, every hero needs a sidekick. Pigsty v1.3 introduces a powerful caching companion for PostgreSQL: the world’s fastest database — Redis.

redis-partner

Redis delivers incredible performance, easily hitting 200-300k QPS on a single core.

redis-fast

The Pigsty demo now includes Redis cluster examples:

redis-demo

Three Deployment Modes

Redis has three classic deployment patterns: primary-replica (Standalone), native cluster (Cluster), and high-availability sentinel (Sentinel). Pigsty v1.3 supports all three.

redis-overview

The Redis Overview dashboard shows three sample clusters, each demonstrating a different deployment mode.

Declarative Configuration

Defining a Redis cluster works the same way as PostgreSQL. After declaring your config, just run redis.yml -l <cluster> to create the cluster:

redis-config

A Redis cluster only needs a few required identity parameters. Of course, you can use additional parameters for fine-grained configuration:

redis-params-1redis-params-2

Auto-Monitoring

Redis clusters and instances created with Pigsty are automatically integrated into the monitoring system.

redis-cluster

The Redis cluster dashboard homepage — click on a specific instance to jump to instance-level monitoring:

redis-instance

PGCAT Overhaul

v1.3 rebuilds the PGCAT application — a tool for browsing and visualizing PostgreSQL system catalogs directly from Grafana.

pgcat-instance

Single PostgreSQL instance catalog info: databases, active sessions, running queries.

pgcat-instance-2

More instance-level catalog info: configuration, replication, memory usage, persistence, roles.

pgcat-database

Single PostgreSQL database catalog info, including schemas, tables, indexes, sequences, and other objects.

pgcat-table

Redesigned PGCAT TABLE dashboard with detailed per-column statistics.

Agentless Design

PGCAT only needs a target database URL — no agent installation required. Even monitor-only deployments of existing instances get full PGCAT functionality.

pgsql-monitor-only

In Pigsty v1.3’s monitor-only deployment mode, external PostgreSQL instances are also registered in Grafana with PGCAT enabled by default.


PGSQL Enhancements

The core PGSQL monitoring application also received significant improvements.

pgsql-cluster

In Pigsty v1.3, the PGSQL Cluster dashboard adds quick-navigation panels for 10 key metrics.

Both PGSQL Instance and PGSQL Cluster now include quick-navigation panels for rapid problem identification. PGSQL Service was completely redesigned — simpler and more intuitive for quickly understanding cluster topology. Other dashboards also received optimizations and improvements.

Additionally, v1.3 includes improvements to the semi-automated database migration playbook and profiling tool support.


v1.3.0 Release Notes

Redis Support

Feature Description
Redis Deployment Standalone, Sentinel, and Cluster modes
Redis Monitoring Overview, Cluster, and Instance dashboards

PGCAT Overhaul

Dashboard Description
PGCAT Instance New instance-level catalog dashboard
PGCAT Database New database-level catalog dashboard
PGCAT Table Redesigned table-level dashboard

PGSQL Enhancements

Dashboard Improvements
PGSQL Cluster Added 10 key metric panels
PGSQL Instance Added 10 key metric panels
PGSQL Service Simplified and redesigned
Cross-references Navigation links between PGCAT and PGSQL dashboards

Monitor Deployment

  • Grafana datasources auto-register during monitor-only deployment

Software Upgrades

  • PostgreSQL 13 added to default package list
  • PostgreSQL upgraded to 14.1 as default
  • Added Greenplum RPM packages and dependencies
  • Added Redis RPM and source packages
  • Added perf as default package

v1.3.1 Release Notes

Monitoring

  • PGSQL & PGCAT dashboard improvements
  • Optimized PGCAT Instance & PGCAT Database layout
  • Added key metric panels to PGSQL Instance dashboard (consistent with PGSQL Cluster)
  • Added table/index bloat panels to PGCAT Database, removed PGCAT Bloat dashboard
  • Added index information to PGCAT Database dashboard
  • Fixed broken panels in Grafana 8.3
  • Added Redis index to Nginx homepage

Deployment

  • New infra-demo.yml playbook for one-click bootstrap
  • New infra-jupyter.yml playbook for optional JupyterLab server
  • New infra-pgweb.yml playbook for optional PGWeb server
  • Added pg alias on meta node for starting PostgreSQL cluster from admin user
  • Adjusted max_locks_per_transactions in all Patroni config templates per timescaledb-tune recommendations
  • Added citus.node_conninfo: 'sslmode=prefer' to config templates for SSL-free Citus usage
  • Added all extensions (except pgrouting) from PGDG14 to package list
  • Upgraded node_exporter to v1.3.1
  • Added PostgREST v9.0.0 for generating REST APIs from PostgreSQL schemas

Bug Fixes

  • Grafana security vulnerability fix (upgraded to v8.3.1, details)
  • Fixed pg_instance & pg_service issues in register role when starting playbook mid-run
  • Fixed Nginx homepage rendering on hosts without pg_cluster variable
  • Fixed style issues when upgrading to Grafana 8.3.1

1.36 - Pigsty v1.2: PG14 Default, Monitor Existing PG

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v1.2 is officially released, making PostgreSQL 14 the default version and adding support for monitoring existing database instances independently.


PostgreSQL 14 Becomes the Default

PostgreSQL 14 was released last month with significant improvements across the board, especially in observability. After deployment and thorough testing in multiple production environments, PostgreSQL 14 is now Pigsty’s default database version.

Meanwhile, the time-series extension TimescaleDB 2.5 and geospatial extension PostGIS 3.1, both compatible with PG14, are now installed and enabled by default. Combined with the distributed database extension Citus 10, this delivers a truly batteries-included space-time hyper-converged open-source PostgreSQL distribution.

timescale-postgis-citus

All three are mutually compatible and can be used together.


Monitor-Only Deployment Mode

The second major feature is monitor-only deployment mode. Previously, Pigsty as a distribution tightly coupled its monitoring system with its deployment solution. However, many users want to use only Pigsty’s monitoring system to monitor existing database instances, cloud databases, or other RDS products and derivatives.

monitor-minio

Minimal deployment mode runs pg_exporter on different local ports to monitor external PostgreSQL instances.

In v1.2, Pigsty offers three optional monitoring deployment modes:

Mode Description
Full Complete Pigsty deployment with monitoring and control
Lean Deploy only monitoring-related components
Minimal Only requires a database connection string, no remote machine access needed

The new minimal deployment mode no longer requires login or admin privileges on remote machines — as long as you have a connection string with read-only access to the remote database, you can add it to monitoring. All monitoring functionality is consolidated on a single machine, making management simple and convenient.

monitor-only

Although you only get PostgreSQL metrics, most of Pigsty’s monitoring system functionality still works. Testing shows Pigsty can also directly monitor MatrixDB, Greenplum, and other PostgreSQL-derived/compatible database products.


Streamlined Configuration Templates

Configuration templates have been further streamlined: now there are only two templates — Production (default) and Sandbox.

Spec parameter templates are now richer, providing smooth transition options:

Spec Config Description
tiny 1C1G Minimal testing spec
mini 2C4G Development environment spec
small 4C8G Small production spec
medium 8C16G Medium production spec
large 16C32G Large production spec
oltp/olap/crit 64C400G Professional production spec

During configuration, the setup wizard automatically selects the appropriate parameter template based on machine specs.

configure

Pigsty maintains its tradition of one-liner installation: ./configure && make install.


Utility Playbooks

The new pgsql-migration playbook auto-generates the commands, scripts, and documentation needed for database migration, making online zero-downtime migrations based on logical replication simple (already used to migrate dozens of databases in production).

The pgsql-audit playbook generates audit reports for database instances based on audit requirements.


Sample Applications

v1.2 provides two new Pigsty App examples:

AppLog — An app for visualizing Apple iOS 15 privacy logs, showing which apps accessed which permissions.

applog

WorkTime — An app for querying work and rest hours at major tech companies.

worktime

Both apps are simple but practical, each built in under an hour. Pigsty is an excellent tool for rapidly prototyping functional applications.


Looking Ahead

PGSQL v8 — More clearly organized monitoring dashboards with role-specific views for different user groups.

pgsql-v8

PGCAT v2 — Richer system catalog navigation and browsing functionality.

pgcat-v2

REDIS v1beta — Redis is often used alongside PostgreSQL; future versions will integrate Redis deployment and monitoring as a complete solution.

redis-v1

v1.2.0 Release Notes

Core Features

  • Default to PostgreSQL 14
  • Default to TimescaleDB 2.5 extension
  • TimescaleDB and PostGIS enabled by default in CMDB

Monitor-Only Mode

  • Monitor existing PostgreSQL instances via connection URL only
  • pg_exporter deployed on local meta node
  • New PGSQL Cluster Monly dashboard for remote clusters

Software Upgrades

  • Grafana upgraded to 8.2.2
  • pev2 upgraded to v0.11.9
  • Promscale upgraded to 0.6.2
  • PgWeb upgraded to 0.11.9
  • New extensions: pglogical, pg_stat_monitor, orafce

Improvements

  • Auto-detect machine specs and use appropriate node_tune and pg_conf templates
  • Reworked bloat-related views, exposing more information
  • Removed TimescaleDB and Citus internal monitoring
  • Added pgsql-audit.yml playbook for creating audit reports
  • All config templates simplified to two: auto and demo

Bug Fixes

  • pgbouncer_exporter resource owner changed to {{ pg_dbsu }} instead of postgres
  • Fixed pg_exporter duplicate metrics on pg_table/pg_index during REINDEX TABLE CONCURRENTLY

Upgrade Notes

No API changes in v1.2.0 — existing pigsty.yml config files (PG13) still work. For infrastructure, re-running repo will handle most updates.

For databases, you can continue using existing PG13 instances. When PostGIS and TimescaleDB extensions are involved, in-place upgrades are complex — logical replication migrations are recommended. The new pgsql-migration.yml playbook generates scripts to help achieve near-zero-downtime cluster migrations.

1.37 - Pigsty v1.1: Homepage, Jupyter, Pev2, PgBadger

Originally published on VONNG.

GitHub Release | Release Note

Pigsty v1.1 is officially released, featuring a brand-new homepage design, plus support for JupyterLab, PGWeb, PEV2, PgBadger, and other useful tools.


Brand New Homepage

The Home Dashboard in Grafana has long served as Pigsty’s de facto “homepage.” Now Pigsty finally has a standalone, well-designed homepage of its own.

homepage

This homepage is a local version of the documentation site, served by the default Nginx.

Service Navigation

The homepage provides navigation to all Pigsty service components, including Consul, Grafana, Prometheus, AlertManager, and the newly introduced PGWeb and JupyterLab in v1.1. Click the component name/URL in the center, or use the Service dropdown menu in the top-right navigation bar.

Monitoring Navigation

The homepage can display clusters and instances in your Pigsty deployment (optional), with direct links to specific cluster/instance monitoring pages and admin interfaces.

monitor-nav

App Navigation

The App dropdown in the top-right corner is the entry point for Pigsty’s extended features. In v1.1, Pigsty ships with several useful and interesting apps, all configurable via options.

app-nav

Local Documentation

In Pigsty v1.1, you can access local offline documentation directly from the homepage, available in both English and Chinese.

local-docs

JupyterLab

If you use Python for data analysis, you’re probably familiar with Jupyter. Pigsty v1.0 bundled the JupyterLab package; v1.1 takes it further with native integration. JupyterLab is enabled by default in demo and personal configuration templates, but disabled by default in production deployments.

jupyter-1

With Jupyter Notebook, you can efficiently and agilely extract, process, analyze, transform, and visualize data — combining the power of Python and SQL.

jupyter-2

With great power comes great risk. Jupyter’s ability to execute arbitrary code is too risky for production environments, so it’s disabled by default in production configuration templates.


PGWeb

As a batteries-included database distribution, providing batteries-included GUI client tools is also important. PGWeb is a lightweight, browser-based PostgreSQL GUI client written in Go.

pgweb-1

Like Jupyter, PGWeb is enabled by default in demo and personal configuration templates, but disabled in production deployments. However, PGWeb requires a connection string to access the database, making it relatively safe for scenarios where individual users need to query small amounts of data in production.

pgweb-2

Users can browse schemas and objects in the database, quickly view table data, execute queries, and more.


PEV2

PEV2 is a handy execution plan visualizer that converts PostgreSQL EXPLAIN output into an intuitive execution plan tree.

pev2

This tool is extremely useful for optimizing slow queries and analyzing auto_explain results.


PgBadger

PgBadger is an excellent PostgreSQL log analysis tool that quickly generates beautiful, comprehensive analysis reports from CSV logs.

Use bin/pglog-summary [ip] [date] to pull logs from a specific node on a specific date and create a log analysis report.

pgbadger

Add this command to crontab to automatically generate database operation reports daily or near-real-time.


Software Updates

PostgreSQL 14 is officially released, and Pigsty v1.1 immediately added support. The pigsty-pg14 template can now create PostgreSQL databases with version 14 as default in production. However, since TimescaleDB doesn’t officially support PG14 yet (expected around 10/30), PG14 won’t be the default database version in Pigsty for now.

pg14

Pigsty will upgrade the default PG version to PG14 in v1.2.

Software upgrade list:

Component Version
PostgreSQL v13.4
pgbouncer v1.16
Grafana v8.1.4
Prometheus v2.29
node_exporter v1.2.2
HAProxy v2.1.1
Consul v1.10.2
vip-manager v1.0.1

Database Migration Playbook

Pigsty includes a built-in database online migration helper script: pgsql-migration.yml, providing an out-of-the-box zero-downtime database migration solution based on logical replication.

Fill in the source and target cluster information, and the playbook will automatically generate the scripts needed for migration — just execute them in sequence.

migration-1migration-2

Sample App: Privacy Log Visualization

Pigsty’s default demo apps now include a new one: Apple App Privacy Log Visualization (AppLog). Export privacy access records from iOS 15 and visualize them in this app.

applog-1applog-2

Handy Features

Dummy File Placeholder

v1.1 adds a new feature for database instances: Dummy File. The concept is simple — create a file of a certain size (e.g., 1–4GB) at /pg/dummy. When disk-full failures occur (when many operations can’t complete normally), just delete it to free up emergency space.

Promscale Support

v1.1 adds the Promscale package. This interesting component lets you replace Prometheus’s time-series storage with TimescaleDB (PostgreSQL).


v1.1.0 Release Notes

Feature Enhancements

  • Added pg_dummy_filesize to create filesystem space placeholder
  • Major homepage redesign
  • Added JupyterLab integration
  • Added PGWeb console integration
  • Added PgBadger support
  • Added PEV2 support, execution plan visualization tool
  • Added pglog tooling

Software Upgrades

  • PostgreSQL upgraded to v13.4 (with official PG14 support)
  • pgbouncer upgraded to v1.16 (metric definitions updated)
  • Grafana upgraded to v8.1.4
  • Prometheus upgraded to v2.29
  • node_exporter upgraded to v1.2.2
  • HAProxy upgraded to v2.1.1
  • Consul upgraded to v1.10.2
  • vip-manager upgraded to v1.0.1

API Changes

  • nginx_upstream now has different structure (incompatible)
  • New config entry: app_list, navigation entries rendered to homepage
  • New config entry: docs_enabled, setup local docs on default server
  • New config entry: pev2_enabled, setup local PEV2 tool
  • New config entry: pgbadger_enabled, create log summary/report directory
  • New config entry: jupyter_enabled, enable JupyterLab server on meta node
  • New config entry: jupyter_username, specify user to run JupyterLab
  • New config entry: jupyter_password, specify default password for JupyterLab
  • New config entry: pgweb_enabled, enable PGWeb server on meta node
  • New config entry: pgweb_username, specify user to run PGWeb
  • Renamed internal flag repo_exist to repo_exists
  • repo_address default value changed to pigsty instead of yum.pigsty
  • HAProxy access point changed to http://pigsty instead of http://h.pigsty

v1.1.1 Release Notes

  • Replaced TimescaleDB apache version with timescale version
  • Upgraded Prometheus to 2.30
  • Fixed pg_exporter config directory owner issue (changed to {{ pg_dbsu }})

Upgrade Notes

The main change in this version is TimescaleDB — using the official TimescaleDB License (TSL) version to replace the Apache License v2 version from the PGDG repository.

# Stop postgres instances with timescaledb
yum remove -y timescaledb_13

# Add TimescaleDB official repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=0
gpgcheck=0
enabled=1

yum install timescaledb-2-postgresql13

1.38 - Pigsty v1.0: GA Release with Monitoring Overhaul

Originally published on VONNG.

GitHub Release | Release Note

After over a year of iterations and refinement, Pigsty officially ships v1.0.0 GA.

Pigsty (/ˈpɪɡˌstaɪ/) stands for PostgreSQL In Graphic STYle — PostgreSQL, visualized.


What is Pigsty?

Pigsty is a batteries-included PostgreSQL distribution that bundles production-grade cluster deployment, scaling, replication, failover, traffic routing, connection pooling, service discovery, access control, monitoring, alerting, and logging into a single cohesive package. It solves the hard problems you’ll face when running PostgreSQL — the world’s most advanced open-source relational database — in production.

Role Description
Distribution Batteries-included PostgreSQL distribution
Monitoring Professional-grade PostgreSQL observability
Deployment Simple, HA-ready deployment solution
Sandbox Versatile local sandbox & data visualization environment
Open Source Free as in freedom, Apache 2.0 licensed

Core Features

whatwherewho

Distribution

A distribution is a complete solution built from a database kernel plus a curated set of software packages. Linux is an OS kernel; RedHat, Debian, and SUSE are distributions built on top of it. PostgreSQL is a database kernel; Pigsty, BigSQL, Percona, and various cloud RDS offerings are distributions built on top of it.

distro

As a database distribution, Pigsty’s core strengths are:

  • Comprehensive, professional monitoring system
  • Simple, easy-to-use deployment solution
  • Stable, reliable high-availability architecture
  • Versatile, powerful sandbox environment
  • Free, friendly open-source license

Batteries Included

Batteries-included means: start with a fresh VM, run one command, and within 10 minutes you’ll have infrastructure, database, monitoring, and control plane fully operational.

Pigsty pushes deployment and monitoring to the extreme, turning the historically high-barrier work of deploying, managing, and operating large-scale database clusters into something any developer can handle.

For power users, Pigsty provides the most comprehensive monitoring system available. For everyone else, Pigsty provides the simplest deployment experience. For data engineers, Pigsty also integrates tools like JupyterLab and ECharts, making it a complete IDE for data development and visualization.

battery

Monitoring System

Pigsty ships with a professional-grade PostgreSQL monitoring system designed for large-scale database fleet management. It includes ~1200 metric types, 20+ dashboards, and thousands of panels, covering everything from fleet-wide overviews down to individual object details. Compared to alternatives, it leads by a wide margin in metric coverage and dashboard richness — delivering irreplaceable value for professionals.

A typical Pigsty deployment can manage hundreds of database clusters, collect thousands of metric types, handle millions of time series, and organize them into thousands of panels across dozens of dashboards in real-time. From global fleet overviews to per-object details (tables, queries, indexes, functions), it’s like having a real-time MRI/CT scanner for your database — everything laid bare.

dashboards

Dashboard gallery

pgsql-overview

Single query monitoring

pgsql-query

Single table monitoring

pgsql-table

Instance-level monitoring dashboard

pgsql-instance

Three Core Applications

Pigsty’s monitoring system is composed of three tightly integrated core applications:

PGSQL — Collect and visualize monitoring metrics

pgsql-instance

PGCAT — Browse database system catalogs directly

pgcat

PGLOG — Real-time log search and analysis

pglog

Pigsty’s monitoring system is built on industry best practices, using Prometheus and Grafana as the monitoring infrastructure. Open source, easy to customize, reusable, portable, no vendor lock-in. It can integrate with existing PostgreSQL instances and can also be used to monitor and manage other databases or applications (like Redis).


Deployment Solution

A database is software that manages data. A control plane is software that manages databases.

Pigsty includes an Ansible-based database management solution, with CLI and GUI wrappers on top. It handles core database management functions: cluster creation, destruction, scaling; user, database, and service provisioning.

Pigsty embraces the Infrastructure as Code philosophy, using Kubernetes-style declarative configuration. Describe your database and runtime environment through extensive config options, and idempotent playbooks automatically create the clusters you need — delivering a private-cloud-like experience.

Users simply describe “what kind of database they want” via config files or GUI — no need to worry about how Pigsty creates or modifies it. Pigsty will spin up the desired database cluster from bare metal nodes within minutes.

iac

For users who prefer not to work with config files and Ansible playbooks, Pigsty also offers optional CMDB mode and CLI/GUI tools wrapping common operations.

gui

For power users, Pigsty provides 160+ configurable parameters, allowing fine-grained control over every aspect of cluster and infrastructure runtime. Beginners can create reliable database clusters without changing a single config setting.


High Availability Clusters

Pigsty creates distributed, highly-available database clusters. In practice, as long as any instance in the cluster survives, the cluster can provide full read-write and read-only services.

Every database instance in the cluster is functionally equivalent — any instance can serve full read-write traffic through the built-in load balancer. Clusters automatically detect failures and perform primary-replica failover; typical failures self-heal in seconds to tens of seconds, with read-only traffic unaffected during the process.

Pigsty’s HA architecture is battle-tested in production, achieving complete high availability with minimal complexity — making traditional primary-replica databases feel like distributed databases.

ha-arch

Default access topology (DNS + L2 VIP + HAProxy, 7 options total)

failover

Sandbox Environment

PostgreSQL users aren’t just enterprises — countless individuals use it for software development, testing, experiments, demos, or for data cleaning, analysis, visualization, and storage. Setting up the environment is often the first hurdle.

The Pigsty sandbox solves this problem. With one click, spin up a complete production-grade PostgreSQL service on your laptop or PC (Vagrant calls VirtualBox to automatically create the VMs). The default sandbox is single-node (2c/4g) with all essential tools, suitable for various use cases. There’s also a four-node full sandbox for production-like environments, fully exploring Pigsty’s HA architecture and monitoring capabilities.

sandbox

Four-node sandbox architecture diagram


Data Analysis

Pigsty provides PostgreSQL as the backend database, JupyterLab as the Python IDE, Grafana as the frontend/backend runtime, and the Grafana ECharts Panel for advanced visualization. Together, these tools form a complete toolkit for data processing, analysis, and data application development.

Build your data analysis workflow on Pigsty, rapidly prototype data application POCs, and package/distribute/deploy them in a standardized way. Pigsty ships with two sample data applications:

COVID — Pandemic data visualization app

covid

Click to view individual country details and timeline maps

ISD — Global surface weather station historical data explorer

isd

Click to view individual station details and historical weather data


Roadmap

roadmap-1roadmap-2

Open Source

Pigsty is open-source under the Apache 2.0 license — free for commercial use, with modifications and derivatives subject to Apache License 2.0’s attribution requirements.

Pigsty’s mission: Use databases well, use good databases.

Give SMBs a truly self-controlled choice, and let everyone enjoy the power of PostgreSQL.


v1.0.0 Release Notes

Monitoring System Overhaul

  • New dashboards on Grafana 8.0
  • New metric definitions, added PG14 support
  • Simplified labeling system: static label set (job, cls, ins)
  • New alerting rules and derived metrics
  • Monitor multiple databases simultaneously
  • Real-time log search & csvlog analysis
  • Richly-linked dashboards, click through for drill-down/roll-up

Architecture Changes

  • Added Citus and TimescaleDB to default installation
  • Added PostgreSQL 14beta2 support
  • Simplified HAProxy admin page indexing
  • Decoupled infrastructure and PGSQL by adding new role register
  • Added new roles loki and promtail for logging
  • Added new role environ to setup environment for admin user on meta node
  • Default to static service discovery for Prometheus (instead of consul)
  • Added new role remove for graceful cluster and instance removal
  • Upgraded Prometheus and Grafana provisioning logic
  • Upgraded to vip-manager 1.0, node_exporter 1.2, pg_exporter 0.4, Grafana 8.0
  • Every database on every instance auto-registers as a Grafana datasource
  • Moved Consul registration to register role, changed Consul service tags
  • Added cmdb.sql as pg-meta baseline definition (CMDB & PGLOG)

Application Framework

  • Extensible framework for new features
  • Core app: PostgreSQL monitoring system pgsql
  • Core app: PostgreSQL catalog explorer pgcat
  • Core app: PostgreSQL csvlog analyzer pglog
  • Added sample app covid for COVID-19 data visualization
  • Added sample app isd for ISD weather data visualization

Other

  • Added JupyterLab for full Python data science environment
  • Added vonng-echarts-panel to restore ECharts support
  • Added wrapper scripts createpg, createdb, createuser
  • Added CMDB dynamic inventory scripts: load_conf.py, inventory_cmdb, inventory_conf
  • Removed obsolete playbooks: pgsql-monitor, pgsql-service, node-remove, etc.

API Changes

  • New variable: node_meta_pip_install
  • New variable: grafana_admin_username
  • New variable: grafana_database
  • New variable: grafana_pgurl
  • New variable: pg_shared_libraries
  • New variable: pg_exporter_auto_discovery
  • New variable: pg_exporter_exclude_database
  • New variable: pg_exporter_include_database
  • Variable renamed: grafana_urlgrafana_endpoint

Bug Fixes

  • Fixed default timezone Asia/Shanghai (CST) issue
  • Fixed nofile limits for pgbouncer & patroni
  • pgbouncer user list and database list now generated when running tag pgbouncer

v1.0.1 Release Notes

2021-09-14

Documentation Update

  • Chinese documentation now available
  • Machine-translated English documentation now available

Bug Fixes

  • pgsql-remove no longer removes primary instances
  • Replaced pg_instance with pg_cluster + pg_seq (Start-At-Task could fail when pg_instance undefined)
  • Removed Citus from default shared preload libraries (Citus forces max_prepared_transaction to non-zero)
  • Added ssh sudo check in configure (now uses ssh -t sudo -n ls for permission check)
  • Fixed pg-backup script typo

Optimizations

  • Removed NTP sanity check alert (duplicate of ClockSkew)
  • Removed collector.systemd to reduce overhead

1.39 - Ready-to-Use PostgreSQL Distribution: Pigsty

Originally published on VONNG.

What is Pigsty

Pigsty is a ready-to-use production-grade open-source PostgreSQL distribution.

A distribution refers to a complete database solution consisting of a database kernel and its suite of software packages. For example, Linux is an operating system kernel, while RedHat, Debian, and SUSE are operating system distributions based on this kernel. PostgreSQL is a database kernel, while Pigsty, BigSQL, Percona, various cloud RDS services, and rebranded databases are database distributions based on this kernel.

Pigsty differs from other database distributions with five core features:

  • Comprehensive and professional monitoring system
  • Stable and reliable deployment solution
  • Simple and worry-free user interface
  • Flexible and open extension mechanism
  • Free and friendly open-source license

These five characteristics make Pigsty truly a ready-to-use PostgreSQL distribution.

Who Would Be Interested?

Pigsty’s target user groups include: DBAs, architects, OPS personnel, software vendors, cloud vendors, business developers, kernel developers, data developers; people interested in data analysis and data visualization; students, novice programmers, and users interested in trying databases.

For professional users like DBAs and architects, Pigsty provides a unique professional-grade PostgreSQL monitoring system, offering irreplaceable value for database management. Additionally, Pigsty comes with a stable and reliable, battle-tested production-grade PostgreSQL deployment solution that can automatically deploy PostgreSQL database clusters with monitoring and alerting, log collection, service discovery, connection pooling, load balancing, VIP, and high availability in production environments.

For developers (business developers, kernel developers, data developers), students, novice programmers, and users interested in trying databases, Pigsty provides an extremely low-barrier, one-click startup, one-click installation local sandbox. The local sandbox is identical to production environments except for machine specifications, including complete functionality: ready-to-use database instances and monitoring systems. It can be used for learning, development, testing, data analysis, and other scenarios.

Additionally, Pigsty provides a flexible extension mechanism called “Datalet.” People interested in data analysis and data visualization might be surprised to find that Pigsty can also serve as an integrated development environment for data analysis and visualization. Pigsty integrates PostgreSQL with common data analysis plugins and comes with Grafana and embedded Echarts support, allowing users to write, test, and distribute data mini-applications (Datalets). Such as: “Additional extension panel packages for Pigsty monitoring system,” “Redis monitoring system,” “PG log analysis system,” “application monitoring,” “data directory browser,” etc.

Finally, Pigsty adopts the free and friendly Apache License 2.0, which can be used commercially for free. As long as you comply with Apache 2 License’s attribution clauses, cloud vendors and software vendors are welcome to integrate and commercially develop secondary products.


Comprehensive Professional Monitoring System

You can’t manage what you don’t measure.

— Peter F.Drucker

Pigsty provides a professional-grade monitoring system, offering irreplaceable value to professional users.

Using medical equipment as an analogy, ordinary monitoring systems are like heart rate monitors and pulse oximeters that ordinary people can use without training. They can provide core vital sign indicators for patients: at least users can know if someone is about to die, but they’re powerless for diagnosis and treatment. For example, monitoring systems provided by various cloud and software vendors generally fall into this category: a dozen core indicators that tell you whether the database is still alive, giving people a rough idea, and that’s all.

Professional-grade monitoring systems are like CT scanners and MRI machines that can detect all internal details of objects. Professional physicians can quickly locate diseases and hidden dangers based on CT/MRI reports: treat diseases when present, maintain health when absent. Pigsty can deeply examine every table, every index, every query in every database, providing comprehensive metrics (1155 types) and converting them into insights through thousands of dashboards: nipping failures in the bud and providing real-time feedback for performance optimization.

Pigsty’s monitoring system is based on industry best practices, using Prometheus and Grafana as monitoring infrastructure. It’s open-source, highly customizable, reusable, portable, with no vendor lock-in. It can integrate with various existing database instances.


Stable Reliable Deployment Solution

A complex system that works is invariably found to have evolved from a simple system that works.

—John Gall, Systemantics (1975)

Databases are software for managing data; management systems are software for managing databases.

Pigsty has a built-in database management solution centered on Ansible. Based on this, it encapsulates command-line tools and graphical interfaces. It integrates core functions in database management: including database cluster creation, destruction, scaling; user, database, and service creation, etc. Pigsty adopts the “Infra as Code” design philosophy, using declarative configuration to describe and customize databases and runtime environments through numerous optional configuration options, and automatically creates required database clusters through idempotent preset playbooks, providing a near-private-cloud user experience.

Database clusters created by Pigsty are distributed and highly available. Pigsty-created databases achieve high availability based on DCS, Patroni, and Haproxy. Each database instance in a database cluster is idempotent in usage - any instance can provide complete read-write services through built-in load balancing components, offering a distributed database user experience. Database clusters can automatically perform failure detection and master-slave switching. Ordinary failures can self-heal in seconds to tens of seconds, with read-only traffic unaffected during this period. During failures, as long as any instance in the cluster survives, it can provide complete services externally.

Pigsty’s architectural solution has been carefully designed and evaluated, focusing on achieving required functionality with minimal complexity. This solution has been validated in production environments for long periods and large scales, and has been adopted by organizations in multiple industries including internet/B/G/M/F.


Simple Worry-Free User Interface

Pigsty aims to lower PostgreSQL’s usage barrier, so extensive work has been done on usability.

Installation Deployment

Someone told me that each equation I included in the book would halve the sales.

— Stephen Hawking

Pigsty deployment consists of three steps: download source code, configure environment, execute installation, all can be completed with one command. It follows the classic software installation pattern and provides a configuration wizard. All you need to prepare is a CentOS7.8 machine and root privileges. When managing new nodes, Pigsty uses Ansible to initiate management via ssh without requiring agent installation, making it easy even for novices to complete deployment.

Pigsty can manage hundreds of high-spec production nodes in production environments, and can also run independently on local 1-core 1GB virtual machines as ready-to-use database instances. When used on local computers, Pigsty provides a sandbox based on Vagrant and Virtualbox. It can spin up database environments identical to production with one command, for learning, development, testing, data analysis, data visualization, and other scenarios.

User Interface

Clearly, we must break away from the sequential and not limit the computers. We must state definitions and provide for priorities and descriptions of data. We must state relation‐ ships, not procedures.

—Grace Murray Hopper, Management and the Computer of the Future (1962)

Pigsty incorporates the essence of Kubernetes architectural design, adopting declarative configuration and idempotent operation playbooks. Users only need to describe “what kind of database they want” without caring how Pigsty creates or modifies it. Pigsty will create the required database cluster from bare metal nodes in minutes according to user configuration file manifests.

For management and usage, Pigsty provides different levels of user interfaces to meet different user needs. Novice users can use one-click local sandboxes and graphical user interfaces, while developers can choose to use pigsty-cli command-line tools and configuration files for management. Experienced DBAs, operations staff, and architects can directly use Ansible primitives for fine control over executed tasks.

Flexible Open Extension Mechanism

PostgreSQL’s extensibility has always been praised, with various extension plugins making PostgreSQL the most advanced open-source relational database. Pigsty also respects this value, providing an extension mechanism called “Datalet” that allows users and developers to further customize Pigsty for “unexpected” use cases, such as: data analysis and visualization.

When we have monitoring systems and management solutions, we also have the ready-to-use visualization platform Grafana and the powerful database PostgreSQL. This combination has tremendous power — especially for data-intensive applications. Users can perform data analysis and data visualization without writing frontend or backend code, creating richly interactive data application prototypes, or even the applications themselves.

Pigsty integrates Echarts and common map base layers, making it easy to implement advanced visualization needs. Compared to traditional scientific computing languages/plotting libraries like Julia, Matlab, and R, the PG + Grafana + Echarts combination allows you to create shareable, deliverable, standardized data applications or visualization works at extremely low cost.

Pigsty’s monitoring system itself is an exemplar of Datalet: all Pigsty advanced topic monitoring panels are released as Datalets. Pigsty also comes with some interesting Datalet examples: Redis monitoring system, COVID-19 data analysis, 7th population census data analysis, PG log mining, etc. More ready-to-use Datalets will be added later, continuously expanding Pigsty’s functionality and application scenarios.


Free Friendly Open-Source License

Once open source gets good enough, competing with it would be insane.

Larry Ellison —— Oracle CEO

In the software industry, open source is a major trend. The history of the internet is the history of open-source software. One core reason the IT industry has today’s prosperity and people can enjoy so many free information services is open-source software. Open source is a truly successful form of communism by developers (translating as community-ism would be more appropriate): software, the core means of production in the IT industry, becomes publicly owned by developers worldwide — everyone for me, me for everyone.

When an open-source programmer works, their labor might actually contain the crystallized wisdom of tens of thousands of top developers. Through open source, all community developers form a united force, greatly reducing the internal friction of reinventing wheels and allowing the entire industry’s technical level to advance at an unimaginable speed. Open source’s momentum is like a snowball that has become unstoppable today. Except for some special scenarios and path dependencies, doing closed-door development for self-reliance in software development has become a big joke.

Relying on open source, giving back to open source. Pigsty adopts the friendly Apache License 2.0, which can be used commercially for free. As long as you comply with Apache 2 License’s attribution clauses, cloud vendors and software vendors are welcome to integrate and develop secondary commercial products.


About Pigsty

A system cannot be successful if it is too strongly influenced by a single person. Once the initial design is complete and fairly robust, the real test begins as people with many different viewpoints undertake their own experiments. — Donald Knuth

Pigsty is built around the open-source database PostgreSQL. PostgreSQL is the world’s most advanced open-source relational database, and Pigsty’s goal is to be the best open-source PostgreSQL distribution.

Initially, Pigsty didn’t have such grand goals. Because I couldn’t find any monitoring system on the market that met my needs, I had to roll up my sleeves and make one myself. Unexpectedly, it worked exceptionally well, and quite a few external organizations and PG users hoped to use it. Subsequently, deployment and delivery of the monitoring system became a problem, so the database deployment management part was added; after production environment application, developers wanted local sandbox environments for testing, so local sandboxes were added; users complained that ansible wasn’t user-friendly, so the pigsty-cli command-line tool wrapper was created; users wanted to edit configuration files through UI, so Pigsty GUI was born. Like this, needs grew and features became richer, Pigsty became more complete through long-term polishing, far exceeding initial expectations.

Doing this is itself a challenge — making a distribution is somewhat like making a RedHat, making a SUSE, making an “RDS product.” Usually only professional companies and teams of a certain scale would attempt this. But I just wanted to try: is it possible for one person? Actually, besides being slower, there’s nothing impossible. Switching between product manager, developer, and end-user roles is a very interesting experience, and the biggest benefit of “eating dog food” is that you’re both developer and user — you know what you need and won’t slack off on your own requirements.

However, as Knuth said: “A system with too strong a personal touch cannot succeed.” To make Pigsty a project with vigorous vitality, it must be open-sourced and used by more people. “When the initial design is complete and stable enough, the real challenge begins when various users use it in their own ways.”

Pigsty has solved my own problems and needs very well. Now I hope it can help more people and make PostgreSQL’s ecosystem more prosperous and colorful.

1.40 - Pigsty v0.9: CLI + Logs

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.9.0

New Stuff

  • One-liner install: curl -fsSL https://pigsty.cc/install | bash bootstraps everything.
  • pigsty-cli: wraps the common Ansible playbooks so you stop copy-pasting command lines. Still beta but already handy.
  • Loki + Promtail: Postgres, pgbouncer, and Patroni logs stream into Grafana with metrics extracted from log volume. infra-loki.yml and pgsql-promtail.yml wire things up.
  • Binary exporters: grab monitoring binaries with files/get_bin.sh if you don’t want to rely on repos.
  • Flight mode: once the meta node is initialized you can run bin/upgrade to switch into a dynamic inventory using data stored inside pg-meta.

Fixes

  • Cleaned up HAProxy health checks that were flooding PG and Patroni logs with connection reset noise.
  • Patroni logs now carry readable timestamps (no more millisecond fragments) and explicit time zones.
  • Monitoring queries run by dbuser_monitor log only when slower than 1s.
  • Grafana role refactor keeps the API stable, but uses CDN-hosted plugin bundles for faster installs.
  • Pgbouncer user creation now handles md5 passwords properly.
  • Hardened SQL templates for DB/user creation, fixed DNS orchestration edge cases, and tidied Makefile typos.

Knob Changes

  • node_disable_swap defaults to false; Pigsty no longer nukes swap by default.
  • node_sysctl_params stops writing kernel tunables unless you explicitly set them.
  • grafana_plugin: install now means “download from CDN if cache is missing.”
  • repo_url_packages pulls extra RPMs from the Pigsty CDN so installs inside China work out of the box.
  • proxy_env.no_proxy includes the CDN endpoints.
  • grafana_customize defaults to false; flip it on only if you have the Pigsty Pro UI bits.
  • node_admin_pk_current adds your current ~/.ssh/id_rsa.pub to the admin account.
  • Loki/Promtail knobs: loki_clean, loki_data_dir, promtail_enabled, promtail_clean, promtail_port, promtail_status_file, promtail_send_url.

1.41 - Pigsty v0.8: Service Provisioning

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.8.0

v0.8 finalizes the provisioning API. Services are completely rebuilt: instead of a hard-coded primary/replica pair you can now declare any number of services, plug in HAProxy, swap in an external load balancer, or hand off to a custom VIP controller. Everything else in the supply chain stabilizes on top of this model.

Service API

The old vip and haproxy knobs moved under the service role. pg_services (plus pg_services_extra) define each exposed endpoint—name, ports, selectors, health checks, weights, and balancer hints. Selectors are JMESPath filters over cluster members, and optional selector_backup pools handle fail-in when replicas are gone. Out of the box we ship primary, replica, default, and offline service definitions; swap dst_port to point at postgres, pgbouncer, or any number.

The HAProxy stanza keeps per-service tuning (maxconn, algorithm, timeouts) while VIP config distinguishes L2/L4 implementations so you can drop Pigsty behind an existing load balancer.

Database Interface Tweaks

Locales can now be split into lc_collate and lc_ctype so extensions like pg_trgm behave with non-C collations. The rest of the pg_databases schema stays the same—owner/template/encoding/connlimit/revokeconn/pgbouncer/comment—just with better defaults and inline comments.

1.42 - Pigsty v0.7: Monitor-Only Deployments

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.7.0

Pigsty v0.7 focuses on plugging existing fleets into Pigsty’s observability stack. The new monitor-only flow lets you drop Pigsty dashboards onto databases that were provisioned elsewhere, and the declarative APIs for databases and users got a much needed redesign.

Highlights

  • Monitor-only deployment flow (monly) with its own playbook.
  • Split static Prometheus target files by cluster for easier hand-editing.
  • New helper playbooks: pgsql-createuser.yml and pgsql-createdb.yml for live clusters.
  • Database and user schema definitions now cover owner/template/locale knobs plus per-role capabilities.
  • Bug fixes for extension schema typos and pgbouncer reload.

API Changes

New options:

prometheus_sd_target: batch
exporter_install: none
exporter_repo_url: ''
node_exporter_options: '--no-collector.softnet --collector.systemd --collector.ntp --collector.tcpstat --collector.processes'
pg_exporter_url: ''
pgbouncer_exporter_url: ''

Removed option:

exporter_binary_install

Structures affected: pg_default_roles, pg_users, pg_databases. Also fixed the pg_default_privilegs typo → pg_default_privileges.

Monitor-Only Mode

When you just want Pigsty’s observability without touching the way databases were provisioned, run the monly flow. Infra still gets bootstrapped on the meta node via ./infra.yml, but database nodes skip the provisioning playbooks and only run ./pgsql-monitor.yml. Config gets much shorter—most of the time you only keep infra vars and a handful of monitoring knobs.

Database Provisioning Interface

pg_databases now exposes owner/template/encoding/locale/connlimit/allowconn knobs plus revokeconn (strip CONNECT from public) and inline comments. Use ./pgsql-createdb.yml -e pg_database=<name> to create or mutate live databases; the generated SQL lives inside /pg/tmp/pg-db-<name>.sql on the primary.

User Provisioning Interface

pg_users swapped usernamename, groupsroles, and exploded options into discrete flags (login, superuser, createdb, createrole, inherit, replication, bypassrls, connlimit). Users can also get expire_at / expire_in timers plus pgbouncer defaults to false. Apply changes through ./pgsql-createuser.yml -e pg_user=<name> which renders /pg/tmp/pg-user-<name>.sql on the primary.

1.43 - Pigsty v0.6: Provisioning Upgrades

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.6.0

Pigsty v0.6 responds to user feedback with a redesigned provisioning path plus a monitoring stack that can sit beside any managed PG fleet—even a MyBase cluster built elsewhere.

Bug Fixes

  • Patroni no longer resets PG HBA on restart.
  • Fixed copy typos and the default primary for the pg-test sandbox cluster.
  • Patched the dashboard title typo on PG Overview.

Feature Work

  • Monitoring supply chain overhaul: Prometheus can now run fully static, exporters accept service_registry toggles, and exporter_binary_install lets you drop binaries without hitting repos. Each exporter has its own *_enabled flag.
  • Prometheus static discovery is rendered straight from inventory, so you can graft Pigsty dashboards onto any PG-as-a-service footprint.
  • HAProxy provisioning adds a global console at h.pigsty, optional auth, fallback routing to the primary when all replicas die, and per-service weight tuning.
  • ACL defaults now include dbrole_offline for slow-query/ETL workloads plus HBA rules that fence those workloads to marked nodes.
  • Component refresh: PostgreSQL 13.2, Prometheus 2.25, pg_exporter 0.3.2, node_exporter 1.1, Consul 1.9.3, and a faster ZJU PG mirror.

API Changes

New knobs:

service_registry: consul
prometheus_options: '--storage.tsdb.retention=30d'
prometheus_sd_method: consul
prometheus_sd_interval: 2s
pg_offline_query: false
node_exporter_enabled: true
pg_exporter_enabled: true
pgbouncer_exporter_enabled: true
dcs_disable_purge: false
pg_disable_purge: false
haproxy_weight: 100
haproxy_weight_fallback: 1

Removed knobs:

prometheus_metrics_path
prometheus_retention

1.44 - Pigsty v0.5: Declarative DB Templates

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.5.0

v0.5.0

Outline

  • The official docs site (http://pigsty.cc/) is live.
  • Database templating becomes fully declarative: define users, roles, databases, ACLs, extensions, and schemas in config.
  • The default access model is refined and HBA management now comes straight from Pigsty instead of Patroni.
  • Grafana provisioning switched from shoving a sqlite file to JSON provisioning via API.
  • Added the pg-cluster-replication dashboard to the open bundle.
  • CentOS 7.8 offline bundle: pkg.tgz.

Declarative Database Layouts

Multi-tenant headaches go away once everything is described as code. The new templates let you declare users, passwords, role hierarchies, DB defaults, extensions, schemas, and default privileges in YAML so a single config file replaces piles of runbooks. A stripped example:

# per-cluster settings
pg_users:
  - username: test
    password: test
    comment: default test user
    groups: [ dbrole_readwrite ]
pg_databases:
  - name: test
    extensions: [{name: postgis}]
    parameters:
      search_path: public,monitor

# environment-wide system roles
pg_replication_username: replicator
pg_replication_password: DBUser.Replicator
pg_monitor_username: dbuser_monitor
pg_monitor_password: DBUser.Monitor
pg_admin_username: dbuser_admin
pg_admin_password: DBUser.Admin

# default roles
pg_default_roles:
  - username: dbrole_readonly
    options: NOLOGIN
    comment: role for readonly access

  - username: dbrole_readwrite
    options: NOLOGIN
    comment: role for read-write access
    groups: [ dbrole_readonly ]

  - username: dbrole_admin
    options: NOLOGIN BYPASSRLS
    comment: role for object creation
    groups: [dbrole_readwrite,pg_monitor,pg_signal_backend]

  - username: postgres
    options: SUPERUSER LOGIN
    comment: system superuser

  - username: replicator
    options: REPLICATION LOGIN
    groups: [pg_monitor, dbrole_readonly]
    comment: system replicator

  - username: dbuser_monitor
    options: LOGIN CONNECTION LIMIT 10
    comment: system monitor user
    groups: [pg_monitor, dbrole_readonly]

  - username: dbuser_admin
    options: LOGIN BYPASSRLS
    comment: system admin user
    groups: [dbrole_admin]

  - username: dbuser_stats
    password: DBUser.Stats
    options: LOGIN
    comment: business read-only user for statistics
    groups: [dbrole_readonly]

# default privileges applied to dbsu/admin objects
pg_default_privilegs:
  - GRANT USAGE                         ON SCHEMAS   TO dbrole_readonly
  - GRANT SELECT                        ON TABLES    TO dbrole_readonly
  - GRANT SELECT                        ON SEQUENCES TO dbrole_readonly
  - GRANT EXECUTE                       ON FUNCTIONS TO dbrole_readonly
  - GRANT INSERT, UPDATE, DELETE        ON TABLES    TO dbrole_readwrite
  - GRANT USAGE,  UPDATE                ON SEQUENCES TO dbrole_readwrite
  - GRANT TRUNCATE, REFERENCES, TRIGGER ON TABLES    TO dbrole_admin
  - GRANT CREATE                        ON SCHEMAS   TO dbrole_admin
  - GRANT USAGE                         ON TYPES     TO dbrole_admin

pg_default_schemas: [monitor]

pg_default_extensions:
  - { name: 'pg_stat_statements',  schema: 'monitor' }
  - { name: 'pgstattuple',         schema: 'monitor' }
  - { name: 'pg_qualstats',        schema: 'monitor' }
  - { name: 'pg_buffercache',      schema: 'monitor' }
  - { name: 'pageinspect',         schema: 'monitor' }
  - { name: 'pg_prewarm',          schema: 'monitor' }
  - { name: 'pg_visibility',       schema: 'monitor' }
  - { name: 'pg_freespacemap',     schema: 'monitor' }
  - { name: 'pg_repack',           schema: 'monitor' }
  - name: postgres_fdw
  - name: file_fdw
  - name: btree_gist
  - name: btree_gin
  - name: pg_trgm
  - name: intagg
  - name: intarray

pg_hba_rules:
  - title: allow meta node password access
    role: common
    rules:
      - host    all     all                         10.10.10.10/32      md5

  - title: allow intranet admin password access
    role: common
    rules:
      - host    all     +dbrole_admin               10.0.0.0/8          md5
      - host    all     +dbrole_admin               172.16.0.0/12       md5
      - host    all     +dbrole_admin               192.168.0.0/16      md5

  - title: allow intranet password access
    role: common
    rules:
      - host    all             all                 10.0.0.0/8          md5
      - host    all             all                 172.16.0.0/12       md5
      - host    all             all                 192.168.0.0/16      md5

  - title: allow local read-write access
    role: common
    rules:
      - local   all     +dbrole_readwrite                               md5
      - host    all     +dbrole_readwrite           127.0.0.1/32        md5

  - title: allow read-only access
    role: replica
    rules:
      - local   all     +dbrole_readonly                               md5
      - host    all     +dbrole_readonly           127.0.0.1/32        md5
pg_hba_rules_extra: []

pgbouncer_hba_rules:
  - title: local password access
    role: common
    rules:
      - local  all          all                                     md5
      - host   all          all                     127.0.0.1/32    md5

  - title: intranet password access
    role: common
    rules:
      - host   all          all                     10.0.0.0/8      md5
      - host   all          all                     172.16.0.0/12   md5
      - host   all          all                     192.168.0.0/16  md5
pgbouncer_hba_rules_extra: []

Templates and Permissions

Two SQL templates (pg-init-template.sql for template1 and pg-init-business.sql for business databases) now give you hooks to seed any custom logic. The default ACL layout was tightened for multi-tenant instances: regular users no longer get implicit CONNECT on foreign databases, CREATE on their own DB, or CREATE inside public.

Provisioning Updates

Grafana provisioning now happens through the API, so you can feed dashboards into an existing Grafana by simply pointing grafana_url at a username/password endpoint. Pigsty generates HBAs on its own so Patroni stays focused on HA, and the supply chain is cleaner.

1.45 - Pigsty v0.4: PG13 and Better Docs

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.4.0

Pigsty v0.4 is our second public beta. The observability stack was rebuilt around Grafana 7.3, and ten curated dashboards became the default open-source payload. pg_exporter 0.3.1 drives metrics, and the alert wiring has been cleaned up for the new Grafana release.

Open-Source Dashboards

The OSS build now exposes ten high-signal Grafana panels: PG Overview, Cluster, Service, Instance, Database, Query, Table, Table Catalog, Table Detail, and Node. Even with a lean set it easily outclasses most “enterprise” PG monitoring suites.

Software Refresh

  • PostgreSQL 13.1 + Patroni 2.0.1-4, with citus added to the repo
  • pg_exporter upgraded to 0.3.1
  • Grafana jumps to 7.3; a ton of compatibility fixes landed
  • Prometheus 2.23 with the new UI enabled
  • Consul 1.9 and related components updated

Other Improvements

  • Updated Prometheus alert rules and Alertmanager info links
  • Fixed a batch of bugs and typos
  • Added a tiny backup script for quick dumps

Offline Bundle

Need an air-gapped install? Grab the CentOS 7.8 package bundle (pkg.tgz) from GitHub and deploy from local media.

1.46 - Pigsty v0.3: First Public Beta

Originally published on VONNG.

GitHub Release: https://github.com/pgsty/pigsty/releases/tag/v0.3.0

Pigsty v0.3.0 is the very first public preview. It packages a lean observability stack plus a reproducible offline bundle so you can spin up a real PostgreSQL lab without touching the public Internet.

Observability Stack

The open build ships eight curated Grafana dashboards: PG Overview, Cluster, Service, Instance, Database, Table Overview, Table Catalog, and a bare-metal Node view. Even with a trimmed set the coverage still crushes most “enterprise” monitoring stories.

Offline Bundle

Shipyard environments can fetch the CentOS 7.8 offline bundle directly from GitHub (pkg.tgz). Drop it on the management node and you have a deterministic install no matter how broken the mirrors are.

2 - Release

Pigsty release archive using complete x.y.z version numbers.

Every stable numbered Pigsty tag through v4.5.0 has its own x.y.z page, including patch releases. Each record reconciles the long-form Pigsty release article, the historical About / Release Note archive, and the corresponding GitHub release or tag, then links the exact source comparison. Planned versions remain drafts until an actual tag is published.

2.1 - Pigsty v4.5.0

Silo, Kafka, MySQL, Valkey, 575 extensions, and safer orchestration

Pigsty v4.5.0 is a feature release focused on new pilot modules, replaceable data services, cluster-identity-aware orchestration, observability, and the software supply chain. It introduces Kafka KRaft and MySQL 8.4 modules, adds Valkey to REDIS, converges the MINIO module on Silo, and expands the packaged extension catalog from 531 to 575 extensions. Released on 2026-08-15. See the GitHub release and the complete source comparison at v4.4.0...v4.5.0.

Highlights

  • 575 extensions: Compared with v4.4.0’s 531 entries, the current catalog adds 46 and removes 2, for a net gain of 44. It now contains 575 extensions across 406 non-contrib package families, with RPM/DEB coverage tracked per platform.
  • Kafka KRaft module: Adds native Pigsty orchestration for Kafka, with multi-cluster support, dynamic member enrollment and retirement, SCRAM/TLS, secure credential rotation, monitoring metrics, and Grafana dashboards.
  • MySQL 8.4 module: Adds standalone and three-node InnoDB Cluster deployments, MySQL Router, XtraBackup, user and database provisioning, monitoring and alerting, and idempotent reconciliation.
  • Valkey and Silo: REDIS adds redis_type: valkey; the final MINIO source accepts only minio_type: silo. The RustFS integration developed during this cycle was fully withdrawn before the candidate baseline.
  • 51 standalone configuration templates: Adds demo/kafka, demo/mysql, and the eight-node ha/octo simulation template to the 48 standalone templates in v4.4.0. The compatibility symlink conf/app/supa.yml../supabase.yml remains available.
  • Safer cluster-identity orchestration: PGSQL, REDIS, MINIO, KAFKA, and MYSQL initialization playbooks, plus every corresponding removal playbook except mysql-rm.yml, skip unrelated hosts by explicit cluster identity. mysql-rm.yml instead fails closed for any wrongly selected host. etcd delegation and DBSU key exchange now use actual cluster members as well.
  • Observability and supply chain: Re-exports Grafana dashboards to Dashboard API v2, moves MinIO/Silo collection to Metrics V3, and generates local repositories atomically with SOW instead of synthetic ModuleMD metadata.
  • Kernel and toolchain updates: Completes pgBackRest support for PostgreSQL 19 beta2, enables cluster mode for Percona PostgreSQL TDE, fixes IvorySQL initialization and WAL compression, and refreshes extension package maps, exporters, and build tooling.

New Modules and Data Services

  • The Kafka module uses node state as the source of truth for dynamic KRaft orchestration. It manages one or more clusters in one inventory and also supports an unbounded kafka.yml run; partial --limit selections are rejected. The destructive kafka-rm.yml instead requires a non-empty -l/--limit and validates a safe absolute data path plus surviving broker/controller anchors before any partial retirement can stop services. Nodes retain authoritative manifests and secrets, with dynamic controller joins, broker admission, member retirement, three-step dead-node replacement, SCRAM-SHA-512/TLS, credential and certificate rotation, and self-tested partition health gates.
  • The MySQL pilot module targets a fixed MySQL 8.4 LTS platform and accepts either a standalone node or a three-node InnoDB Cluster. It includes MySQL Shell and Router, scheduled full XtraBackup backups, TLS, account and database provisioning, primary-key policy checks, conservative member removal, and idempotent reconciliation.
  • The REDIS module retains redis as its default engine and can deploy Valkey with redis_type: valkey. Service units now use Type=notify with a 1,800-second startup timeout, plus stronger topology validation, password handling, tag-scoped removal semantics, and rebuild protection.
  • The MINIO module now deploys Silo and only Silo. minio_type remains an extension point, but silo is the sole accepted value in this release. Startup checks the systemd Invocation ID and ActiveState=active for the current restart, waits about 600 seconds by default, and then runs Silo’s cluster health check. The Infra package line adds silo and mcli while preserving the S3/Admin APIs, /minio/* routes, MINIO_* environment variables, and disk format.
  • Object-storage topology is grouped by minio_cluster; its inventory group name may differ, and one inventory may declare multiple object-storage clusters. Use distinct minio_alias, minio_domain, and minio_endpoint values for each to avoid overwriting shared client aliases on INFRA nodes. demo/minio now selects Silo explicitly and trims its local repository to the infra,node modules.
  • The standalone FERRET module is replaced by PostgreSQL Mongo mode and the FerretDB Docker APP. PostgreSQL provides the DocumentDB data layer, while Docker Compose provides the FerretDB protocol layer.

Orchestration, Security, and Tooling

  • deploy.yml, slim.yml, and the PGSQL, REDIS, MINIO, KAFKA, and MYSQL initialization playbooks now skip unrelated hosts according to the corresponding *_cluster identity. The PGSQL, REDIS, MINIO, and KAFKA removal playbooks do the same. MySQL removal is intentionally different: mysql-rm.yml does not skip hosts without identity and instead fails closed in mysql_rm_check. Every host that enters a role still receives an internal identity check.
  • PGSQL configuration, PITR, and removal workflows delegate only when the canonical etcd group exists and has at least one member; they no longer silently fall back to localhost when no etcd target exists. DBSU SSH keys are exchanged through the actual pg_cluster_members, correctly covering cross-inventory-group topologies such as Citus.
  • PGSQL PITR and removal now delete only the etcd subtree bounded by /<cluster>/, avoiding adjacent clusters whose names share a prefix. The initial pgBackRest marker /etc/pgbackrest/initial.done is written only after the backup command succeeds.
  • HAProxy uses the fixed /etc/haproxy/haproxy.cfg and /etc/haproxy/conf.d layout, upstream master-worker mode, a master socket, and Type=notify. dnsmasq now binds dynamically, answers private reverse lookups locally, and handles node addresses added after INFRA initialization.
  • Rendered systemd units managed by Pigsty are consistently placed under /etc/systemd/system; permissions on sensitive configuration and privileged files are tightened further. Removal workflows stop services before entering the data-cleanup phase.
  • The REPO and CACHE roles now use sow create --pigsty to atomically generate RPM/APT metadata and the SHA-256 repo_complete marker, and no longer generate synthetic ModuleMD metadata. pg_id also compares cluster size as an explicit integer for older Ansible releases.
  • RPM exporter package names move from underscores to hyphens, for example node_exporternode-exporter. Debian repository naming and PGDG YUM extension package mappings are corrected as well.
  • Tuned profiles now use the OS-specific directory: /etc/tuned/profiles on EL 10, Debian 13, and Ubuntu 26, and /etc/tuned on EL 8/9, Debian 12, and Ubuntu 22/24. Debian/Ubuntu package installation also suppresses premature starts of Silo, Redis/Valkey, and legacy log services.
  • China-region repository routing receives a systematic refresh. OS, Docker, Grafana, Percona, supported MongoDB APT, and uv/PyPI paths prefer Tencent Cloud; EL and Docker entries retain Huawei Cloud and Aliyun fallbacks where appropriate. MySQL and Kubernetes use USTC mirrors, and ClickHouse uses Huawei Cloud. MongoDB RPM no longer advertises an unavailable China-region alternative. The final per-platform choices remain defined in roles/node_id/vars/<os>.<arch>.yml.
  • The Docker image moves to Debian 13.6 and Pigsty v4.5.0. Vagrant enforces a 32 GiB root disk, accepts pinned box versions, and adds the eight-node ha/octo lab. docker/Makefile fixes its data directory at ./data, and make purge deletes that directory directly.
  • GitHub Actions for checkout, CodeQL, Docker build/login, and Cosign are upgraded in one batch. Release, bootstrap, install, and validation scripts also tighten file and argument handling. Release archives now derive top-level pigsty.yml from conf/meta.yml, include the Kafka/MySQL playbooks, and drop the legacy Mongo playbook.
  • The release-signing workflow must be dispatched from main and signs only the pigsty-<tag>.tgz source archive; multi-gigabyte offline bundles are outside that workflow. The package-build bootstrap matrix now matches conf/build/oss.yml: EL 9/10, Debian 12/13, and Ubuntu 22/24/26.

Observability

  • Re-exports the dashboard set through the Pig/Grafana tooling to Dashboard API v2. Adds four Kafka and five MySQL dashboards, and refreshes links, variables, and layouts across Node, PostgreSQL, Redis, and Infra dashboards.
  • Migrates the MinIO/Silo Overview and Instance dashboards to Metrics V3. Victoria scrapes the /minio/metrics/v3 root endpoint and drops high-cardinality samples carrying a non-empty bucket label.
  • Updates the pg_exporter configuration to 1.4.0 and fixes duplicate time series from the 1.4.1 pg_subrel query. For PG19 it adds pg_sub_19, pg_recovery_state, pg_wal_19, pg_lock_stat, and pg_vacuum_score; PG10+ gains the pg_xact_age transaction-age histogram, and replication-slot idle_timeout plus WAL Receiver connecting state encoding are covered. Kafka JMX/protocol exporters and the MySQL exporter also join the standard target and alert pipelines.

PostgreSQL Kernels and Extension Packages

  • PostgreSQL 19 beta3 templates now include pgBackRest packages and backup support.

  • All four standard Patroni templates add the PostgreSQL 18.6 logical-decoding allowlist output_plugin_libraries: 'pgoutput, test_decoding, wal2json'; Patroni filters it on older PostgreSQL versions that do not support the setting.

  • Percona PostgreSQL 18 TDE now uses cluster mode and retains Pigsty-prefixed packages to avoid conflicts with native PostgreSQL packages.

  • IvorySQL now initializes its default database correctly and enables compatible WAL compression in workload templates.

  • The PostgreSQL fact loader, per-platform package_map, and default extension groups are refreshed to fill package gaps and correct PGDG/YUM naming. Comparing names between the v4.4.0 PIG v1.5.1 catalog and the current catalog yields 46 additions and 2 removals:

    • 32 new primary extensions: 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 child extensions from those package families: 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 new PGDG extension, pg_statviz. Its package is hidden from the default install group, but the extension remains in the online catalog.
    • Two catalog removals: pg_analytics and spat. The total therefore rises from 531 to 575, a net gain of 44.
  • Cumulative notable upgrades include citus 14.2.0, pg_search 0.25.2, timescaledb 2.29.1, vector 0.8.6, documentdb 0.114, pg_partman 5.5.0, pgmnemo 0.16.1, plpgsql_check 2.10.4, provsql 1.12.0, and pgbson 2.1.0, plus a broad pgrx 0.19.1 rebuild.

  • Full build records and platform differences appear in the merged table below and the original RPM changelog and DEB changelog. New catalog entries include pg_local_cache and pg_policy. Changelog dates identify package batches and should not be equated one-for-one with the current CSV mtime.

  • pg_statviz is excluded only from the default install group in db/reload.sql; its detail page, platform coverage, and package-name differences remain in the online catalog.

Extension Package Update Log

The table below merges the RPM changelog and DEB changelog after v4.4.0, with 231 rows aligned by batch and extension name. Records that are identical in RPM and DEB are merged; version or note differences are shown separately. An unchanged version still indicates a rebuild, package-name change, license-metadata change, or platform-coverage change.

The first extension batch after July 10 is July 24. That original batch covers July 7–24 without per-item dates, so it is included in full to avoid omitting post-release pgrx rebuilds and package-matrix fixes. “RPM only” or “DEB only” means only that the other changelog has no same-batch row for that extension.

Batch Extension Version Change Notes
2026-08-14 asn1oid RPM only: 1.61.6 License metadata: GPL-3.0-or-later; r2; PG14-18
2026-08-14 emailaddr 00 License metadata: LicenseRef-Upstream-No-License; r3; PG14-18
2026-08-14 explain_ui 0.0.20.0.2 License metadata: LicenseRef-Upstream-No-License; r4; PG14-18
2026-08-14 numeral RPM only: 1.31.3 License metadata: GPL-2.0-or-later; r6; PG14-18
2026-08-14 oidc_validator 0.1.00.1.0 Rust module; LicenseRef-Upstream-No-License; r2; PG18
2026-08-14 pg_failover_slots 1.2.11.2.1 License metadata: PostgreSQL; r2; preload; PG14-18
2026-08-14 pg_geohash 1.01.0 License metadata: MIT; r4; fix SQL filename and target-PG ABI; PG14-18
2026-08-14 pg_oidc_validator 0.21.1.0 RPM: PG18 OAuth validator module; add discovery_url_override; EL10 only
DEB: PG18 OAuth validator module; add discovery_url_override and GSSAPI build dependency
2026-08-14 pg_relation_sql -0.2.2 RPM: Standalone SQL; no CREATE EXTENSION; noarch; PG14-18
DEB: Standalone SQL; no CREATE EXTENSION; Architecture: all; PG14-18
2026-08-14 pg_summarize 0.0.10.0.1 License metadata: LicenseRef-Upstream-No-License; r6; PG14-18
2026-08-14 pg_when 0.1.90.1.10 GitHub/PGXN release; upstream pgrx 0.18.1, packaged with 0.19.1; PG14-18
2026-08-14 pre_prepare RPM only: 0.90.9 License metadata: PostgreSQL; r2; PG14-18
2026-08-14 smlar 1.01.0 License metadata: LicenseRef-Upstream-No-License; r2; PG14-18
2026-08-14 unit 7.107.10 License metadata: GPL-3.0-or-later; r7; PG14-18
2026-08-12 biscuit 2.4.33.0.0 PG16-18; 2.x indexes require REINDEX
2026-08-12 cat_tools -0.3.0 SQL-only; PG14-18
2026-08-12 citus 14.1.014.2.0 Includes citus_columnar; PG16-18
2026-08-12 pg_clickhouse 0.3.20.10.0 PG14-18
2026-08-12 pg_describe -1.0.0 PG17-18
2026-08-12 pg_disorder -0.1.0 PG14-18
2026-08-12 pg_local_cache -1.3.0 PG14-18; preload; single-primary
2026-08-12 pg_mentat -1.5.7 PG14-18
2026-08-12 pg_policy -0.1.0 SQL-only; PG14-18
2026-08-12 pg_rational 0.0.20.0.3 RPM: PIGSTY; PG14-18
DEB: PGDG; PG14-18
2026-08-12 pg_readme 0.7.00.7.1 RPM: Catalog 0.7.1; RPM remains PGDG 0.7.0
DEB: Includes pg_readme_test_extension; PG14-18
2026-08-12 pg_search 0.25.00.25.2 PG15-18; pgrx 0.19.1; preload
2026-08-12 pg_squeeze 1.9.21.9.4 PGDG; PG14-18
2026-08-12 pg_statviz RPM: -0.9
DEB: -1.1
RPM: PGDG; PG14-16 and EL10 PG18; no PG17; not in default groups
DEB: PGDG; PG14-18 except Ubuntu 22.04; not in default groups
2026-08-12 pg_turbovec -1.29.0 PG14-18; pgrx 0.19.1
2026-08-12 pg_uuid_v8 1.0.01.1.0 PG14-18; includes 1.0-to-1.1 upgrade script
2026-08-12 pg_vault_tde -1.7.0 RPM: PG17-18; EL9/10; preload
DEB: PG17-18; preload
2026-08-12 pgbson 2.0.42.1.0 RPM: RPM package postgresbson; PG14-18
DEB: Source package postgresbson; PG14-18
2026-08-12 pgmnemo 0.15.00.16.1 PG17-18
2026-08-12 plpgsql_check 2.10.32.10.4 PG14-18
2026-08-12 plruby -2.5.0 Includes jsonb_plruby, hstore_plruby, ltree_plruby; PG14-18
2026-08-12 polardb-17 17.10.1.0-1PIGSTY17.10.1.0-2PGSTY Rebuild; PG17
2026-08-12 polarstore 1.2.42-1PIGSTY1.2.42-2PGSTY Rebuild
2026-08-12 provsql 1.11.01.12.0 PG14-18
2026-08-12 q3c RPM: 2.0.22.0.5
DEB: 2.0.42.0.5
RPM: PGDG; PIGSTY remains 2.0.2; PG14-18
DEB: PGDG; PG14-18
2026-08-12 timescaledb 2.29.02.29.1 PG16-18
2026-08-12 vector 0.8.60.8.6 PGDG repository refresh; PG14-18
2026-08-12 zlog 1.2.18-1PIGSTY1.2.18-2PGSTY Rebuild
2026-07-30 emaj RPM: -5.0.0
DEB: 4.7.15.0.0
RPM: Renamed to e-maj; Provides/Obsoletes emaj; r2
DEB: PG14-18
2026-07-30 graph 0.1.81.0.0 pggraph; PG14-18; pgrx 0.19.1
2026-07-30 nominatim_fdw 2.0.02.1.0 PG14-18
2026-07-30 numeral RPM only: 1.31.3 Renamed to postgresql-numeral; Provides/Obsoletes numeral; r3
2026-07-30 pg_ai_query RPM only: 0.1.10.1.1 EL9/10 only (GCC 13/OpenSSL 3); r2 not indexed
2026-07-30 pg_column_tetris -0.1.0 SQL-only; PG14-18
2026-07-30 pg_net 0.20.50.20.5 RPM: EL8/9: 0.9.2; EL10: 0.20.5; r3 not indexed
DEB: D12/D13/U24/U26: 0.20.5; U22: 0.9.2; r2 not indexed
2026-07-30 pg_partman RPM: 5.4.05.5.0
DEB: 5.4.25.5.0
RPM: PG14-18
DEB: Use postgresql-PGVERSION-partman package name
2026-07-30 pg_search 0.24.30.25.0 PG15-18; pgrx 0.19.1; add pgvector/OpenBLAS dependencies
2026-07-30 pgcontext -0.2.0 PG17-18; pgrx 0.19.1; optional pgvector bridge
2026-07-30 pgedge RPM only: 18.418.4 PG15-18 ABI fix; r2 not indexed
2026-07-30 pgmnemo 0.13.00.15.0 PG17-18; requires pgvector >= 0.7.0
2026-07-30 pgmp -1.0.6 PG14-18; GMP dependency
2026-07-30 pgpcre RPM only: 0.201905090.20190509 EL8/9 only; r2 not indexed
2026-07-30 pgwasm -0.1.0 PG14-18
2026-07-30 plpgsql_check 2.10.12.10.3 PG14-18; optional preload
2026-07-30 postbis -1.0 PG14-18 compatibility patch; r2
2026-07-30 qdgc -0.1.0 PG14-18; includes qdgc_postgis
2026-07-30 rdf_fdw 2.6.02.7.0 PG14-18
2026-07-30 timescaledb 2.28.32.29.0 PG16-18
2026-07-30 uri RPM only: 1.202510291.20251029 Renamed to pguri; Provides/Obsoletes pg_uri; r2
2026-07-30 vector 0.8.50.8.6 PG14-18; 0.8.6 not indexed
2026-07-30 pg_rewrite DEB only: 2.0.02.2 Renamed to postgresql-PGVERSION-pg-rewrite; PG14-18
2026-07-30 pgactive DEB only: 2.1.72.1.7 PG14-18 build fix; r2 not indexed
2026-07-30 pgzint DEB only: -0.2.0 D13/U26 only; requires Zint >= 2.14; not indexed
2026-07-30 timeseries DEB only: 0.2.10.2.1 Fix partman/cron Recommends and docs; r3
2026-07-24 argm -1.1.1 PG14-18
2026-07-24 cron_utils -0.1.0 SQL-only; PG14-18
2026-07-24 fbsql -0.1.0 PL/R; PG16-18
2026-07-24 oidc_validator -0.1.0 Rust OIDC; PG18
2026-07-24 online_advisor -1.0 PG14-18
2026-07-24 pg_cjk_parser -0.1.0 PG14-18
2026-07-24 pg_extension_base -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_extension_updater -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_fts -0.2.0 PG17-18
2026-07-24 pg_jieba -1.1.0 pkg 2.0.1; SQL 1.1.0; PG14-18
2026-07-24 pg_kpart -1.0 PG14-18
2026-07-24 pg_lake -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_lake_copy -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_lake_engine -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_lake_iceberg -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_lake_table -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_map -3.4 pg_lake 3.4; PG16-18; RPM EL9/10
2026-07-24 pg_oidc_validator -0.2 Percona OIDC; PG18; DEB all, RPM EL10
2026-07-24 pg_roast -1.0 PG14-18
2026-07-24 pg_tiktoken_c -1.1 PG14-18
2026-07-24 pgfr_analyze -2.29.2 pg_flight_recorder; PG15-18
2026-07-24 pgfr_record -2.29.2 pg_flight_recorder; PG15-18
2026-07-24 pgmemento -0.7.4 SQL-only; PG14-18
2026-07-24 pgmonitor -2.2.0 PG14-18
2026-07-24 pgsqlmock -1.0.1 PG14-18
2026-07-24 plx -1.3.1 PG14-18
2026-07-24 anon 3.1.13.1.3 pgrx 0.19.1; PG14-18
2026-07-24 block_copy_command 0.1.50.1.5 pgrx 0.19.1; PG14-18
2026-07-24 convert 0.1.00.1.0 pgrx 0.19.1; PG14-18
2026-07-24 etcd_fdw 0.0.10.0.1 pgrx 0.19.1; PG14-18
2026-07-24 explain_ui 0.0.20.0.2 pgrx 0.19.1; PG14-18
2026-07-24 graph 0.1.70.1.8 pgrx 0.19.1; PG14-18
2026-07-24 jsonschema 0.1.90.1.9 pgrx 0.19.1; PG14-18
2026-07-24 pg_base58 0.0.10.0.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_bestmatch 0.0.20.0.2 pgrx 0.19.1; PG14-18
2026-07-24 pg_cardano 1.2.01.2.0 pgrx 0.19.1; PG15-18
2026-07-24 pg_command_fw 0.1.00.1.0 pgrx 0.19.1; PG15-18
2026-07-24 pg_durable 0.2.20.2.3 pgrx 0.19.1; PG14-18
2026-07-24 pg_enigma 0.5.00.5.0 pgrx 0.19.1; PG14-18
2026-07-24 pg_eviltransform 0.0.20.0.4 pgrx 0.19.1; PG14-18
2026-07-24 pg_graphql 1.6.11.6.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_idkit 0.4.00.4.0 pgrx 0.19.1; PG14-18
2026-07-24 pg_jsonschema 0.3.40.3.4 pgrx 0.19.1; PG14-18
2026-07-24 pg_kazsearch 2.2.02.3.0 pgrx 0.19.1; PG16-18
2026-07-24 pg_later 0.4.00.4.0 pgrx 0.19.1; PG14-18
2026-07-24 pg_mooncake 0.2.00.2.0 pgrx 0.19.1; PG14-18
2026-07-24 pg_parquet 0.5.10.5.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_pinyin 0.0.40.0.5 pgrx 0.19.1; PG14-18
2026-07-24 pg_polyline 0.0.10.0.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_render 0.1.30.1.3 pgrx 0.19.1; PG14-18
2026-07-24 pg_rrf 0.0.30.0.3 pgrx 0.19.1; PG14-18
2026-07-24 pg_search 0.24.00.24.3 pgrx 0.19.1; PG15-18
2026-07-24 pg_session_jwt 0.5.00.5.0 pgrx 0.19.1; PG14-18
2026-07-24 pg_smtp_client 0.2.10.2.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_strict 1.0.51.0.5 pgrx 0.19.1; PG14-18
2026-07-24 pg_summarize 0.0.10.0.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_tiktoken 0.0.10.0.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_tokenizer 0.1.10.1.1 pgrx 0.19.1; PG14-18
2026-07-24 pg_trickle 0.81.00.81.0 pgrx 0.19.1; PG18
2026-07-24 pg_when 0.1.90.1.9 pgrx 0.19.1; PG14-18
2026-07-24 pgdd 0.6.10.6.1 pgrx 0.19.1; PG14-18
2026-07-24 pglinter 2.0.02.0.0 pgrx 0.19.1; PG14-18
2026-07-24 pglite_fusion 0.0.60.0.6 pgrx 0.19.1; PG14-18
2026-07-24 pgmqtt 0.3.00.4.1 pgrx 0.19.1; PG14-18
2026-07-24 pgrdf 0.6.40.6.20 pgrx 0.19.1; PG14-18
2026-07-24 pgsmcrypto 0.1.10.1.1 pgrx 0.19.1; PG14-18
2026-07-24 pgx_ulid 0.2.30.2.3 pgrx 0.19.1; PG14-18
2026-07-24 plprql 18.0.118.0.1 pgrx 0.19.1; PG14-18
2026-07-24 timescaledb_toolkit 1.23.01.23.0 pgrx 0.19.1; PG15-18
2026-07-24 typeid 0.3.00.3.0 pgrx 0.19.1; PG14-18
2026-07-24 tzf 0.3.00.3.0 pgrx 0.19.1; PG14-18
2026-07-24 vchord 1.1.11.1.1 pgrx 0.19.1; PG14-18
2026-07-24 vchord_bm25 0.3.00.3.0 pgrx 0.19.1; PG14-18
2026-07-24 vectorize 0.26.20.26.2 pgrx 0.19.1; PG14-18
2026-07-24 vectorscale 0.9.00.9.0 pgrx 0.19.1; PG14-18
2026-07-24 wrappers 0.6.10.6.2 pgrx 0.19.1; PG14-18
2026-07-24 age RPM only: 1.7.01.8.0 PG18: 1.8.0-rc0; PG17: 1.7.0
2026-07-24 babelfishpg_tsql 5.5.05.4.0 Catalog fix: 5.4.0; PG17-18
2026-07-24 biscuit 2.4.12.4.3 pkg 2.4.3; SQL 2.4.1; PG16-18
2026-07-24 decoderbufs 3.5.03.6.0 DEB 3.6.0; RPM 3.5.0; PG14-18
2026-07-24 documentdb 0.1130.114 PG15-18; 16 targets
2026-07-24 documentdb_core 0.1130.114 PG15-18; 16 targets
2026-07-24 documentdb_distributed 0.1130.114 PG15-18; 16 targets
2026-07-24 documentdb_extended_rum 0.1130.114 PG15-18; 16 targets
2026-07-24 http 1.7.11.7.2 PG14-18
2026-07-24 jdbc_fdw 0.4.00.5.0 pkg 0.5.0; SQL 1.2; PG14-18; 16 targets
2026-07-24 nominatim_fdw 1.32.0.0 PG14-18; 16 targets
2026-07-24 odbc_fdw 0.5.10.6.1 pkg 0.6.1; SQL 0.5.2; PG14-18
2026-07-24 ogr_fdw 1.1.81.1.9 PG14-18
2026-07-24 pg_csv RPM only: 1.0.11.0.2 +RPM; pkg 1.0.2; SQL 1.0.1; PG14-18
2026-07-24 pg_dbms_errlog 2.22.4 PG14-18
2026-07-24 pg_ivm 1.141.15 PG14-18
2026-07-24 pg_net 0.20.30.20.5 RPM: pkg 0.20.5; SQL 0.20.4; PG14-18; RPM EL10
DEB: D12/D13/U24/U26: 0.20.5; U22: 0.9.2 (libcurl); PG14-18
2026-07-24 pg_rewrite RPM only: 2.0.02.2 PG14-18
2026-07-24 pg_statement_rollback 1.51.6 PG14-18
2026-07-24 pg_tde 2.12.2 Percona; PG17-18
2026-07-24 pgnodemx RPM only: 1.72.0.1 pkg 2.0.1; SQL 2.0; PG14-18; cgroup-safe
2026-07-24 pgauditlogtofile 1.8.41.8.5 PG14-18
2026-07-24 pgbson 2.0.22.0.4 pkg 2.0.4; SQL 2.0; PG14-18
2026-07-24 pgclone 4.3.24.4.2 PG14-18
2026-07-24 pgextwlist 1.191.20 PG14-18
2026-07-24 pgmnemo 0.12.10.13.0 PG17-18
2026-07-24 pgmq 1.11.11.12.0 PG14-18
2026-07-24 pgsentinel 1.4.11.4.2 RPM 1.4.2; DEB 1.4.0; U26 1.4.1; PG14-18
2026-07-24 plpgsql_check 2.9.22.10.1 PG14-18
2026-07-24 plproxy 2.11.02.12.0 PG14-18
2026-07-24 powa 5.1.25.2.0 DEB 5.2.0; RPM 5.1.0; PG14-18
2026-07-24 provsql 1.10.01.11.0 PG14-18
2026-07-24 re2 0.3.00.4.1 PG16-18
2026-07-24 snowflake 2.42.5.0 pgEdge; PG15-18
2026-07-24 spock 5.0.65.0.10 pgEdge; PG15-18
2026-07-24 tdigest 1.4.31.4.4 PG14-18
2026-07-24 timescaledb 2.28.22.28.3 PG15-18: 2.28.3; PG14: 2.19.3; 6 EL
2026-07-24 vector 0.8.40.8.5 PG14-18
2026-07-24 babelfishpg_money 1.1.01.1.0 Babelfish: +PG18
2026-07-24 babelfishpg_tds 1.0.01.0.0 Babelfish: +PG18
2026-07-24 citus 14.1.014.1.0 Citus 13.0.0; EL10 RPM PG14, 2 arch
2026-07-24 dbt2 0.61.70.61.7 +DEB PG14-18; +EL8 RPM PG17-18, 2 arch
2026-07-24 decoder_raw 1.01.0 EL10/D13; PG14-16; 2 arch
2026-07-24 faker 0.5.30.5.3 RPM: +DEB PG14-18
DEB: +DEB PG14-18; D12/U22: python3-fake-factory 22.0.0
2026-07-24 gb18030_2022 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 h3 4.2.34.2.3 EL8 x86_64 RPM PG17-18
2026-07-24 hdfs_fdw 2.3.32.3.3 +DEB PG14-18
2026-07-24 hstore_pllua 2.0.122.0.12 +RPM 6 EL PG14-18
2026-07-24 hstore_plluau 2.0.122.0.12 +RPM 6 EL PG14-18
2026-07-24 hunspell_cs_cz 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_de_de 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_en_us 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_fr 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_ne_np 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_nl_nl 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_nn_no 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_pt_pt 1.01.0 16 targets; pt_pt.stop avoids core conflict
2026-07-24 hunspell_ru_ru 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 hunspell_ru_ru_aot 1.01.0 hunspell bundle; 10 dictionaries; 16 targets; PG14-18
2026-07-24 imgsmlr 1.01.0 EL10/D13; PG14-18; 2 arch
2026-07-24 ivorysql_ora 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 mobilitydb 1.3.01.3.0 +RPM 6 EL PG14-18; +U22 DEB PG18
2026-07-24 mobilitydb_datagen 1.3.01.3.0 mobilitydb bundle; +RPM 6 EL; +U22 DEB PG18
2026-07-24 omni 0.2.140.2.14 omnigres 20251108; EL10 PG14-18; EL8/9,D12/U22 PG18
2026-07-24 ora_btree_gin 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 ora_btree_gist 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 pg_dbms_job 2.02.0 +DEB PG14-18
2026-07-24 pg_dbms_lock 2.02.0 +DEB PG14-18
2026-07-24 pg_dbms_metadata 1.0.01.0.0 +DEB PG14-18; +EL8 aarch64 RPM PG15
2026-07-24 pg_fact_loader 2.0.12.0.1 U26 DEB PG14-18
2026-07-24 pg_get_functiondef 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 pg_strom 6.16.1 pg_strom 3.5; EL10 x86_64 PG14
2026-07-24 pgautofailover 2.22.2 6 EL RPM: +PG18
2026-07-24 pgbouncer_fdw 1.4.01.4.0 +DEB PG14-18
2026-07-24 pg_wait_sampling RPM only: 1.1.111.1.11 +RPM PG14-18; SQL 1.1
2026-07-24 pgl_ddl_deploy 2.2.12.2.1 RPM: +RPM PG14-18; +U26 DEB PG14-17
DEB: 10 DEB: +PG18; U26 PG14-17
2026-07-24 pglogical_ticker 1.4.11.4.1 6 EL RPM PG14-17
2026-07-24 pgmemcache 2.3.02.3.0 EL8 aarch64 RPM PG14-15
2026-07-24 pgml 2.10.02.10.0 EL10/D13/U26; PG14-17; 2 arch
2026-07-24 pgspider_ext 1.3.01.3.0 RPM: +RPM PG14-18; PG18 compatible
DEB: 10 DEB: +PG18; PG15-18
2026-07-24 plisql 1.01.0 IvorySQL 5.4; PG18; 16 targets
2026-07-24 pllua 2.0.122.0.12 6 EL: +PG18; EL8 aarch64: +PG14-15
2026-07-24 rdkit 202503.6202503.6 RPM: 202303.3; EL8/9, D12/U22; PG14-18
DEB: D12/U22 PG17-18: 202303.3; U26 PG14-17: 202503.6; runtimes unchanged
2026-07-24 sqlite_fdw 2.5.02.5.0 RPM: RPM r3: +PG18, EL8 SQLite; PG14-18
DEB: 10 DEB: +PG18; PG14-18
2026-07-24 sslutils 1.41.4 EL8 RPM PG18, 2 arch
2026-07-24 wal2mongo 1.0.71.0.7 RPM: +RPM PG14-18; PG17-18 compatible
DEB: 10 DEB: +PG17-18; PG14-18
2026-07-24 system_stats DEB only: 4.04.1 PG14-18; 10 DEB targets

Infrastructure Package Update Log

The following table contains all 144 Infra log records after v4.4.0, from 2026-07-16 through the latest 2026-08-12 batch. It also includes the ferretdb2 rebuild and RPM exporter package-name migration recorded in the changelog prose. Consecutive upgrades of the same package are retained as separate batch entries.

Build, download, and verification status follows the wording of the original log; it does not establish repository indexing, signing, synchronization, or offline-bundle acceptance. See the Infra changelog for full context.

Batch Package Old Version New Version Notes
2026-08-12 claude 2.1.226 2.1.227 Official manifest verified via proxy; dual-arch RPM/DEB built
2026-08-12 code-server 4.131.0 4.132.0 Official dual-architecture RPM/DEB downloaded and verified
2026-08-12 grafana-infinity-ds 3.11.2 3.11.3 Built as dual-architecture RPM/DEB
2026-08-12 mtail 3.4.6 3.4.7 Built as dual-architecture RPM/DEB
2026-08-12 opencode 1.18.15 1.18.16 Built as dual-architecture RPM/DEB
2026-08-12 pg-hardstorage 1.1.1 1.2.1 Official dual-architecture RPM/DEB downloaded and verified
2026-08-12 pig 1.6.1 1.8.0 Official dual-architecture RPM/DEB downloaded and verified
2026-08-12 postgrest 16.0 16.1 Static dual-architecture RPM/DEB; requires PostgreSQL 14+
2026-08-12 redis-exporter 1.88.0 1.89.0 Built as dual-architecture RPM/DEB
2026-08-12 sow 0.2.0 0.3.0 Official dual-architecture RPM/DEB downloaded and verified
2026-08-12 stalwart 0.16.16 0.16.17 Built as dual-architecture RPM/DEB
2026-08-08 claude 2.1.223 2.1.226 Official manifest verified via proxy; dual-arch built
2026-08-08 codex 0.146.1 0.147.0 Stable tag rust-v0.147.0; dual-arch built
2026-08-08 crush 0.88.0 0.88.1 Official tarballs repacked as 1PGSTY with license
2026-08-08 grafana 13.1.2 13.1.3 Official dual-architecture RPM/DEB artifacts
2026-08-08 opencode 1.18.14 1.18.15 Built as dual-architecture RPM/DEB
2026-08-08 postgrest 14.16 16.0 Static dual-architecture assets; requires PostgreSQL 14+
2026-08-08 rainfrog 0.4.2 0.4.3 Built as dual-architecture RPM/DEB
2026-08-08 rustfs 1.0.0-b12 1.0.0-rc1 Upstream rc.1-preview.1; dual-arch RPM/DEB built
2026-08-08 uv 0.12.2 0.12.3 Built as dual-architecture RPM/DEB
2026-08-07 claude 2.1.222 2.1.223 Official manifest verified via proxy; built
2026-08-07 codex 0.146.0 0.146.1 Stable tag rust-v0.146.1; built
2026-08-07 code 1.131.0 1.132.0 Official dual-architecture RPM/DEB verified
2026-08-07 dblab 0.47.2 0.47.4 Built as dual-architecture RPM/DEB
2026-08-07 grafana-infinity-ds 3.11.1 3.11.2 Built as dual-architecture RPM/DEB
2026-08-07 grafana-victorialogs-ds 0.30.1 0.31.0 Built as dual-architecture RPM/DEB
2026-08-07 k3s 1.36.2 1.36.3 Official stable channel v1.36.3+k3s1; built
2026-08-07 k3s-images 1.36.2 1.36.3 Exact-match dual-architecture airgap images; built
2026-08-07 mcli 20260804000000 20260806000000 Official pgsty fork dual-architecture RPM/DEB verified
2026-08-07 opencode 1.18.13 1.18.14 Built as dual-architecture RPM/DEB
2026-08-07 pgschema 1.12.1 1.12.2 Official dual-architecture RPM/DEB verified
2026-08-07 seaweedfs 4.40 4.41 Built as dual-architecture RPM/DEB
2026-08-07 silo minio 20260804000000 20260806000000 Official replacement; dual-architecture RPM/DEB verified
2026-08-07 uv 0.12.1 0.12.2 Built as dual-architecture RPM/DEB
2026-08-07 victoria-metrics 1.148.0 1.149.0 Main, cluster, and vmutils packages built for both arches
2026-08-07 ferretdb2 2.7.0 2.7.0 Rebuilt at the current version for dual-architecture RPM/DEB
2026-08-05 agentsview 0.39.0 0.40.1 Built as dual-architecture RPM/DEB
2026-08-05 claude 2.1.220 2.1.222 Official manifest verified via proxy; built
2026-08-05 code-server 4.130.0 4.131.0 Official artifacts downloaded and verified
2026-08-05 crush 0.87.0 0.88.0 Official links only; redistribution blocked
2026-08-05 grafana 13.1.1 13.1.2 Official artifacts verified; security fix
2026-08-05 juicefs 1.4.0 1.4.1 Built as dual-architecture RPM/DEB
2026-08-05 mcli 20260417000000 20260804000000 pgsty fork artifacts downloaded and verified
2026-08-05 minio 20260618000000 20260804000000 pgsty fork artifacts downloaded and verified
2026-08-05 mongodb-exporter 0.51.0 0.52.0 Built as dual-architecture RPM/DEB
2026-08-05 mtail 3.0.8 3.4.6 Built as dual-architecture RPM/DEB
2026-08-05 nodejs 24.18.1 24.19.0 Node.js 24.x LTS; built
2026-08-05 opencode 1.18.9 1.18.13 Built as dual-architecture RPM/DEB
2026-08-05 pg-hardstorage 1.0.17 1.1.1 Official artifacts downloaded and verified
2026-08-05 pgbackrest-exporter 0.23.0 0.24.0 Built as dual-architecture RPM/DEB
2026-08-05 pgstream 1.2.5 1.3.1 Built as dual-architecture RPM/DEB
2026-08-05 rclone 1.74.4 1.75.0 Official artifacts downloaded and verified
2026-08-05 rustfs 1.0.0-b11 1.0.0-b12 Beta line; built as dual-architecture RPM/DEB
2026-08-05 stalwart 0.16.15 0.16.16 Built as dual-architecture RPM/DEB
2026-08-05 uv 0.12.0 0.12.1 Built as dual-architecture RPM/DEB
2026-08-05 vray 5.51.2 5.52.0 Latest stable; built as dual-architecture RPM/DEB
2026-08-05 xray 26.3.27 26.7.28 Latest dated release; built as dual-architecture RPM/DEB
2026-08-05 prometheus 3.13.1 3.13.2 Security and stability release
2026-08-05 pig 1.6.0 1.6.1 Refreshed extension catalog
2026-07-30 agentsview 0.38.1 0.39.0
2026-07-30 claude 2.1.218 2.1.220
2026-07-30 cloudflared 2026.7.2 2026.7.3
2026-07-30 code 1.130.0 1.131.0
2026-07-30 code-server 4.129.0 4.130.0
2026-07-30 codex 0.145.0 0.146.0 Release tag rust-v0.146.0
2026-07-30 crush 0.86.0 0.87.0
2026-07-30 dblab 0.46.0 0.47.2
2026-07-30 etcd 3.7.0 3.7.1
2026-07-30 genai-toolbox 1.7.0 1.8.0 Source build; Rocky 8/9 and Debian 12 verified
2026-07-30 headscale 0.29.2 0.29.3
2026-07-30 nodejs 24.18.0 24.18.1 Security release
2026-07-30 opencode 1.18.4 1.18.9
2026-07-30 pg-exporter 1.4.0 1.4.1 Official release artifacts
2026-07-30 pg-hardstorage 1.0.13 1.0.17
2026-07-30 pgschema 1.12.0 1.12.1
2026-07-30 pgstream 1.2.2 1.2.5
2026-07-30 pig 1.5.1 1.6.0
2026-07-30 postgrest 14.15 14.16
2026-07-30 rainfrog 0.3.20 0.4.2
2026-07-30 redis-exporter 1.87.0 1.88.0
2026-07-30 rustfs 1.0.0-beta.10 1.0.0-beta.11 Preview releases excluded
2026-07-30 stalwart 0.16.14 0.16.15
2026-07-30 uv 0.11.31 0.12.0
2026-07-30 victoria-traces 0.9.4 0.10.0
2026-07-23 claude 2.1.215 2.1.218 Verified against the official manifest via proxy
2026-07-23 codex 0.144.6 0.145.0 Release tag rust-v0.145.0
2026-07-23 dblab 0.44.1 0.46.0
2026-07-23 duckdb 1.5.4 1.5.5
2026-07-23 grafana-infinity-ds 3.8.0 3.11.1
2026-07-23 grafana-victorialogs-ds 0.30.0 0.30.1
2026-07-23 opencode 1.18.3 1.18.4
2026-07-23 pg-timetable 6.3.0 7.0.0 Major release
2026-07-23 pgstream 1.2.0 1.2.2
2026-07-23 stalwart 0.16.13 0.16.14
2026-07-23 uv 0.11.29 0.11.31
2026-07-23 grafana 13.1.0 13.1.1 Direct-download artifacts
2026-07-23 pg-hardstorage 1.0.12 1.0.13 Direct-download artifacts
2026-07-23 crush 0.85.0 0.86.0 Direct-download artifacts
2026-07-23 code 1.129.1 1.130.0 Direct-download artifacts
2026-07-20 RPM exporter package names xxx_exporter xxx-exporter Renamed underscore-style RPM packages to hyphenated names to match DEB naming
2026-07-20 pg-exporter 1.3.0 1.4.0 Repackaged from the upstream Linux tarball
2026-07-20 victoria-metrics 1.147.0 1.148.0 VictoriaMetrics main package
2026-07-20 victoria-metrics-cluster 1.147.0 1.148.0 VictoriaMetrics companion package
2026-07-20 vmutils 1.147.0 1.148.0 VictoriaMetrics companion package
2026-07-20 victoria-logs 1.51.0 1.52.0 VictoriaLogs main package
2026-07-20 vlogscli 1.51.0 1.52.0 VictoriaLogs companion package
2026-07-20 vlagent 1.51.0 1.52.0 VictoriaLogs companion package
2026-07-20 grafana-victorialogs-ds 0.29.0 0.30.0
2026-07-20 seaweedfs 4.39 4.40
2026-07-20 rustfs 1.0.0-b9 1.0.0-b10 Prerelease line; preview releases excluded
2026-07-20 sabiql 1.14.0 1.15.1
2026-07-20 timescaledb-tools 0.19.0-1 0.19.0-2 Bundles timescaledb-parallel-copy 0.13.0
2026-07-20 claude 2.1.211 2.1.215 Downloaded through the 8118 proxy and verified
2026-07-20 codex 0.144.4 0.144.6 Release tag rust-v0.144.6
2026-07-20 genai-toolbox 1.6.0 1.7.0 External build from official GCS binary and arm64 container artifact
2026-07-20 opencode 1.18.2 1.18.3
2026-07-20 pg-hardstorage 1.0.10 1.0.12 Direct-download artifacts
2026-07-20 code 1.129.0 1.129.1 Direct-download artifacts
2026-07-20 code-server 4.128.0 4.129.0 Direct-download artifacts
2026-07-20 pev2 1.22.0 1.23.0 Noarch package
2026-07-20 k3s - 1.36.2 Upstream v1.36.2+k3s1; amd64 and arm64
2026-07-20 k3s-images - 1.36.2 Exact-match system image package for both architectures
2026-07-16 jmx-exporter - 1.6.0 New noarch package
2026-07-16 node_exporter 1.11.1 1.12.1
2026-07-16 redis_exporter 1.86.0 1.87.0
2026-07-16 etcd 3.6.13 3.7.0
2026-07-16 dblab 0.43.0 0.44.1
2026-07-16 pgstream 1.1.1 1.2.0
2026-07-16 rainfrog 0.3.19 0.3.20
2026-07-16 rustfs 1.0.0-b8 1.0.0-b9 Prerelease line
2026-07-16 agentsview 0.37.5 0.38.1
2026-07-16 claude 2.1.206 2.1.211 Downloaded through the 8118 proxy and verified
2026-07-16 codex 0.144.1 0.144.4 Release tag rust-v0.144.4
2026-07-16 stalwart 0.16.12 0.16.13
2026-07-16 npgsqlrest 3.20.0 3.21.0
2026-07-16 postgrest 14.14 14.15
2026-07-16 opencode 1.17.18 1.18.2
2026-07-16 uv 0.11.28 0.11.29
2026-07-16 vector 0.56.0 0.57.0 Direct-download artifacts
2026-07-16 pg-hardstorage 1.0.8 1.0.10 Direct-download artifacts
2026-07-16 crush 0.84.0 0.85.0 Direct-download artifacts
2026-07-16 code 1.128.0 1.129.0 Direct-download artifacts
2026-07-16 code-server 4.127.0 4.128.0 Direct-download artifacts
2026-07-16 cloudflared 2026.7.1 2026.7.2 Direct-download artifacts

Compatibility Changes and Upgrade Notes

  • Existing FERRET deployments should remove the legacy ferretdb systemd service and redeploy the protocol layer with docker.yml and app.yml. The old mongo.yml playbook, mongo_* parameters, scrape job, and dedicated dashboard are no longer provided.
  • Pigsty no longer renders /etc/default/haproxy for the HAProxy unit, although the unit can read it when present. Use only EXTRAOPTS for process arguments, not OPTIONS. Any EXTRAOPTS override must retain -S /run/haproxy-master.sock and must not include -f.
  • New module playbooks require target hosts to define the corresponding pg_cluster, redis_cluster, minio_cluster, kafka_cluster, or mysql_cluster explicitly. Custom inventories that relied on fixed group names without cluster identity variables must add those identities first.
  • The MINIO role now accepts only minio_type: silo; minio and rustfs fail during identity validation. Silo retains MinIO protocol and on-disk compatibility, but the package, binary, and systemd service names change. Back up existing object storage and validate in-place compatibility and rollback before upgrading; do not treat package replacement as a migration that has already passed acceptance.
  • Valkey remains opt-in. redis_type: valkey installs valkey-server and valkey-cli, while configuration paths, service names, monitoring jobs, and other module-facing interfaces remain under redis for compatibility.
  • Pigsty’s core REPO/CACHE roles require SOW and use sow create --pigsty to generate local repositories. Older offline bundles or local repositories without SOW 0.3.0 must first install or refresh it from the Pigsty INFRA repository. pig repo create is a separate CLI path whose fallback behavior depends on its own version.
  • MySQL mysql_databases entries accept only name, encoding, and collate, and databases are created with DEFAULT ENCRYPTION='N'. mysql_parameters cannot use loose_, skip_, disable_, or enable_ prefixes to bypass platform-owned, replication, or TLS option protection.
  • Custom RPM repositories and external automation that still reference underscore names such as node_exporter or redis_exporter must move to the hyphenated node-exporter and redis-exporter package names.
  • docker/Makefile no longer accepts DATA to redirect the cleanup target. make purge deletes repository-local ./data immediately without a countdown; preserve any required data first.
  • KAFKA and MYSQL remain pilot modules. Kafka clients must resolve and reach each broker directly rather than putting the data plane behind HAProxy, a VIP, or an L4 load balancer. MySQL currently accepts exactly one or three members.

All 14 validated offline artifacts are published on GitHub for this release, one per recommended OS version and architecture, alongside a checksums manifest and a detached PGP signature (.asc) for every file.

Checksums

e042059379bdfae8f774022b89e8d1e3  pigsty-pkg-v4.5.0.el9.aarch64.tgz
997e812a433a6b969b976fad2c023a1f  pigsty-pkg-v4.5.0.el9.x86_64.tgz
1e1045db965282d564680534bd7d72e2  pigsty-pkg-v4.5.0.el10.aarch64.tgz
9a53f1e85cbb2d4f85969a6112ae4b05  pigsty-pkg-v4.5.0.el10.x86_64.tgz
b7501783c90311176f21bdd35390c746  pigsty-pkg-v4.5.0.d12.aarch64.tgz
f3ecaa449a0bf8e0f01907f83831e74a  pigsty-pkg-v4.5.0.d12.x86_64.tgz
863165dba76b044ed8615d6743710005  pigsty-pkg-v4.5.0.d13.aarch64.tgz
d86655361ccad7aa95a345a82bb37d10  pigsty-pkg-v4.5.0.d13.x86_64.tgz
017f2d7931eb644d2d0fa2f71930134e  pigsty-pkg-v4.5.0.u26.aarch64.tgz
61451ee610134423ff08f1a69dfced33  pigsty-pkg-v4.5.0.u26.x86_64.tgz
5d9cfc52a25545b56e73e94ab5b5e175  pigsty-pkg-v4.5.0.u24.aarch64.tgz
dba0eef49899509d1524b3a1c37d0ddc  pigsty-pkg-v4.5.0.u24.x86_64.tgz
5564841c7c099489708cd1fe49ffa1b9  pigsty-pkg-v4.5.0.u22.aarch64.tgz
dc52b6cee50cf6226e23b065e5aa8395  pigsty-pkg-v4.5.0.u22.x86_64.tgz
afb5cd77903613cb945bd519e4059c76  pigsty-v4.5.0.tgz

Sources

2.2 - Pigsty v4.4.0

PG 19 beta support, 531 extensions, kernel updates, pig CLI improvements

Pigsty v4.4.0 is a maintenance release centered on PostgreSQL 18.4, PostgreSQL 19 beta readiness, 531 extensions, refreshed kernel variants, and broader platform coverage.

Released on 2026-07-10. See the GitHub release and all changes since v4.3.0.

Highlights

  • PostgreSQL 18.4 / 19 beta: PostgreSQL 18.4 is now the production default, with a minimal PostgreSQL 19 beta template for evaluation.
  • 531 extensions and refreshed kernels: The catalog adds 21 extensions and updates major PostgreSQL variants across the supported platform matrix.
  • Safer operations with Pig 1.5.1: New clone, fork, and PITR workflows arrive alongside automatic VIP discovery, Zstandard pgBackRest compression, and dedicated Patroni log collection.
  • Security, applications, and tooling: Secret handling and repository automation are hardened, with new app templates, a redesigned portal, and optional Codex support.
  • Platform validation: All 14 offline deployment tests pass across seven OS baselines on both x86_64 and aarch64.
  • Offline artifacts: The Community Edition publishes six dual-architecture offline packages for Debian 13, EL 10, and Ubuntu 24.04 on GitHub. Prebuilt packages for the other validated baselines are available with the Professional Edition.

Upgrade Notes

  • Generated pgBackRest configurations now use compress-type=zst; preserve intentional local overrides before re-rendering them. #744
  • Patroni logs now use /pg/log/patroni and job=patroni; update custom log queries and alert rules that use the old syslog selector.
  • VIP interfaces now default to auto, dnsmasq records move to /etc/dnsmasq.d/pigsty, and Pigsty manages /etc/default/haproxy; preserve explicit network overrides where needed.
  • The default etcd backend quota drops from 16 GiB to 8 GiB; check existing backend usage before applying the new configuration.
  • pig automation must use -y/--yes for destructive commands, while pig pb restore and pig pitr require one explicit recovery target. See the pig v1.5 notes.
  • Supabase analytics moves to the _supabase database and _analytics schema; existing deployments should create them before switching stacks.

Security and Operations

  • The pg-pitr wrapper adds safer target selection, timelines, dry runs, and stronger checks against unsafe recovery targets.
  • Application secrets are hidden from Ansible output, generated .env files use mode 0600, and Grafana no longer prints the administrator password.
  • The dbsu sudo policy gains controlled journal access, while the repository adds a security policy, CodeQL, Dependabot, pinned actions, and release-signing automation.

Applications and Tooling

  • Added Immich, Maybe, and JumpServer templates; refreshed Supabase, Dify, InsForge, Registry, Jupyter, Kong, Odoo, Teable, Mattermost, and related launch helpers.
  • Rebuilt the bilingual infrastructure portal and added opt-in Codex CLI support to the experimental VIBE module; Claude Code remains its default managed coding agent.
  • Removed the legacy FerretDB Compose template; the FERRET module remains available.

Bug Fixes

  • Fixed EL10 PostgreSQL/libpq provider conflicts, EPEL path handling, and PGDG minor-version repository rules. #752
  • Reused an existing /www directory during bootstrap and fixed Redis Sentinel HA password rendering. #753 #748
  • Corrected RPM naming and package groups for pg_http, pg_gzip, apache-age, and odbc_fdw. #750
  • Prevented unexpected service starts during Debian and Ubuntu package installation, and improved EL9 aarch64 Patroni package handling.
  • Fixed VirtualBox private-network routing and default NIC selection.
  • Fixed shell portability and Vector log lifecycle issues, along with PG19 io_workers, Teable HBA, and application runtime defaults.

PostgreSQL and Extension Package Changes

The release adds 21 extensions, updates the PostgreSQL 18.4 package graph, introduces the PostgreSQL 19 beta template, and refreshes major kernel variants. Versions below are verified against final repository metadata and, where bundled, the v4.4.0 artifacts; PG major ranges describe catalog and repository coverage.

PostgreSQL RPM changes · PostgreSQL DEB changes · Infrastructure package changes

Package Old Version New Version Notes
polardb-17 17.9.1.0 17.10.1.0 PG 17; RPM added
agensgraph-17 2.16.0 2.17.0 PG 17.10
openhalodb-14 1.0-beta 1.0-2 OpenHaloDB
babelfish-17 5.4.0 5.4.0 PG 17.7; rebuild
babelfish-18 - 6.0.0 PG 18.3
pgedge 17.9 / 18.3 15.18 / 16.14 / 17.10 / 18.4 PG 15/16 added; PG 17/18 updated; Spock 5.0.10
ivorysql-18 5.0 5.4 PG 18; RPM added
cloudberry 2.1.0-1 2.1.0-2 / 2.1.0-3 DEB/RPM rebuild; RPM path /usr/cloudberry
cloudberry-backup 2.1.0-1 2.1.0-2 / 2.1.0-3 backup subpackage
cloudberry-pxf 2.1.0-1 2.1.0-2 / 2.1.0-3 PXF subpackage
pg_ducklake - 1.0.0 PG 14-18
psql_bm25s - 0.4.13 BM25 retrieval; PG 17-18
mongo_fdw 5.5.3 5.5.3 new DEB packaging; existing PGDG RPM, PG 14-18
multicorn 3.2 3.2 new DEB packaging; existing PGDG RPM, PG 14-18
pg_orca - 1.0.0 PG 18 only
pg_sorted_heap - 0.14.0 PG 16-18
pg_stl - 1.0.0 PG 16-18
fsm_core - 1.1.0 PG 15-18
pg_projection - 1.0.0 PG 14-18
graph - 0.1.7 PG 14-18
jsonschema - 0.1.9 PG 14-18
pg_durable - 0.2.2 PG 14-18
pg_stat_log - 0.1 PG 18 only
pg_stat_plans - 2.1.0 PG 16-18
pg_task 1.0.0 2.1.29 PG 14-18, pcre2grep fix
pg_stat_backtrace - 1.0.0 PG 14-18; libunwind
pg_mockable - 1.1.0 PG 14-18
db2fce - 0.0.17 PG 14-18
pg_uuid_v8 - 1.0.0 PG 14-18
pg_extra_time 2.0.0 2.1.0 PG 14-18
pg_pinyin 0.0.2 0.0.4 PG 14-18
passwordpolicy - 2.0.5 PG 14-18
pgdisablelogerror - 1.0 PG 14-18
plpgsql_wrap - 1.0 PG 14-18
timescaledb 2.26.4 2.28.2 PG 15-18
documentdb 0.110 0.113 PG 15-18
citus 14.0.0-4 14.1.0 PG 16-18
pgvector 0.8.2 0.8.4 PG 14-18
orioledb 1.7-beta15 1.8-beta16 Build for PG 16, 17, 18
pg_search 0.23.1 0.24.0 PG 15-18
pg_textsearch 1.1.0 1.2.0 BM25 full-text search, PG 17-18
storage_engine 1.3.4 2.4.0 PGXN 2.x bump, PG 15-18
pg_clickhouse 0.2.0 0.3.2 PGXN bump, ClickHouse integration
provsql 1.2.3 1.10.0 PGXN bump, PG 14-18
pgclone 4.0.0 4.3.2 PGXN bump, PG 14-18
biscuit 2.2.2 2.4.0 DEB / 2.4.1 RPM PG 16-18
pgmnemo 0.7.2 0.12.1 PG 14-18
rdf_fdw 2.5.0 2.6.0 PG 14-18, libcurl compatibility patch
roaringbitmap 1.1.0 1.2.0-2 PG 14-18, llvm-lto packaging fix
plpgsql_check 2.9.0 2.9.2 PG 14-18
timescaledb_toolkit 1.22.0 1.23.0 PG 15-18, pgrx 0.18.1
wrappers 0.6.0 0.6.1 PG 14-18, pgrx 0.18.1
pgrdf 0.5.0 0.6.4 PG 14-17, pgrx 0.18.1
pg_graphql 1.5.12 1.6.1 PG 14-18, pgrx 0.18.1
pg_anon 3.0.13 3.1.1 PG 14-18, pgrx 0.18.1
pg_kazsearch 2.0.0 2.2.0 PG 16-18, pgrx 0.18.1
pg_session_jwt 0.4.0 0.5.0 PG 14-18, pgrx 0.18.1
pg_tzf 0.2.4 0.3.0 PG 14-18, pgrx 0.18.1
pg_vectorize 0.26.1 0.26.2 PG 14-18, pgrx 0.18.1
pglinter 1.1.2 2.0.0 PG 14-18, pgrx 0.18.1
pgmqtt 0.1.0 0.3.0 PG 14-18, pgrx 0.18.1
etcd_fdw 0.0.0 0.0.1 PG 14-18, pgrx 0.18.1
pg_http 1.7.0 1.7.1 PG 14-18, RPM rename to pgsql_http_$v
pg_gzip 1.0.0 1.1.0 PG 14-18, RPM rename to pgsql_gzip_$v
age 1.7.0 1.7.0 PG 17-18, RPM rename to age_$v
pg_trickle 0.40.0 0.81.0 PG 18 only
re2 0.1.1 0.4.0 PG 16-18
pg_background 1.9.2 2.0.2 DEB / 2.0 RPM PG 14-18
firebird_fdw 1.4.1 1.4.2 PG 14-18
pg_net 0.20.2 0.20.3 DEB + EL10 RPM; EL8/9 RPM stays on 0.9.2
pg_dirtyread 2.7 2.8 PG 14-18
pg_stat_ch 0.3.6 0.3.6 PG 16-18, rebuild
pggraph 0.1.5 0.1.7 PG 14-18
pgsql_tweaks 1.0.2 1.0.5 PG 14-18; PGDG RPM also carries 1.0.3
pgfincore 1.3.1 1.4.0 PG 14-18
toastinfo 1.5 1.7 PG 14-18
pg_ivm 1.14 1.15 DEB / 1.14 RPM PG 14-18
timeseries 0.2.0 0.2.1 PG 14-18

Infrastructure Package Changes

Package Old Version New Version Notes
pig 1.4.1 1.5.1
pg_exporter 1.2.2 1.3.0
pgschema 1.9.0 1.12.0
pgstream 1.0.1 1.1.1
pg-hardstorage - 1.0.8
codex 0.125.0 0.144.1
claude 2.1.123 2.1.206
opencode 1.14.30 1.17.18
agentsview 0.26.0 0.37.5
genai-toolbox 1.1.0 1.6.0 packaged as mcp-toolbox
crush 0.64.0 0.84.0
code 1.118.1 1.128.0
code-server 4.117.0 4.127.0
victoria-metrics 1.142.0 1.147.0
victoria-metrics-cluster 1.142.0 1.147.0
vmutils 1.142.0 1.147.0
victoria-logs 1.50.0 1.51.0
vlagent 1.50.0 1.51.0
vlogscli 1.50.0 1.51.0
victoria-traces 0.8.2 0.9.4
prometheus 3.11.3 3.13.1
alertmanager 0.32.1 0.33.1
pushgateway 1.11.2 1.11.3
node_exporter 1.11.1 1.11.1 tarball cache; version metadata fix
redis_exporter 1.82.0 1.86.0
mongodb_exporter 0.50.0 0.51.0
grafana 13.0.1 13.1.0
grafana-victorialogs-ds 0.26.3 0.29.0
grafana-victoriametrics-ds 0.24.0 0.25.2
vector 0.55.0 0.56.0
minio 20260417000000 20260618000000
seaweedfs 4.22 4.39
rustfs 1.0.0-b1 1.0.0-b8 prerelease line
duckdb 1.5.2 1.5.4
kafka 4.2.0 4.3.1
etcd 3.6.10 3.6.13
restic 0.18.1 0.19.1
juicefs 1.3.1 1.4.0
tigerbeetle 0.17.2 0.17.9
tigerfs 0.6.0 0.7.0
caddy 2.11.2 2.11.4
cloudflared 2026.2.0 2026.7.1
headscale 0.28.0 0.29.2
v2ray 5.48.0 5.51.2
nodejs 24.15.0 24.18.0
golang 1.26.2 1.26.5
hugo 0.161.1 0.164.0
uv 0.11.8 0.11.28
rclone 1.73.5 1.74.4
asciinema 3.2.0 3.2.1
stalwart 0.16.2 0.16.12
maddy 0.9.3 0.9.5
dblab 0.38.0 0.43.0
npgsqlrest 3.12.0 3.20.0
postgrest 14.10 14.14
sabiql 1.11.1 1.14.0
pev2 1.21.0 1.22.0
rainfrog 0.3.18 0.3.19

The MD5 list below covers all 14 validated artifacts. Six Community Edition artifacts are published on GitHub, while the remaining eight are delivered with the Professional Edition. GitHub records SHA-256 digests for the uploaded Community Edition artifacts.

Checksums

7de8b932412f1863fd9c033a7be355d7  pigsty-pkg-v4.4.0.d12.aarch64.tgz
2e5006a8d35eb1c087dc0ed11cf14d14  pigsty-pkg-v4.4.0.d12.x86_64.tgz
955308c00d3890f6e82a6a83bc624760  pigsty-pkg-v4.4.0.d13.aarch64.tgz
350f31c66de0aafff3bd91c2c9d740a0  pigsty-pkg-v4.4.0.d13.x86_64.tgz
0b4817a8edbab0bdf37ecee730fb0412  pigsty-pkg-v4.4.0.el10.aarch64.tgz
4584a61e4456749e68d86e4817cfe526  pigsty-pkg-v4.4.0.el10.x86_64.tgz
21621daf510a532829c36464d48f9198  pigsty-pkg-v4.4.0.el9.aarch64.tgz
504afd5030e2738a25e1b4c570d0e654  pigsty-pkg-v4.4.0.el9.x86_64.tgz
461c999424dee587ca33fe1a63df40d7  pigsty-pkg-v4.4.0.u22.aarch64.tgz
20ccc5ab8f9f4648b05bcd304f9fb5fc  pigsty-pkg-v4.4.0.u22.x86_64.tgz
d092c48ee55116ed5e2c99a3d909ccdd  pigsty-pkg-v4.4.0.u24.aarch64.tgz
24fa5399d8421305961fcaf91325b382  pigsty-pkg-v4.4.0.u24.x86_64.tgz
36f69b699d8b3041d35384970e157631  pigsty-pkg-v4.4.0.u26.aarch64.tgz
330047d117b20f04317dce506edd5d9a  pigsty-pkg-v4.4.0.u26.x86_64.tgz
3077203c0c656ec99abc32b227f6566b  pigsty-v4.4.0.tgz

Sources

2.3 - Pigsty v4.3.0

510 extensions, batch Infra / PGSQL / kernel package updates, Ubuntu 26 support

Highlights

  • Added about 50 PostgreSQL extensions, bringing the total available extension count to 510.
  • Added Ubuntu 26.04 x86_64/arm64 support, deprecated Ubuntu 20.04 support, and refreshed minor OS variants to Debian 13.4 / Ubuntu 24.04.4.
  • Kernel updates: Supabase is updated to the latest version, pgEdge to PG 18, and PolarDB to PG 17.
  • Grafana is updated to 13.0.1, and MinIO now uses the pgsty branch with CVE fixes.
  • Vagrant templates now consistently use cloud-image series images.

Bug Fixes

  • Relaxed PostgreSQL username validation to allow @.- in usernames.
  • Fixed IPv6 nameserver parsing so DNS configuration is not limited to legacy IPv4 DNS server extraction.
  • Changed the VictoriaTraces Grafana datasource path to /select/jaeger.
  • Made Vagrant disk probing more robust and added bin/el-fix, a guest-network fix script for EL Vagrant images.

PostgreSQL and Extension Package Changes

Package Old Version New Version Notes
block_copy_command - 0.1.5 New; PG 14-18; Rust/pgrx 0.17.0
cloudberry 2.0.0 2.1.0 Kernel package group; RPM release 2 fixes initdb errno issue
cloudberry-backup - 2.1.0 New Cloudberry backup tool package
cloudberry-pxf - 2.1.0 New Cloudberry PXF package
credcheck 4.6 4.7 Upgrade; PG 14-18; PGDG
datasketches - 1.7.0 New; PG 14-18
ddl_historization 0.0.7 0.2 Upgrade
documentdb 0.109 0.110 Upgraded to upstream version; PG 15-18
external_file - 1.2 New; PG 14-18
logical_ddl - 0.1.0 New; PG 14-18
nominatim_fdw 1.1.0 1.2 Upgrade
onesparse - 1.0.0 New; PG 18 only
orioledb beta15 1.7 beta15 1.7 Paired with OriolePG 17.18
oriolepg 17.16 17.18 Kernel patch set update
parray_gin - 1.5.0 Added, then upgraded; PG 14-18
pg_accumulator - 1.1.3 New; PG 14-18
pg_anon 3.0.1 3.0.13 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_background 1.8 1.9.2 DEB only
pg_bikram_sambat - 0.1.0 New; Bikram Sambat date type and AD/BS conversion functions
pg_byteamagic - 0.2.4 New; PG 14-18
pg_cardano 1.1.1 1.2.0 Upgrade; Rust/pgrx 0.17.0
pg_clickhouse 0.1.5 0.2.0 Upgrade
pg_datasentinel - 1.0 New; PG 15-18
pg_dbms_job 1.5 2.0 Upgrade; PG 14-18; PGDG
pg_dispatch - 0.1.5 New; PG 14-18
pg_failover_slots 1.2.0 1.2.1 Upgrade
pg_fsql - 1.1.0 New; PG 14-18
pg_incremental 1.4.1 1.5.0 Upgrade
pg_isok - 1.4.1 New; PG 14-18
pg_ivm 1.13 1.14 Upgrade; PG 14-18
pg_kazsearch - 2.0.0 New; PG 16-18; Rust/pgrx 0.17.0
pg_liquid - 0.1.7 New; PG 14-18
pg_pathcheck - 0.9.1 New; PG 17-18; requires shared_preload_libraries
pg_query_rewrite - 0.0.5 New; PG 14-18
pg_regresql - 2.0.0 New; PG 14-18
pg_rrf - 0.0.3 New; PG 14-17; Rust/pgrx 0.16.1 -> 0.17.0
pg_savior 0.0.1 0.1.0 Upgrade; high-risk DDL/DML guard hook; requires preload or LOAD
pg_search 0.22.2 0.23.1 Upgrade; PG 15-18; pgrx 0.18.0
pg_slug_gen - 1.0.0 New; PG 15-18
pg_stat_ch - 0.3.6 Added, then upgraded; PG 16-18; EL8 break
pg_store_plans 1.9 1.10 Upgrade
pg_strict 1.0.3 1.0.5 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_text_semver - 1.2.1 New; PG 14-18
pg_textsearch 0.5.0 1.1.0 Upgrade; PG 17-18; requires shared_preload_libraries
pg_trickle 0.16.0 0.40.0 Upgrade; PG 18 only; pgrx 0.18.0
pg_tzf 0.2.3 0.2.4 Upgrade; Rust/pgrx 0.17.0
pg_vectorize 0.26.0 0.26.1 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pg_variables - 1.2.5 New; PG 14-18
pg_when - 0.1.9 New; PG 14-18; Rust/pgrx 0.17.0
pgxicor 0.1.0 0.1.1 Upgrade
pgcalendar - 1.1.0 New; PG 14-18
pgclone - 4.0.0 Added, then upgraded; PG 14-18
pgelog - 1.0.2 New; PG 14-18
pglinter 1.1.1 1.1.2 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0
pglock - 1.0.0 New; PG 14-18
pgmq 1.11.0 1.11.1 Upgrade; PG 14-18
pgmqtt - 0.1.0 New; PG 14-18; Rust/pgrx 0.16.1 -> 0.17.0
pgproto - 0.5.0 Added, then upgraded; native Protobuf support
pghydro - 6.6 New; PG 14-18
pgx_ulid 0.2.2 0.2.3 Upgrade; Rust/pgrx 0.17.0
plv8 3.2.4 3.2.4-2 RPM only; EL10 build fix
PolarDB 15.15 17.9.1.0 PG 15 -> 17
postgresbson - 2.0.2 New; PG 14-18
postgis 3.6.2 3.6.3 DEB only
prefix 1.2.10 1.2.11 Upgrade; PG 14-18; PGDG
provsql - 1.2.3 New; PG 14-18
rdf_fdw - 2.5.0 Added, then upgraded; PG 14-18
rdkit - 202503.6 New; PG 14-18
re2 - 0.1.1 New; PG 16-18
storage_engine - 1.3.4 Added, then upgraded; columnar and row-compression table access methods
supautils 3.1.0 3.2.1 Upgrade
system_stats 3.2 4.0 Upgrade
timescaledb 2.25.2 2.26.4 Upgrade; TSL minor update
ulak - 0.0.2 New; PG 14-18
wrappers 0.5.7 0.6.0 Upgrade; Rust/pgrx 0.16.1 -> 0.17.0

Infrastructure Package Updates

Package Old Version New Version Notes
alertmanager 0.31.1 0.32.1
agentsview 0.15.0 0.26.0
claude 2.1.81 2.1.123 Downloaded through the 8118 proxy and verified
code 1.112.0 1.118.1 Direct-link metadata update
code-server 4.112.0 4.117.0 Direct-link metadata update
codex 0.116.0 0.125.0 Moved from prerelease track to stable, then upgraded further
crush 0.51.2 0.64.0 Direct-link metadata update
dblab 0.34.3 0.38.0
duckdb 1.5.0 1.5.2
etcd 3.6.9 3.6.10 Unified package version
garage 2.2.0 2.3.0
genai-toolbox 0.27.0 1.1.0 Upstream renamed to mcp-toolbox
golang 1.26.1 1.26.2
grafana 12.4.1 13.0.1 Metadata refreshed after major upgrade
grafana-infinity-ds 3.7.4 3.8.0
grafana-plugins 12.3.0 13.0.0 Noarch plugin bundle, manually collected
grafana-victoriametrics-ds 0.23.1 0.24.0
hugo 0.158.0 0.161.1
maddy 0.8.2 0.9.3
mcli 20260321000000 20260417000000 pgsty branch, CVE fixed
minio 20260325000000 20260417000000 pgsty branch, CVE fixed
mongodb_exporter 0.49.0 0.50.0
node_exporter 1.10.2 1.11.1
nodejs 24.14.0 24.15.0 Stays on the 24.x policy line
npgsqlrest 3.11.1 3.12.0
opencode 1.2.27 1.14.30 Switched to versioned cache and rebuilt
pg_exporter 1.2.1 1.2.2 Direct-link metadata update
pgflo 0.0.15 - Removed
pgschema 1.7.4 1.9.0
pig 1.3.2 1.4.1 Metadata only
postgrest 14.7 14.10
prometheus 3.10.0 3.11.3
rainfrog 0.3.17 0.3.18
rclone 1.73.2 1.73.5 Direct-link metadata update
rustfs 1.0.0-alpha.89 1.0.0-b1 Prerelease line
sabiql 1.8.2 1.11.1
seaweedfs 4.17 4.22
sqlcmd 1.9.0 1.10.0
stalwart 0.15.5 0.16.2
tigerbeetle 0.16.77 0.17.2
tigerfs 0.5.0 0.6.0
timescaledb-tools 0.18.2 0.19.0 Rebuilt timescaledb-tune
uv 0.10.12 0.11.8
victoria-logs 1.48.0 1.50.0 Main package
victoria-metrics 1.138.0 1.142.0
victoria-metrics-cluster 1.138.0 1.142.0 VictoriaMetrics companion component
victoria-traces 0.8.0 0.8.2
vip-manager 4.0.0 4.2.0 Direct-link metadata update
vlagent 1.48.0 1.50.0 VictoriaLogs companion component
vlogscli 1.48.0 1.50.0 VictoriaLogs companion component
vmutils 1.138.0 1.142.0 VictoriaMetrics companion component
vector 0.54.0 0.55.0 Direct-link metadata update
v2ray 5.47.0 5.48.0
xray 26.2.6 26.3.27

Checksums

58a914fce7bc521b65e167f66e7961a3  pigsty-v4.3.0.tgz
9ce070efb0420057a83c632b2856d1b3  pigsty-pkg-v4.3.0.d12.aarch64.tgz
bf21c36d3aff94a1a6353130597ffa85  pigsty-pkg-v4.3.0.d12.x86_64.tgz
81b4790c4e5567cee9d1beadd06e48e6  pigsty-pkg-v4.3.0.d13.aarch64.tgz
06baab9341ab683eaeea2e066b28a0f4  pigsty-pkg-v4.3.0.d13.x86_64.tgz
fb4bf751df5e09f547c49b8ab7cac9a0  pigsty-pkg-v4.3.0.el10.aarch64.tgz
a3e752c8148122d1eaea74a6d8d8df0d  pigsty-pkg-v4.3.0.el10.x86_64.tgz
cb2a9af36615513e66fd5ac3e9f4d797  pigsty-pkg-v4.3.0.el9.aarch64.tgz
e24641a879dec7a8eea74dab42f85920  pigsty-pkg-v4.3.0.el9.x86_64.tgz
6b675fd8d9e039193481f0838aa4b92c  pigsty-pkg-v4.3.0.u22.aarch64.tgz
c0e344ccb9d190a619591e5d46116424  pigsty-pkg-v4.3.0.u22.x86_64.tgz
3e0ec9534cf595201ec79eb1fc6549d8  pigsty-pkg-v4.3.0.u24.aarch64.tgz
0a3d19513eca9615bdd66a4b2bf66f1d  pigsty-pkg-v4.3.0.u24.x86_64.tgz
683a10ff8fd993358d6befa9f4e02913  pigsty-pkg-v4.3.0.u26.aarch64.tgz
fd1ea5cd5554bfe91fadd51ad80860e3  pigsty-pkg-v4.3.0.u26.x86_64.tgz

Sources

2.4 - Pigsty v4.2.2

Insforge template, pdu, pgdog, tigerfs, ivorysql 5.3

Highlights

  • Insforge 2.0.1 self-hosted template
  • Batch infra package updates, MinIO/MCLI updated to 20260321
  • New infra packages: tigerfs, pgstream, sql-studio, rainfog, crush
  • New PG tools: data recovery pdu, connection pooler pgdog
  • Update PG extensions: pg_search, pgsentinel, pg_track_optimizer, pgcollection, pg_ttl_index, pg_clickhouse
  • Update PG Kernel: ivorysql 5.1 -> 5.3

PostgreSQL Package Updates

Name Old Ver New Ver Note
pg_search 0.21.12 0.22.2
pgsentinel 1.4.0 1.4.1 rpm only
pg_track_optimizer 0.9.1 0.9.2
pgcollection 1.0.0 2.0.0
pg_ttl_index 2.0.0 3.0.0
pg_clickhouse 0.1.4 0.1.5
pdu 3.0.25.12 new
pgdog 0.1.32 new

Infrastructure Package Updates

Name Old Ver New Ver Note
grafana 12.4.0 12.4.1
pgbackrest_exporter 0.22.0 0.23.0
redis_exporter 1.81.0 1.82.0
victoria-logs 1.47.0 1.48.0
vlagent 1.47.0 1.48.0
vlogscli 1.47.0 1.48.0
victoria-traces 0.7.1 0.8.0
duckdb 1.4.4 1.5.0
pg_timetable 6.2.0 6.3.0
pgschema 1.4.2 1.7.4
pgstream - 1.0.1 new
tigerbeetle 0.16.75 0.16.77
grafana-victorialogs-ds 0.26.2 0.26.3
grafana-infinity-ds 3.7.3 3.7.4
caddy 2.11.1 2.11.2
npgsqlrest 3.10.0 3.11.1
postgrest 14.5 14.7
opencode 1.2.17 1.2.27
pev2 1.20.2 1.21.0
golang 1.26.0 1.26.1
vector 0.53.0 0.54.0
rclone 1.73.1 1.73.2
code-server 4.109.5 4.112.0
code 1.109.4 1.112.0
seaweedfs 4.15 4.17
uv 0.10.8 0.10.12
codex 0.110.0 0.116.0
v2ray 5.44.1 5.47.0
sabiql 1.6.2 1.8.2
sql-studio - 0.1.51 new
rainfrog - 0.3.17 new
agentsview 0.10.0 0.15.0
crush - 0.51.2 new
tigerfs - 0.5.0 new
victoria-metrics 1.137.0 1.138.0
victoria-metrics-cluster 1.137.0 1.138.0
vmutils 1.137.0 1.138.0
hugo 0.157.0 0.158.0
rustfs 1.0.0-alpha.85 1.0.0-alpha.89
mysqld_exporter 0.18.0 0.19.0
pg_exporter 1.2.0 1.2.1
pig 1.3.1 1.3.2
minio 20260214 20260321
mcli 20260213 20260321
claude 2.1.68 2.1.81
ivroysql 5.1 5.3

Checksums

0d9f907ff626203578c687d1418b38ba  pigsty-pkg-v4.2.2.d12.aarch64.tgz
4129baf773c3005f4d697cf452f927a0  pigsty-pkg-v4.2.2.d12.x86_64.tgz
40d5a0d9c2a97615bf0421bae42458ae  pigsty-pkg-v4.2.2.d13.aarch64.tgz
cf91113a2296ad11fff79802ac9b1483  pigsty-pkg-v4.2.2.d13.x86_64.tgz
dbccfeb3978ffb928bd0b501c3c0d42d  pigsty-pkg-v4.2.2.el10.aarch64.tgz
8c848a4e3fa93c2455285fbcad5ddd78  pigsty-pkg-v4.2.2.el10.x86_64.tgz
7c15c9a36f7d2dd740019c20e8c75a4b  pigsty-pkg-v4.2.2.el9.aarch64.tgz
7d6e9e529236a0db2382f42660790ed9  pigsty-pkg-v4.2.2.el9.x86_64.tgz
8f64bb14885ce330603172b186062671  pigsty-pkg-v4.2.2.u22.aarch64.tgz
16d4c36c9e1ff848848c34a257b1025c  pigsty-pkg-v4.2.2.u22.x86_64.tgz
401230741af5b04f163ffc8e688315ab  pigsty-pkg-v4.2.2.u24.aarch64.tgz
5312aa0841694fc560778b9377a32c89  pigsty-pkg-v4.2.2.u24.x86_64.tgz
cabeeb898b56b26c0855f33d5e60411a  pigsty-v4.2.2.tgz

Sources

2.5 - Pigsty v4.2.1

Maintenance release: 3 new extensions, drop PG13, bug fixes

A maintenance release that adds 3 new extensions.

Major Changes

  • New Extensions: pg_eviltransform is added to the GIS package group, pg_pinyin to the FTS group, and pg_qos to the admin group — all for PG 14–18.
  • PG13 Removed: All pgdg13, pgdg13-nonfree repo entries and PG13 package aliases (pg13-*) are removed from every platform variant (EL7/8/9/10, Debian 12/13, Ubuntu 22/24/26, both x86_64 and aarch64).
  • Config templates (fat.yml, pro.yml, dev.yml, el.yml, debian.yml) no longer reference PG13 packages or repos. Extension version comments are updated to reflect PG 14–18 coverage only.
  • Percona Repo: Origin URL updated from ppg-18.1 to ppg-18.3 to track the latest Percona PostgreSQL distribution.
  • Nginx Repo: Module tag for the Nginx upstream APT repo corrected from infra to nginx on Debian/Ubuntu platforms.
  • UV Venv Fix: roles/node/tasks/pkg.yml now checks for an existing virtualenv before running uv venv, preventing redundant re-creation and potential errors on re-provisioning.
  • Docker Image: less is added to the Pigsty Docker image base packages.
  • Demo Config: Default firewall rules in el.yml and debian.yml demo configs now include port 5432 for direct PostgreSQL access.

Compatibility Notes

PostgreSQL 13 reached its end of life on 2025-11-13. The PGDG YUM repository has archived and removed the pg13 / pg12 directories. If you install Pigsty on EL systems (even without using PG 13), repo access failures may cause installation or update errors.

You can either upgrade directly to Pigsty v4.2.1, or manually edit the repo_upstream_default variable in your corresponding OS file under roles/node_id/vars/ and remove the pg13 repo line.

Additionally, EL8 remains in the Pigsty compatible OS list, but starting from this release, offline packages for EL8 will no longer be published.

No other breaking API or configuration changes in this release.

7 commits, 84 files changed, +4,925 / -5,351 lines (v4.2.0..v4.2.1, 2026-03-04 ~ 2026-03-06)

PostgreSQL Package Updates

Package Old Version New Version Notes
timescaledb 2.25.1 2.25.2
vchord 1.1.0 1.1.1 Added clang build dependency, bug fixes
vchord_bm25 0.3.0-1 0.3.0-2 Fix the CI version injection issue
aggs_for_vecs 1.4.0 1.4.1
pg_search 0.21.9 0.21.12
pg_pinyin - 0.0.2 New extension
pg_eviltransform - 0.0.2 New extension
pg_qos - 1.0.0 New extension, QoS resource governance

Infrastructure Package Updates

Name Old Version New Version Notes
asciinema 3.1.0 3.2.0
grafana-infinity-ds 3.7.2 3.7.3
victoria-metrics 1.136.0 1.137.0
victoria-metrics-cluster 1.136.0 1.137.0
vmutils 1.136.0 1.137.0
hugo 0.155.3 0.157.0
opencode 1.2.15 1.2.17
rustfs 1.0.0-alpha.83 1.0.0-alpha.85
seaweedfs 4.13 4.15
tigerbeetle 0.16.74 0.16.75
uv 0.10.4 0.10.8
codex 0.105.0 0.110.0
claude 2.1.59 2.1.68
xray - 26.2.6 New
gost - 2.12.0 New
sabiql - 1.6.2 New
agentsview - 0.10.0 New

Checksums

262b7671424a38b208872582fe835ef8  pigsty-v4.2.1.tgz
62edcca1d1e572a247be018e1c26eda8  pigsty-pkg-v4.2.1.d12.aarch64.tgz
1d55367e2fd9106e6f18b7ee112be736  pigsty-pkg-v4.2.1.d12.x86_64.tgz
f122b1e5ba8a7ae8e3dc6e6dd53eba65  pigsty-pkg-v4.2.1.d13.aarch64.tgz
617a76bfc8df8766e78abf24339152eb  pigsty-pkg-v4.2.1.d13.x86_64.tgz
908509b350403ad1a4a27a88795fee06  pigsty-pkg-v4.2.1.el10.aarch64.tgz
70cb4afd90ed7aea6ab43a264f8eb4a8  pigsty-pkg-v4.2.1.el10.x86_64.tgz
98fbd67334f5c674b12e6af81ef76923  pigsty-pkg-v4.2.1.el9.aarch64.tgz
687fa741ccd9dcf611a2aa964bcf1de8  pigsty-pkg-v4.2.1.el9.x86_64.tgz
a2a30f4b1146b3e79be91d5be57615b6  pigsty-pkg-v4.2.1.u22.aarch64.tgz
7a1f571bd8526106775c175ba728eee1  pigsty-pkg-v4.2.1.u22.x86_64.tgz
a5574071bac1955798265f71ad73c3d4  pigsty-pkg-v4.2.1.u24.aarch64.tgz
59a7632c650a3c034f1fe6cd589d7ab5  pigsty-pkg-v4.2.1.u24.x86_64.tgz

Sources

2.6 - Pigsty v4.2.0

Routine minor release with six PG kernel updates

Highlights

  • Aligned with PostgreSQL out-of-band minor updates: 18.3, 17.9, 16.13, 15.17, 14.22.
  • Total PostgreSQL extension coverage reaches 461 packages.
  • Kernel updates across Babelfish, AgensGraph, pgEdge, OriolePG, OpenHalo, and Cloudberry.
  • Babelfish template now uses a Pigsty-maintained PG17-compatible build, with no WiltonDB repo dependency.
  • Supabase images and self-hosted templates are refreshed to the latest stack, using Pigsty-maintained pgsty/minio.

Major Changes

  • mssql now defaults to Babelfish PG17 (pg_version: 17, pg_packages: [babelfish, pgsql-common, sqlcmd]) and no longer requires an extra mssql repo.
  • Kernel install paths are normalized in pg_home_map: mssql -> /usr/babelfish-$v/, gpsql -> /usr/local/cloudberry.
  • package_map adds a dedicated cloudberry mapping and fixes babelfish* aliases to versioned RPM/DEB package names.
  • Redis data root default changes from /data to /data/redis; deployment blocks legacy defaults, while redis_remove keeps backward-compatible cleanup.
  • configure now supports absolute -o output paths with auto-created parent directories, tri-state region detection (CN/global/offline fallback), and a fix for behind_gfw() hangs.
  • Debian/Ubuntu default repo URL mappings (updates/backports/security) and China mirror components are corrected to prevent bootstrap package failures.
  • Supabase stack is updated (including PostgREST 14.5 and Vector 0.53.0) and now includes missing S3 protocol credential variables.
  • Rich/Sample templates explicitly define dbuser_meta defaults; node.sh systemd completion is simplified.
  • pgbackrest stanza initialization now retries (2 attempts, 5-second interval) to reduce lock contention with archive-push.
  • Vibe template now ships @anthropic-ai/claude-code, @openai/codex, and happy-coder, and includes age in the default example.

PG Software Updates

  • PostgreSQL 18.3, 17.9, 16.13, 15.17, 14.22
  • RPM Changelog 2026-02-27
  • DEB Changelog 2026-02-27
  • Core upgrades: timescaledb 2.25.0 -> 2.25.1, citus 14.0.0-3 -> 14.0.0-4, pg_search -> 0.21.9
  • New/rebuilt: pgedge 17.9, spock 5.0.5, lolor 1.2.2, snowflake 2.4, babelfish 5.5.0, cloudberry 2.0.0
  • Kernel-side updates: oriolepg 17.11 -> 17.16, orioledb beta12 -> beta14, openhalo 14.10 -> 1.0(14.18)
Package Old Version New Version Notes
timescaledb 2.25.0 2.25.1
citus 14.0.0-3 14.0.0-4 Rebuilt from the latest official release
age 1.7.0 1.7.0 Added PG 17 support for version 1.7.0
pgmq 1.10.0 1.10.1 Package currently unavailable
pg_search 0.21.7 / 0.21.6 0.21.9 Previous RPM/DEB versions differ
oriolepg 17.11 17.16 OriolePG kernel update
orioledb beta12 beta14 Matches OriolePG 17.16
openhalo 14.10 1.0 Updated and renamed, based on 14.18
pgedge - 17.9 New multi-master edge-distributed kernel
spock - 5.0.5 New core pgEdge extension
lolor - 1.2.2 New core pgEdge extension
snowflake - 2.4 New core pgEdge extension
babelfishpg - 5.5.0 New BabelfishPG package group
babelfish - 5.5.0 New Babelfish compatibility package
antlr4-runtime413 - 4.13 New runtime dependency for Babelfish
cloudberry - 2.0.0 RPM build only
pg_background - 1.8 DEB build only

Infrastructure Software Updates

Name Old Version New Version
grafana 12.3.2 12.4.0
prometheus 3.9.1 3.10.0
mongodb_exporter 0.47.2 0.49.0
victoria-metrics 1.135.0 1.136.0
victoria-metrics-cluster 1.135.0 1.136.0
vmutils 1.135.0 1.136.0
victoria-logs 1.45.0 1.47.0
vlagent 1.45.0 1.47.0
vlogscli 1.45.0 1.47.0
loki 3.6.5 3.6.7
promtail 3.6.5 3.6.7
logcli 3.6.5 3.6.7
grafana-victorialogs-ds 0.24.1 0.26.2
grafana-victoriametrics-ds 0.21.0 0.23.1
grafana-infinity-ds 3.7.0 3.7.2
redis_exporter 1.80.2 1.81.0
etcd 3.6.7 3.6.8
dblab 0.34.2 0.34.3
tigerbeetle 0.16.72 0.16.74
seaweedfs 4.09 4.13
rustfs 1.0.0-alpha.82 1.0.0-alpha.83
uv 0.10.0 0.10.4
kafka 4.1.1 4.2.0
npgsqlrest 3.7.0 3.10.0
postgrest 14.4 14.5
caddy 2.10.2 2.11.1
rclone 1.73.0 1.73.1
pev2 1.20.1 1.20.2
genai-toolbox 0.25.0 0.27.0
opencode 1.1.59 1.2.15
claude 2.1.37 2.1.59
codex 0.104.0 0.105.0
code 1.109.2 1.109.4
code-server 4.108.2 4.109.2
nodejs 24.13.1 24.14.0
pig 1.1.2 1.3.0
stalwart - 0.15.5
maddy - 0.8.2

API Changes

  • pg_mode now includes agens and pgedge.
  • mssql defaults are updated to pg_version: 17 and pg_packages: [babelfish, pgsql-common, sqlcmd].
  • Kernel/package alias mappings are updated in pg_home_map and package_map (Babelfish, OpenHalo, IvorySQL, Cloudberry, pgEdge family).
  • redis_fs_main now defaults to /data/redis, with deployment guardrails and backward-compatible cleanup behavior.
  • configure output path handling and region detection logic are updated, with offline fallback warnings and unified SSH probe timeouts.
  • grafana.ini.j2 is updated for Grafana 12.4 config changes and deprecations.

Compatibility Notes

  • If existing Redis configs still use redis_fs_main: /data, migrate to /data/redis before deployment.
  • Grafana 12.4 changes data link merge behavior. This release moves key links into field overrides; review custom dashboards accordingly.

26 commits, 122 files changed, +2,116 / -2,215 lines (v4.1.0..v4.2.0, 2026-02-15 ~ 2026-02-28)

Checksums

24a90427a7e7351ca1a43a7d53289970  pigsty-v4.2.0.tgz
d980edf5eeb0419d4f1aa7feb0100e14  pigsty-pkg-v4.2.0.d12.aarch64.tgz
24bc237d841457fbdcc899e1d0a3f87e  pigsty-pkg-v4.2.0.d12.x86_64.tgz
e395b38685e2ecbe9c3a2850876d9b7b  pigsty-pkg-v4.2.0.d13.aarch64.tgz
c5c8776f9bead9f29528b26058801f83  pigsty-pkg-v4.2.0.d13.x86_64.tgz
28ea40434bd06135fc8adc0df1c8407d  pigsty-pkg-v4.2.0.el10.aarch64.tgz
58ad715ac20dc1717d1687daecfcf625  pigsty-pkg-v4.2.0.el10.x86_64.tgz
008f955439ea311581dd0ebcf5b8bd34  pigsty-pkg-v4.2.0.el8.aarch64.tgz
2acfd127a517b09f07540f808fe9547a  pigsty-pkg-v4.2.0.el8.x86_64.tgz
58e62a92f35291a40e3f05839a1b6bc4  pigsty-pkg-v4.2.0.el9.aarch64.tgz
d311bfdf5d5f60df5fe6cb3d4ced4f9c  pigsty-pkg-v4.2.0.el9.x86_64.tgz
c98972fe9226657ac1faa7b72a22498b  pigsty-pkg-v4.2.0.u22.aarch64.tgz
44a174ee9ba030ac1ea386cf0b85f6e7  pigsty-pkg-v4.2.0.u22.x86_64.tgz
143e404f4681c7d0bbd78ef7982cd652  pigsty-pkg-v4.2.0.u24.aarch64.tgz
00dfa86f477f3adff984906211ab3190  pigsty-pkg-v4.2.0.u24.x86_64.tgz

Sources

2.7 - Pigsty v4.1.0

Major/minor upgrade support, Agent-Native CLI, stricter default firewall policy
curl https://pigsty.io/get | bash -s v4.1.0

72 commits, 252 files changed, +5,744 / -5,015 lines (v4.0.0..v4.1.0, 2026-02-02 ~ 2026-02-13)

Highlights

  • PostgreSQL minor update: 18.2, 17.8, 16.12, 15.16, 14.21.
  • Default EL minors updated to 9.7 / 10.1, Debian minors updated to 12.13 / 13.3.
  • Added 7 new extensions, bringing total support to 451 extensions.
  • pig moved from a traditional script interface to an Agent-Native CLI (1.0.0 -> 1.1.0), with explicit context and JSON/YAML output.
  • pig now provides unified major/minor upgrade workflows for PostgreSQL and OS lifecycle updates.
  • pg_exporter upgraded to v1.2.0 (1.1.2 -> 1.2.0), with PG17/18 metric pipeline and unit fixes.
  • Default firewall security policy updated: node_firewall_mode now defaults to zone, and node_firewall_public_port default changed from [22,80,443,5432] to [22,80,443].
  • Focused PGSQL/PGCAT Grafana usability fixes: dynamic datasource $dsn, schema-level drilldown, age metrics, link mapping consistency.
  • Added one-click Mattermost application template, including database/storage/portal and optional PGFS/JuiceFS options.
  • Refactored infra-rm uninstall flow with segmented deregister cleanup for Victoria targets, Grafana datasources, and Vector logs.
  • Optimized default PostgreSQL autovacuum thresholds to reduce excessive vacuum/analyze on small tables.
  • Fixed FD limit chain: added fs.nr_open=8M and unified LimitNOFILE=8M to avoid startup failures from systemd/setrlimit.
  • Updated VIBE defaults: Jupyter disabled by default; Claude Code managed via npm package.

Version Updates

  • Pigsty version: v4.0.0 -> v4.1.0
  • pig CLI: 1.0.0 -> 1.1.0 (Agent-Native + major/minor upgrade support)
  • pg_exporter: 1.1.2 -> 1.2.0
  • Default EL minors: 9.6/10.0 -> 9.7/10.1
  • Default Debian minors: 12.12/13.1 -> 12.13/13.3

Extension Updates

  • RPM Changelog 2026-02-12
  • DEB Changelog 2026-02-12
  • timescaledb 2.24.0 -> 2.25.0
  • pg_search 0.21.4 -> 0.21.7
  • pgmq 1.9.0 -> 1.10.0
  • pg_textsearch 0.4.0 -> 0.5.0
  • pljs 1.0.4 -> 1.0.5
  • pg_track_optimizer 0.9.1 (new)
  • nominatim_fdw 1.1.0 (new)
  • pg_utl_smtp 1.0.0 (new)
  • pg_strict 1.0.2 (new)
  • pgmb 1.0.0 (new)
  • pg_pwhash (new support)
  • informix_fdw (new support)

INFRA Component Versions

Infra Changelog 2026-02-12

Package Version Package Version
victoria-metrics 1.135.0 victoria-logs 1.45.0
vector 0.53.0 grafana 12.3.2
alertmanager 0.31.1 etcd 3.6.7
duckdb 1.4.4 pg_exporter 1.2.0
pig 1.1.0 claude 2.1.37
opencode 1.1.59 uv 0.10.0
code-server 4.108.2 caddy 2.10.2
hugo 0.155.2 cloudflared 2026.2.0
headscale 0.28.0

API Changes

  • Corrected template guard for io_method / io_workers from pg_version >= 17 to pg_version >= 18.
  • Fixed PG18 guards for idle_replication_slot_timeout / initdb --no-data-checksums.
  • Broadened maintenance_io_concurrency effective range to PG13+.
  • Raised autovacuum_vacuum_threshold: oltp/crit/tiny from 50 to 500, olap to 1000.
  • Raised autovacuum_analyze_threshold: oltp/crit/tiny from 50 to 250, olap to 500.
  • Increased default checkpoint_completion_target from 0.90 to 0.95.
  • Added fs.nr_open=8388608 in node tuned templates and aligned fs.file-max / fs.nr_open / LimitNOFILE.
  • Changed postgres/patroni/minio systemd LimitNOFILE from 16777216 to 8388608.
  • Added fs.nr_open: 8388608 into default node_sysctl_params.
  • Changed node_firewall_mode default from none to zone: firewall enabled by default, intranet trusted, and only node_firewall_public_port exposed publicly; set none for fully self-managed firewall.
  • Changed node_firewall_public_port default from [22,80,443,5432] to [22,80,443]; add 5432 explicitly only when public DB access is required. Firewall rules are add-only, so existing nodes that already exposed 5432 must remove it manually. Single-node experience templates (such as meta / vibe) explicitly override and keep 5432 for remote usage.
  • Added bin/validate checks for pg_databases[*].parameters and pg_hba_rules[*].order; fixed HBA validation not returning failure properly.
  • Added segmented tags in infra-rm.yml: deregister, config, env, etc.
  • Updated VIBE defaults: jupyter_enabled=false, npm_packages include @anthropic-ai/claude-code and happy-coder, plus CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.
  • PgBouncer alias cleanup: pool_size_reserve -> pool_reserve, pool_max_db_conn -> pool_connlimit.

Compatibility Fixes (Deduplicated)

  • Note: repeated regressions/re-fixes of the same issue are counted once and merged by problem domain below.
  • Fixed Redis replicaof empty-guard logic and systemd stop behavior.
  • Fixed schema/table/sequence qualification, identifier quoting, and logging format safety in pg_migration.
  • Fixed restart targets and variable usage in pgsql role handlers.
  • Fixed blackbox config filename cleanup item and pgAdmin pgpass file format.
  • Made pg_exporter startup non-blocking to avoid slowing main flow when exporter fails.
  • Simplified VIP CIDR parsing: default mask 24 when omitted.
  • Increased MinIO health-check retries from 3 to 5.
  • Switched node hostname setup to Ansible hostname module instead of shell calls.
  • Fixed .env format for app/electric and app/pg_exporter to standard KEY=VALUE.
  • Fixed pg_crontab syntax error in pigsty.yml.
  • Updated ETCD docs to clarify default TLS vs optional mTLS semantics.
  • Fixed repo-add argument passing, Debian CN mirror component compatibility, and bin/psql.py Python 3 compatibility.
  • Hardened redis-exporter credential file permissions.
  • pgsql-user.yml now masks credential logs (no_log) on sensitive steps.
  • Fixed gate conditions when pg_monitor registers Victoria targets.
  • Changed pg_remove backup cleanup to cluster-level directory to avoid deleting other cluster backups.

Commit List (v4.0.0..v4.1.0, 72 commits, 2026-02-02 ~ 2026-02-13)

7410de401 v4.1.0 release
fa31213ce conf(node): default firewall to zone with single-node 5432 override
bb8382c58 update default extension list to 451
770d01959 hide user credential in pgsql-user playbook
7219a896c pg_monitor: fix victoria registration gate conditions
084c98432 remove one cluster in backup dir during pg_remove
7005617f1 pgsql: drop legacy pgbouncer pool parameter aliases
f8165a886 docs(roles): fix typos and align juice role documentation
06a589218 chore(meta): normalize platform versions for current lint schema
e0a208248 fix(roles): harden redis exporter file permissions
fd0469881 terraform/vagrant: parameterize aliyun region/zone, fix vagrant scripts
74c59aabe grafana: fix dashboard links, descriptions, and overrides
443e58724 conf: clean legacy params and fix template references
536c4b39d adjust grafana dashboard dead links
f3b9866ce grafana(pgsql): fix panel typos and title consistency
bcb69be11 grafana(pgsql): fix drilldown links and variable mappings
1ce4374a1 grafana: fill pglog panel titles and normalize wording
2d127f9f4 grafana: fix minio traffic metrics and pigsty dashboard links
9d3ca0118 grafana: align victoria instance dashboards with query scope
55bc61622 grafana: fix infra dashboard copy, links, and table semantics
607b75535 grafana(node): fix panel drilldown links and clean dashboard metadata
1321de532 grafana(redis): fix dashboard links and blocked-clients panel semantics
91e0c8437 fix(grafana): correct Redis alert drill-down dashboard links
0fde78c02 fix(tooling): improve Python3 compatibility and enforce vagrant scale lower bound
fa3454a52 fix(bootstrap): use Debian-compatible components for CN apt mirror
36c95c749 fix(cli): restore repo-add execution and HBA validation failure propagation
797385929 add macbook local vagrant image override
f9c928e32 fix(grafana): restore reverted dashboard bugfixes
c11af8b6a Bump version to v4.1.0
307a236ba update extension list
f17024807 override el9/u24 vagrant box for convient testing
c2ada1283 terraform: bump Aliyun Debian images to 12.13/13.3
25bd8210f fix(node): add daemon_reload to systemd tasks for keepalived, chronyd, and cron
6f2576fd0 fix(node): set default fs.nr_open via node_sysctl_params
43a71245e add pg_bgwriter_buffers_backend for pg 17-
da832a47b fix(monitor): keep checkpointer metrics for checkpoint stats
90434ca8a fix(monitor): add pg_bgwriter fallback for checkpointer metrics
e2d75e787 fix(monitor): use pg_checkpointer metrics for checkpoint stats
a0b7474f8 fix grafana dashboard metrics and lengend
27ddacbc6 vagrant: refresh box selector and OS shortcuts
26e108788 fix(monitor): correct unit for time metrics scaled by pg_exporter
ee90044b5 fix(pgsql): correct min_parallel scan size params in oltp/crit templates
d439464b2 pgsql: fix pg_version guards for PG18-only settings
26320f120 docs: recommend RockyLinux 10.1
1e9b9f33a terraform: bump Aliyun Rocky images to 9.7/10.1
d6e9c7122 monitor: optimize table/index bloat estimators
42d45d32e fix(grafana): align panel semantics across node/infra/redis
3972d2c45 fix(grafana/pgsql): align dashboard semantics for query monitoring
cb52375ac bump checkpoint_completion_target from 0.90 to 0.95
13115a95d fix legend in pgsql-persist checkpoint panel
102cd2edb fix(pg_migration): make template logging format-safe
c402f0e6d fix: correct io_method/io_workers version guard from PG17 to PG18
3bf676546 vibe: disable jupyter by default and install claude-code via npm_packages
613c4efa9 fix: set fs.nr_open in tuned profiles and reduce LimitNOFILE to 8M
07e499d4d new app conf template matter most
4cc68ed61 Refine infra removal playbook
7cfb98f69 fix: app docker .env file format
9b36b1875 Fix config templates and validation
318d85e6e Simplify VIP parsing and make pg_exporter non-blocking
571cd9e70 Use hostname module for nodename
de98f073c Fix blackbox config filename and pgpass format
4bff01100 Fix redis replicaof guard and systemd stop
38445b68d minio: increase health check retries
c99854969 docs(etcd): clarify TLS vs mTLS
41229124a fix pgsql roles typo
e575d17c6 fix pg_migration scripts to use fully qualified identifiers
ec4207202 fix pgsql-schema broken links
a237e6c99 tune autovacuum threshold to reduce small table vacuum frequency
e80754760 fix pgcat-database links to pgcat-table https://github.com/pgsty/pigsty/issues/690
0060f5346 fix pgsql-database / pgsql-databases age metric fix https://github.com/pgsty/pigsty/issues/695
43cdf72bc fix pigsty.yml typo
0d9db7b08 fix: update datasource to $dsn - fix https://github.com/pgsty/pigsty/issues/692#issuecomment-3835461620

Thanks

  • Thanks to @l2dy for many valuable suggestions and issues.

Checksums

8bc75e8df0e3830931f2ddab71b89630  pigsty-v4.1.0.tgz
da10de99d819421630f430d01bc9de62  pigsty-pkg-v4.1.0.d12.aarch64.tgz
e1f2ed2da0d6b8c360f9fa2faaa7e175  pigsty-pkg-v4.1.0.d12.x86_64.tgz
382bb38a81c138b1b3e7c194211c2138  pigsty-pkg-v4.1.0.d13.aarch64.tgz
13ceaa728901cc4202687f03d25f1479  pigsty-pkg-v4.1.0.d13.x86_64.tgz
92d061de4d495d05d42f91e4283e7502  pigsty-pkg-v4.1.0.el10.aarch64.tgz
be629ea91adf86bbd7e1c59b659d0069  pigsty-pkg-v4.1.0.el10.x86_64.tgz
c14be706119ba33dd06c71dda6c02298  pigsty-pkg-v4.1.0.el8.aarch64.tgz
0c8b6952ffc00e3b169896129ea39184  pigsty-pkg-v4.1.0.el8.x86_64.tgz
cfcc63b9ecc525165674f58f9365aa19  pigsty-pkg-v4.1.0.el9.aarch64.tgz
34f733080bfa9c8515d1573c35f3e870  pigsty-pkg-v4.1.0.el9.x86_64.tgz
ad52ce9bf25e4d834e55873b3f9ada51  pigsty-pkg-v4.1.0.u22.aarch64.tgz
300b2185c61a03ea7733248e526f3342  pigsty-pkg-v4.1.0.u22.x86_64.tgz
2e561e6ae9abb14796872059d2f694a8  pigsty-pkg-v4.1.0.u24.aarch64.tgz
c462bb4cb2359e771ffcad006888fbd4  pigsty-pkg-v4.1.0.u24.x86_64.tgz

Sources

2.8 - Pigsty v4.0.0

Observability revolution, security hardening, JUICE/VIBE modules, Apache-2.0
curl https://pigsty.io/get | bash -s v4.0.0

318 commits, 604 files changed, +118,655 / -327,552 lines

Highlights

  • Observability Revolution: Prometheus → VictoriaMetrics (10x perf), Loki+Promtail → VictoriaLogs+Vector
  • Security Hardening: Auto-generated passwords, etcd RBAC, firewall/SELinux modes, permission tightening, Nginx Basic Auth
  • Docker Support: Run Pigsty in Docker containers with full systemd support (macOS & Linux)
  • New Module: JUICE - Mount PostgreSQL as filesystem with PITR recovery capability
  • New Module: VIBE - AI coding sandbox with Claude Code, JupyterLab, VS Code Server, Node.js
  • Database Management: pg_databases state (create/absent/recreate), instant clone with strategy
  • PITR & Fork: /pg/bin/pg-fork for instant CoW cloning, enhanced pg-pitr with pre-backup
  • HA Enhancement: pg_rto_plan with 4 RTO presets (fast/norm/safe/wide), pg_crontab scheduled tasks
  • Multi-Cloud Terraform: AWS, Azure, GCP, Hetzner, DigitalOcean, Linode, Vultr, TencentCloud templates
  • License Change: AGPL-3.0 → Apache-2.0

Infra Software Versions - MinIO now uses pgsty/minio fork RPM/DEB.

Package Version Package Version
victoria-metrics 1.134.0 victoria-logs 1.43.1
vector 0.52.0 grafana 12.3.1
alertmanager 0.30.1 etcd 3.6.7
duckdb 1.4.4 pg_exporter 1.1.2
pgbackrest_exporter 0.22.0 blackbox_exporter 0.28.0
node_exporter 1.10.2 minio 20251203
pig 1.0.0 claude 2.1.19
opencode 1.1.34 uv 0.9.26
asciinema 3.1.0 prometheus 3.9.1
pushgateway 1.11.2 juicefs 1.4.0
code-server 4.100.2 caddy 2.10.2
hugo 0.154.5 cloudflared 2026.1.1
headscale 0.27.1

New Modules

  • JUICE Module: JuiceFS distributed filesystem using PostgreSQL as metadata engine, supports PITR recovery for filesystem. Multiple storage backends (PG large objects, MinIO, S3), multi-instance deployment with Prometheus metrics, new node-juice dashboard.
  • VIBE Module: AI coding sandbox with Code-Server (VS Code in browser), JupyterLab (interactive computing), Node.js (JavaScript runtime), Claude Code (AI coding assistant with OpenTelemetry observability). New claude-code dashboard for usage monitoring.

PostgreSQL Extension Updates

Major extensions add PG 18 support: age, citus, documentdb, pg_search, timescaledb, pg_bulkload, rum, etc.

New: pg_textsearch 0.4.0, pg_clickhouse 0.1.3, pg_ai_query 0.1.1, etcd_fdw, pg_ttl_index 0.1.0, pljs 1.0.4, pg_retry 1.0.0, pg_weighted_statistics 1.0.0, pg_enigma 0.5.0, pglinter 1.0.1, documentdb_extended_rum 0.109, mobilitydb_datagen 1.3.0

Updated: timescaledb 2.24.0, pg_search 0.21.4, citus 14.0.0, documentdb 0.109, age 1.7.0, pg_duckdb 1.1.1, vchord 1.0.0, vchord_bm25 0.3.0, pg_biscuit 2.2.2, pg_anon 2.5.1, wrappers 0.5.7, pg_vectorize 0.26.0, pg_session_jwt 0.4.0, pg_partman 5.4.0, pgmq 1.9.0, pg_bulkload 3.1.23, pg_timeseries 0.2.0, pg_convert 0.1.0, pgBackRest 2.58

Breaking Changes

Before After
Prometheus VictoriaMetrics
Loki + Promtail VictoriaLogs + Vector
node_disable_firewall node_firewall_mode
node_disable_selinux node_selinux_mode
pg_pwd_enc removed (always scram-sha-256)
infra_pip_packages node_pip_packages
grafana_clean default true → false
install.yml renamed to deploy.yml

Observability

  • VictoriaMetrics replaces Prometheus — several times the performance with a fraction of the resources
  • VictoriaLogs + Vector replaces Promtail + Loki for log collection
  • Unified log format for all components, PG logs use UTC timestamp (log_timezone)
  • PostgreSQL log rotation changed to weekly truncated rotation mode
  • Added Vector parsing configs for Nginx/Syslog/PG CSV/Pgbackrest/Grafana/Redis/etcd/MinIO logs
  • Datasource registration now runs on all Infra nodes, Victoria datasources auto-registered in Grafana
  • New grafana_pgurl parameter for using PG as Grafana backend storage
  • New grafana_view_password parameter for Grafana Meta datasource password
  • pg_exporter updated to 1.1.2 with new pg_timeline collector and numerous fixes
  • New dashboards: node-vector, node-juice, claude-code

Interface Improvements

  • install.yml playbook renamed to deploy.yml, new vibe.yml playbook for VIBE module
  • pg_databases: added state field (create/absent/recreate), strategy for cloning, newer locale params support
  • pg_users: added admin parameter with ADMIN OPTION, set and inherit options
  • pg_hba: support order field for priority, IPv6 localhost access
  • New node_crontab auto-restores original crontab on node-rm

Parameter Optimization

  • pg_io_method: auto, sync, worker, io_uring options, default worker
  • pg_rto_plan: RTO presets (fast/norm/safe/wide) integrating Patroni & HAProxy config
  • pg_crontab: scheduled tasks for postgres dbsu
  • idle_replication_slot_timeout: default 7d, crit template 3d
  • file_copy_method: set to clone for PG18 instant database cloning
  • Crit template enables Patroni strict sync mode
  • PITR default archive_mode changed to preserve

Architecture Improvements

  • Fixed /infra symlink pointing to /data/infra on Infra nodes
  • Local repo at /data/nginx/pigsty, /www symlinks to /data/nginx
  • New scripts: /pg/bin/pg-fork (CoW cloning), /pg/bin/pg-drop-role, bin/pgsql-ext
  • Enhanced /pg/bin/pg-pitr for instance-level PITR with pre-backup
  • UV Python manager moved from infra to node module with node_uv_env parameter
  • Terraform templates: AWS, Azure, GCP, Hetzner, DigitalOcean, Linode, Vultr, TencentCloud
  • Simu template simplified from 36 to 20 nodes, new 10-node and Citus templates

Security Improvements

  • configure -g auto-generates strong random passwords
  • Replaced node_disable_firewall with node_firewall_mode (off/none/zone)
  • Replaced node_disable_selinux with node_selinux_mode (disabled/permissive/enforcing)
  • Nginx Basic Auth support for optional HTTP authentication
  • Enabled etcd RBAC, each cluster can only manage its own PG cluster
  • etcd root password stored in /etc/etcd/etcd.pass, admin-readable only
  • New node_admin_sudo parameter for admin sudo mode (all/nopass)
  • Fixed ownca certificate validity for Chrome recognition

Bug Fixes

  • Fixed ownca certificate validity for Chrome compatibility
  • Fixed Vector 0.52 syslog_raw parsing issue
  • Fixed pg_pitr multiple replica clonefrom timing issues
  • Fixed Ansible SELinux race condition in dnsmasq
  • Fixed EL9 aarch64 patroni & llvmjit issues
  • Fixed pgbouncer pid path (/run/postgresql)
  • Fixed HAProxy service template variable path
  • Fixed MinIO reload handler ineffective
  • Fixed vmetrics_port default value to 8428
  • Fixed pg-failover-callback for all Patroni callback events

New Parameters

Parameter Type Default Description
node_firewall_mode enum none (v4.0) Firewall mode: off/none/zone (default is zone since v4.1)
node_selinux_mode enum permissive SELinux mode
node_admin_sudo enum nopass Admin sudo privilege level
pg_io_method enum worker I/O method: auto/sync/worker/io_uring
pg_rto_plan dict - RTO presets: fast/norm/safe/wide
pg_crontab list [] postgres dbsu scheduled tasks
grafana_view_password string DBUser.Viewer Grafana Meta datasource password
juice_cache path /data/juice JuiceFS cache directory
juice_instances dict {} JuiceFS instance definitions
vibe_data path /fs VIBE workspace directory
code_enabled bool true Enable Code-Server
code_password string Vibe.Coding Code-Server password
jupyter_enabled bool true Enable JupyterLab
jupyter_password string Vibe.Coding JupyterLab access token
claude_enabled bool true Enable Claude Code configuration
nodejs_enabled bool true Enable Node.js installation
nodejs_registry string '' npm registry, auto china mirror
node_uv_env path /data/venv Node UV venv path, empty to skip
node_pip_packages string '' pip packages for UV venv

Removed Parameters: node_disable_firewall, node_disable_selinux, infra_pip_packages, pg_pwd_enc, pgbackrest_clean, code_home, jupyter_home

Checksums

bc48405075b3ec6a85fc2c99a1f77650  pigsty-v4.0.0.tgz
db9797c3c8ae21320b76a442c1135c7b  pigsty-pkg-v4.0.0.d12.aarch64.tgz
1eed26eee42066ca71b9aecbf2ca1237  pigsty-pkg-v4.0.0.d12.x86_64.tgz
03540e41f575d6c3a7c63d1d30276d49  pigsty-pkg-v4.0.0.d13.aarch64.tgz
36a6ee284c0dd6d9f7d823c44280b88f  pigsty-pkg-v4.0.0.d13.x86_64.tgz
f2b6ec49d02916944b74014505d05258  pigsty-pkg-v4.0.0.el10.aarch64.tgz
73f64c349366fe23c022f81fe305d6da  pigsty-pkg-v4.0.0.el10.x86_64.tgz
287f767fbb66a9aaca9f0f22e4f20491  pigsty-pkg-v4.0.0.el8.aarch64.tgz
c0886aab454bd86245f3869ef2ab4451  pigsty-pkg-v4.0.0.el8.x86_64.tgz
094ab31bcf4a3cedbd8091bc0f3ba44c  pigsty-pkg-v4.0.0.el9.aarch64.tgz
235ccba44891b6474a76a81750712544  pigsty-pkg-v4.0.0.el9.x86_64.tgz
f2791c96db4cc17a8a4008fc8d9ad310  pigsty-pkg-v4.0.0.u22.aarch64.tgz
3099c4453eef03b766d68e04b8d5e483  pigsty-pkg-v4.0.0.u22.x86_64.tgz
49a93c2158434f1adf0d9f5bcbbb1ca5  pigsty-pkg-v4.0.0.u24.aarch64.tgz
4acaa5aeb39c6e4e23d781d37318d49b  pigsty-pkg-v4.0.0.u24.x86_64.tgz

Sources

2.9 - Pigsty v3.7.0

PG18 default, 437 extensions, EL10 & Debian 13 support, PGEXT.CLOUD

Highlights

  • PostgreSQL 18 Deep Support: Now the default major PG version, with full extension readiness!
  • Expanded OS Support: Added EL10 and Debian 13, bringing the total supported operating systems to 14.
  • Extension Growth: The PostgreSQL extension library now includes 437 entries.
  • Ansible 2.19 Compatibility: Full support for Ansible 2.19 following its breaking changes.
  • Kernel Updates: Latest versions for Supabase, PolarDB, IvorySQL, and Percona kernels.
  • Optimized Tuning: Refined logic for default PG parameters to maximize resource utilization.
  • PGEXT.CLOUD: Dedicated extension website open-sourced under Apache-2.0 license

Version Updates

  • PostgreSQL 18.1, 17.7, 16.11, 15.15, 14.20, 13.23
  • Patroni 4.1.0
  • Pgbouncer 1.25.0
  • pg_exporter 1.0.3
  • pgbackrest 2.57.0
  • Supabase 2025-11
  • PolarDB 15.15.5.0
  • FerretDB 2.7.0
  • DuckDB 1.4.2
  • Etcd 3.6.6
  • pig 0.7.4

For detailed version changes, please refer to:

API Changes

  • Implemented a refined optimization strategy for parallel execution parameters. See Tuning Guide.
  • The citus extension is no longer installed by default in rich and full templates (PG 18 support pending).
  • Added duckdb extension stubs to PostgreSQL parameter templates.
  • Capped min_wal_size, max_wal_size, and max_slot_wal_keep_size at 200 GB, 2000 GB, and 3000 GB, respectively.
  • Capped temp_file_limit at 200 GB (2 TB for OLAP workloads).
  • Increased the default connection count for the connection pool.
  • Added prometheus_port (default: 9058) to avoid conflicts with the EL10 RHEL Web Console port.
  • Changed alertmanager_port default to 9059 to avoid potential conflicts with Kafka SSL ports.
  • Added a pg_pre subtask to pg_pkg: removes conflicting LLVM packages (bpftool, python3-perf) on EL9+ prior to PG installation.
  • Added the llvm module to the default repository definition for Debian/Ubuntu.
  • Fixed package removal logic in infra-rm.yml.

Compatibility Fixes

  • Ubuntu/Debian CA Trust: Fixed incorrect warning return codes when trusting Certificate Authorities.
  • Ansible 2.19 Support: Resolved numerous compatibility issues introduced by Ansible 2.19 to ensure stability across versions:
    • Added explicit int type casting for sequence variables.
    • Migrated with_items syntax to loop.
    • Nested key exchange variables in lists to prevent character iteration on strings in newer versions.
    • Explicitly cast range usage to list.
    • Renamed reserved variables such as name and port.
    • Replaced play_hosts with ansible_play_hosts.
    • Added string casting for specific variables to prevent runtime errors.
  • EL10 Adaptation:
    • Fixed missing ansible-collection-community-crypto preventing key generation.
    • Fixed missing ansible logic packages.
    • Removed modulemd_tools, flamegraph, and timescaledb-tool.
    • Replaced java-17-openjdk with java-21-openjdk.
    • Resolved aarch64 YUM repository naming issues.
  • Debian 13 Adaptation:
    • Replaced dnsutils with bind9-dnsutils.
  • Ubuntu 24 Fixes:
    • Temporarily removed tcpdump due to upstream dependency crashes.

Checksums

e00d0c2ac45e9eff1cc77927f9cd09df  pigsty-v3.7.0.tgz
987529769d85a3a01776caefefa93ecb  pigsty-pkg-v3.7.0.d12.aarch64.tgz
2d8272493784ae35abeac84568950623  pigsty-pkg-v3.7.0.d12.x86_64.tgz
090cc2531dcc25db3302f35cb3076dfa  pigsty-pkg-v3.7.0.d13.x86_64.tgz
ddc54a9c4a585da323c60736b8560f55  pigsty-pkg-v3.7.0.el10.aarch64.tgz
d376e75c490e8f326ea0f0fbb4a8fd9b  pigsty-pkg-v3.7.0.el10.x86_64.tgz
8c2deeba1e1d09ef3d46d77a99494e71  pigsty-pkg-v3.7.0.el8.aarch64.tgz
9795e059bd884b9d1b2208011abe43cd  pigsty-pkg-v3.7.0.el8.x86_64.tgz
08b860155d6764ae817ed25f2fcf9e5b  pigsty-pkg-v3.7.0.el9.aarch64.tgz
1ac430768e488a449d350ce245975baa  pigsty-pkg-v3.7.0.el9.x86_64.tgz
e033aaf23690755848db255904ab3bcd  pigsty-pkg-v3.7.0.u22.aarch64.tgz
cc022ea89181d89d271a9aaabca04165  pigsty-pkg-v3.7.0.u22.x86_64.tgz
0e978598796db3ce96caebd76c76e960  pigsty-pkg-v3.7.0.u24.aarch64.tgz
48223898ace8812cc4ea79cf3178476a  pigsty-pkg-v3.7.0.u24.x86_64.tgz

Sources

2.10 - Pigsty v3.6.1

Routine PG minor updates, PGDG China mirror, EL10/D13 stubs
curl https://repo.pigsty.io/get | bash -s v3.6.1

Highlights

  • PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, and 18 Beta 3 Released!
  • PGDG APT/YUM mirror for Mainland China Users
  • New home website https://pgsty.com
  • Add el10, debian 13 stub, add el10 terraform images

Infra Package Updates

  • Grafana 12.1.0
  • pg_exporter 1.0.2
  • pig 0.6.1
  • vector 0.49.0
  • redis_exporter 1.75.0
  • mongo_exporter 0.47.0
  • victoriametrics 1.123.0
  • victorialogs: 1.28.0
  • grafana-victoriametrics-ds 0.18.3
  • grafana-victorialogs-ds 0.19.3
  • grafana-infinity-ds 3.4.1
  • etcd 3.6.4
  • ferretdb 2.5.0
  • tigerbeetle 0.16.54
  • genai-toolbox 0.12.0

Extension Package Updates

  • pg_search 0.17.3

API Changes

  • remove br_filter from default node_kernel_modules
  • do not use OS minor version dir for pgdg yum repos

Checksums

045977aff647acbfa77f0df32d863739  pigsty-pkg-v3.6.1.d12.aarch64.tgz
636b15c2d87830f2353680732e1af9d2  pigsty-pkg-v3.6.1.d12.x86_64.tgz
700a9f6d0db9c686d371bf1c05b54221  pigsty-pkg-v3.6.1.el8.aarch64.tgz
2aff03f911dd7be363ba38a392b71a16  pigsty-pkg-v3.6.1.el8.x86_64.tgz
ce07261b02b02b36a307dab83e460437  pigsty-pkg-v3.6.1.el9.aarch64.tgz
d598d62a47bbba2e811059a53fe3b2b5  pigsty-pkg-v3.6.1.el9.x86_64.tgz
13fd68752e59f5fd2a9217e5bcad0acd  pigsty-pkg-v3.6.1.u22.aarch64.tgz
c25ccfb98840c01eb7a6e18803de55bb  pigsty-pkg-v3.6.1.u22.x86_64.tgz
0d71e58feebe5299df75610607bf428c  pigsty-pkg-v3.6.1.u24.aarch64.tgz
4fbbab1f8465166f494110c5ec448937  pigsty-pkg-v3.6.1.u24.x86_64.tgz
083d8680fa48e9fec3c3fcf481d25d2f  pigsty-v3.6.1.tgz

Sources

2.11 - Pigsty v3.6.0

pgactive, MinIO/ETCD improvements, simplified install, config cleanup
curl https://repo.pigsty.io/get | bash -s v3.6.0

Highlights

  • Brand-new documentation site: https://doc.pgsty.com
  • Added pgsql-pitr playbook and backup/restore tutorial, improved PITR experience
  • Added kernel support: Percona PG TDE (PG17)
  • Optimized self-hosted Supabase experience, updated to the latest version, and fixed issues with the official template
  • Simplified installation steps, online install by default, bootstrap now part of install script

Improvements

  • Refactored ETCD module with dedicated remove playbook and bin utils
  • Refactored MinIO module with plain HTTP mode, better bucket provisioning options.
  • Reorganized and streamlined all configuration templates for easier use
  • Faster Docker Registry mirror for users in mainland China
  • Optimized tuned OS parameter templates for modern hardware and NVMe disks
  • Added extension pgactive for multi-master replication and sub-second failover
  • Adjusted default values for pg_fs_main / pg_fs_backup, simplified file directory structure design

Bug Fixes

  • Fixed pgbouncer configuration file error by @housei-zzy
  • Fixed OrioleDB issues on Debian platform
  • Fixed tuned shm configuration parameter issue
  • Offline packages now use the PGDG source directly, avoiding out-of-sync mirror sites
  • Fix ivorysql libxcrypt dependencies issues
  • Fix Replace the slow and broken epel mirror
  • Fix haproxy_enabled flag not working

Infra Package Updates

Added Victoria Metrics / Victoria Logs related packages

  • genai-toolbox 0.9.0 (new)
  • victoriametrics 1.120.0 -> 1.121.0 (refactor)
  • vmutils 1.121.0 (rename from victoria-metrics-utils)
  • grafana-victoriametrics-ds 0.15.1 -> 0.17.0
  • victorialogs 1.24.0 -> 1.25.1 (refactor)
  • vslogcli 1.24.0 -> 1.25.1
  • vlagent 1.25.1 (new)
  • grafana-victorialogs-ds 0.16.3 -> 0.18.1
  • prometheus 3.4.1 -> 3.5.0
  • grafana 12.0.0 -> 12.0.2
  • vector 0.47.0 -> 0.48.0
  • grafana-infinity-ds 3.2.1 -> 3.3.0
  • keepalived_exporter 1.7.0
  • blackbox_exporter 0.26.0 -> 0.27.0
  • redis_exporter 1.72.1 -> 1.77.0
  • rclone 1.69.3 -> 1.70.3

Database Package Updates

  • PostgreSQL 18 Beta2 update
  • pg_exporter 1.0.1, updated to latest dependencies and provides Docker image
  • pig 0.6.0, updated extension and repository list, with pig install subcommand
  • vip-manager 3.0.0 -> 4.0.0
  • ferretdb 2.2.0 -> 2.3.1
  • dblab 0.32.0 -> 0.33.0
  • duckdb 1.3.1 -> 1.3.2
  • etcd 3.6.1 -> 3.6.3
  • ferretdb 2.2.0 -> 2.4.0
  • juicefs 1.2.3 -> 1.3.0
  • tigerbeetle 0.16.41 -> 0.16.50
  • pev2 1.15.0 -> 1.16.0

Extension Package Updates

  • OrioleDB 1.5 beta12
  • OriolePG 17.11
  • plv8 3.2.3 -> 3.2.4
  • postgresql_anonymizer 2.1.1 -> 2.3.0
  • pgvectorscale 0.7.1 -> 0.8.0
  • wrappers 0.5.0 -> 0.5.3
  • supautils 2.9.1 -> 2.10.0
  • citus 13.0.3 -> 13.1.0
  • timescaledb 2.20.0 -> 2.21.1
  • vchord 0.3.0 -> 0.4.3
  • pgactive 2.1.5 (new)
  • documentdb 0.103.0 -> 0.105.0
  • pg_search 0.17.0

API Changes

  • pg_fs_backup: Renamed to pg_fs_backup, default value /data/backups.
  • pg_rm_bkup: Renamed to pg_rm_backup, default value true.
  • pg_fs_main: Default value adjusted to /data/postgres.
  • nginx_cert_validity: New parameter to control Nginx self-signed certificate validity, default 397d.
  • minio_buckets: Default value adjusted to create three buckets named pgsql, meta, data.
  • minio_users: Removed dba user, added s3user_meta and s3user_data users for meta and data buckets respectively.
  • minio_https: New parameter to allow MinIO to use HTTP mode.
  • minio_provision: New parameter to allow skipping MinIO provisioning stage (skip bucket and user creation)
  • minio_safeguard: New parameter, abort minio-rm.yml when enabled
  • minio_rm_data: New parameter, whether to remove minio data directory during minio-rm.yml
  • minio_rm_pkg: New parameter, whether to uninstall minio package during minio-rm.yml
  • etcd_learner: New parameter to control whether to init etcd instance as learner
  • etcd_rm_data: New parameter, whether to remove etcd data directory during etcd-rm.yml
  • etcd_rm_pkg: New parameter, whether to uninstall etcd package during etcd-rm.yml

Checksums

ab91bc05c54b88c455bf66533c1d8d43  pigsty-v3.6.0.tgz
cea861e2b4ec7ff5318e1b3c30b470cb  pigsty-pkg-v3.6.0.d12.aarch64.tgz
2f253af87e19550057c0e7fca876d37c  pigsty-pkg-v3.6.0.d12.x86_64.tgz
0158145b9bbf0e4a120b8bfa8b44f857  pigsty-pkg-v3.6.0.el8.aarch64.tgz
07330d687d04d26e7d569c8755426c5a  pigsty-pkg-v3.6.0.el8.x86_64.tgz
311df5a342b39e3288ebb8d14d81e0d1  pigsty-pkg-v3.6.0.el9.aarch64.tgz
92aad54cc1822b06d3e04a870ae14e29  pigsty-pkg-v3.6.0.el9.x86_64.tgz
c4fadf1645c8bbe3e83d5a01497fa9ca  pigsty-pkg-v3.6.0.u22.aarch64.tgz
5477ed6be96f156a43acd740df8a9b9b  pigsty-pkg-v3.6.0.u22.x86_64.tgz
196169afc1be02f93fcc599d42d005ca  pigsty-pkg-v3.6.0.u24.aarch64.tgz
dbe5c1e8a242a62fe6f6e1f6e6b6c281  pigsty-pkg-v3.6.0.u24.x86_64.tgz

Sources

2.12 - Pigsty v3.5.0

PG18 beta, 421 extensions, monitoring upgrade, code refactor

Highlights

  • New website: https://pgsty.com
  • PostgreSQL 18 (Beta) support: monitoring via pg_exporter 1.0.0, installer alias via pig 0.4.2, and a pg18 template
  • 421 bundled extensions, now including OrioleDB and OpenHalo kernels on all platforms
  • pig do CLI replaces legacy bin/ scripts
  • Hardening for self-hosted Supabase (replication lag, key distribution, etc.)
  • Code & architecture refactor — slimmer tasks, cleaner defaults for Postgres & PgBouncer
  • Monitoring stack refresh — Grafana 12, pg_exporter 1.0, new panels & plugins
  • Run vagrant on Apple Silicon
curl https://repo.pigsty.io/get | bash -s v3.5.0

Module Changes

  • Add PostgreSQL 18 support
  • PG18 metrics support with pg_exporter 1.0.0+
  • PG18 install support with pig 0.4.1+
  • New config template pg18.yml
  • Refactored pgsql module
  • Split monitoring into a new pg_monitor role; removed clean logic
  • Pruned duplicate tasks, dropped dir/utils block, renamed templates (no .j2)
  • All extensions install in extensions schema (Supabase best-practice)
  • Added SET search_path='' to every monitoring function
  • Tuned PgBouncer defaults (larger pool, cleanup query); new pgbouncer_ignore_param
  • New pg_key task to generate pgsodium master keys
  • Enabled sync_replication_slots by default on PG 17
  • Retagged subtasks for clearer structure
  • Refactored pg_remove module
  • New flags pg_rm_data, pg_rm_bkup, pg_rm_pkg control what gets wiped
  • Clearer role layout & tagging
  • Added new pg_monitor module
  • pgbouncer_exporter no longer shares configuration files with pg_exporter
  • Added monitoring metrics for TimescaleDB and Citus
  • Using pg_exporter 0.9.0 with updated replication slot metrics for PG16/17
  • Using more compact, newly designed collector configuration files
  • Supabase Enhancement (thanks @lawso017 for the contribution)
  • update supabase containers and schemas to the latest version
  • Support pgsodium server key loading
  • fix logflare lag issue with supa-kick crontab
  • add set search_path clause for monitor functions
  • Added new pig do command to CLI, allowing command-line tool to replace Shell scripts in bin/

Infra Package Updates

  • pig 0.4.2
  • duckdb 1.3.0
  • etcd 3.6.0
  • vector 0.47.0
  • minio 20250422221226
  • mcli 20250416181326
  • pev 1.5.0
  • rclone 1.69.3
  • mtail 3.0.8 (new)

Observability Package Updates

  • grafana 12.0.0
  • grafana-victorialogs-ds 0.16.3
  • grafana-victoriametrics-ds 0.15.1
  • grafana-infinity-ds 3.2.1
  • grafana_plugins 12.0.0
  • prometheus 3.4.0
  • pushgateway 1.11.1
  • nginx_exporter 1.4.2
  • pg_exporter 1.0.0
  • pgbackrest_exporter 0.20.0
  • redis_exporter 1.72.1
  • keepalived_exporter 1.6.2
  • victoriametrics 1.117.1
  • victoria_logs 1.22.2

Database Package Updates

  • PostgreSQL 17.5, 16.9, 15.13, 14.18, 13.21
  • PostgreSQL 18beta1 support
  • pgbouncer 1.24.1
  • pgbackrest 2.55
  • pgbadger 13.1

Extension Package Updates

  • spat 0.1.0a4 new extension
  • pgsentinel 1.1.0 new extension
  • pgdd 0.6.0 (pgrx 0.14.1) new extension add back
  • convert 0.0.4 (pgrx 0.14.1) new extension
  • pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
  • pg_render 0.1.2 (pgrx 0.12.8)
  • pgx_ulid 0.2.0 (pgrx 0.12.7)
  • pg_idkit 0.3.0 (pgrx 0.14.1)
  • pg_ivm 1.11.0
  • orioledb 1.4.0 beta11 rpm & add debian/ubuntu support
  • openhalo 14.10 add debian/ubuntu support
  • omnigres 20250507 (miss on d12/u22)
  • citus 12.0.3
  • timescaledb 2.20.0 (DROP PG14 support)
  • supautils 2.9.2
  • pg_envvar 1.0.1
  • pgcollection 1.0.0
  • aggs_for_vecs 1.4.0
  • pg_tracing 0.1.3
  • pgmq 1.5.1
  • tzf-pg 0.2.0 (pgrx 0.14.1)
  • pg_search 0.15.18 (pgrx 0.14.1)
  • anon 2.1.1 (pgrx 0.14.1)
  • pg_parquet 0.4.0 (0.14.1)
  • pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
  • pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
  • vchord_bm25 0.2.1 (pgrx 0.13.1)
  • vchord 0.3.0 (pgrx 0.13.1)
  • pg_vectorize 0.22.1 (pgrx 0.13.1)
  • wrappers 0.4.6 (pgrx 0.12.9)
  • timescaledb-toolkit 1.21.0 (pgrx 0.12.9)
  • pgvectorscale 0.7.1 (pgrx 0.12.9)
  • pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
  • pg_timetable 5.13.0
  • ferretdb 2.2.0
  • documentdb 0.103.0 (+aarch64 support)
  • pgml 2.10.0 (pgrx 0.12.9)
  • sqlite_fdw 2.5.0 (fix pg17 deb)
  • tzf 0.2.2 0.14.1 (rename src)
  • pg_vectorize 0.22.2 (pgrx 0.13.1)
  • wrappers 0.5.0 (pgrx 0.12.9)

Checksums

c7e5ce252ddf848e5f034173e0f29345  pigsty-v3.5.0.tgz
ba31f311a16d615c1ee1083dc5a53566  pigsty-pkg-v3.5.0.d12.aarch64.tgz
3aa5c56c8f0de53303c7100f2b3934f4  pigsty-pkg-v3.5.0.d12.x86_64.tgz
a098cb33822633357e6880eee51affd6  pigsty-pkg-v3.5.0.el8.x86_64.tgz
63723b0aeb4d6c02fff0da2c78e4de31  pigsty-pkg-v3.5.0.el9.aarch64.tgz
eb91c8921d7b8a135d8330c77468bfe7  pigsty-pkg-v3.5.0.el9.x86_64.tgz
87ff25e14dfb9001fe02f1dfbe70ae9e  pigsty-pkg-v3.5.0.u22.x86_64.tgz
18be503856f6b39a59efbd1d0a8556b6  pigsty-pkg-v3.5.0.u24.aarch64.tgz
2bbef6a18cfa99af9cd175ef0adf873c  pigsty-pkg-v3.5.0.u24.x86_64.tgz

Sources

2.13 - Pigsty v3.4.1

OpenHalo & OrioleDB, MySQL compatibility, pgAdmin improvements

GitHub Release Page: v3.4.1

  • Added support for MySQL wire-compatible PostgreSQL kernel on EL systems: openHalo
  • Added support for OLTP-enhanced PostgreSQL kernel on EL systems: orioledb
  • Optimized pgAdmin 9.2 application template with automatic server list updates and pgpass password population
  • Increased PG default max connections to 250, 500, 1000
  • Removed the mysql_fdw extension with dependency errors from EL8

Infra Updates

  • pig 0.3.4
  • etcd 3.5.21
  • restic 0.18.0
  • ferretdb 2.1.0
  • tigerbeetle 0.16.34
  • pg_exporter 0.8.1
  • node_exporter 1.9.1
  • grafana 11.6.0
  • zfs_exporter 3.8.1
  • mongodb_exporter 0.44.0
  • victoriametrics 1.114.0
  • minio 20250403145628
  • mcli 20250403170756

Extension Update

  • Bump pg_search to 0.15.13
  • Bump citus to 13.0.3
  • Bump timescaledb to 2.19.1
  • Bump pgcollection RPM to 1.0.0
  • Bump pg_vectorize RPM to 0.22.1
  • Bump pglite_fusion RPM to 0.0.4
  • Bump aggs_for_vecs RPM to 1.4.0
  • Bump pg_tracing RPM to 0.1.3
  • Bump pgmq RPM to 1.5.1

Checksums

471c82e5f050510bd3cc04d61f098560  pigsty-v3.4.1.tgz
4ce17cc1b549cf8bd22686646b1c33d2  pigsty-pkg-v3.4.1.d12.aarch64.tgz
c80391c6f93c9f4cad8079698e910972  pigsty-pkg-v3.4.1.d12.x86_64.tgz
811bf89d1087512a4f8801242ca8bed5  pigsty-pkg-v3.4.1.el9.x86_64.tgz
9fe2e6482b14a3e60863eeae64a78945  pigsty-pkg-v3.4.1.u22.x86_64.tgz

Sources

2.14 - Pigsty v3.4.0

Backup improvements, auto certs, AGE, IvorySQL all platforms

GitHub Release Page: v3.4.0

Introduction Blog: Pigsty v3.4 MySQL Compatibility and Overall Enhancements

New Features

  • Added new pgBackRest backup monitoring metrics and dashboards
  • Enhanced Nginx server configuration options, with support for automated Certbot issuance
  • Now prioritizing PostgreSQL’s built-in C/C.UTF-8 locale settings
  • IvorySQL 4.4 is now fully supported across all platforms (RPM/DEB on x86/ARM)
  • Added new software packages: Juicefs, Restic, TimescaleDB EventStreamer
  • The Apache AGE graph database extension now fully supports PostgreSQL 13–17 on EL
  • Improved the app.yml playbook: launch standard Docker app without extra config
  • Bump Supabase, Dify, and Odoo app templates, bump to their latest versions
  • Add electric app template, local-first PostgreSQL Sync Engine

Infra Packages

  • +restic 0.17.3
  • +juicefs 1.2.3
  • +timescaledb-event-streamer 0.12.0
  • Prometheus 3.2.1
  • AlertManager 0.28.1
  • blackbox_exporter 0.26.0
  • node_exporter 1.9.0
  • mysqld_exporter 0.17.2
  • kafka_exporter 1.9.0
  • redis_exporter 1.69.0
  • pgbackrest_exporter 0.19.0-2
  • DuckDB 1.2.1
  • etcd 3.5.20
  • FerretDB 2.0.0
  • tigerbeetle 0.16.31
  • vector 0.45.0
  • VictoriaMetrics 1.113.0
  • VictoriaLogs 1.17.0
  • rclone 1.69.1
  • pev2 1.14.0
  • grafana-victorialogs-ds 0.16.0
  • grafana-victoriametrics-ds 0.14.0
  • grafana-infinity-ds 3.0.0
  • Patroni 4.0.5
  • PolarDB 15.12.3.0-e1e6d85b
  • IvorySQL 4.4
  • pgbackrest 2.54.2
  • pev2 1.14
  • Babelfish 13.17

PostgreSQL Extensions

  • pgspider_ext 1.3.0 (new extension)
  • apache age 13–17 el rpm (1.5.0)
  • timescaledb 2.18.2 → 2.19.0
  • citus 13.0.1 → 13.0.2
  • documentdb 1.101-0 → 1.102-0
  • pg_analytics 0.3.4 → 0.3.7
  • pg_search 0.15.2 → 0.15.8
  • pg_ivm 1.9 → 1.10
  • emaj 4.4.0 → 4.6.0
  • pgsql_tweaks 0.10.0 → 0.11.0
  • pgvectorscale 0.4.0 → 0.6.0 (pgrx 0.12.5)
  • pg_session_jwt 0.1.2 → 0.2.0 (pgrx 0.12.6)
  • wrappers 0.4.4 → 0.4.5 (pgrx 0.12.9)
  • pg_parquet 0.2.0 → 0.3.1 (pgrx 0.13.1)
  • vchord 0.2.1 → 0.2.2 (pgrx 0.13.1)
  • pg_tle 1.2.0 → 1.5.0
  • supautils 2.5.0 → 2.6.0
  • sslutils 1.3 → 1.4
  • pg_profile 4.7 → 4.8
  • pg_snakeoil 1.3 → 1.4
  • pg_jsonschema 0.3.2 → 0.3.3
  • pg_incremental 1.1.1 → 1.2.0
  • pg_stat_monitor 2.1.0 → 2.1.1
  • ddl_historization 0.7 → 0.0.7 (bug fix)
  • pg_sqlog 3.1.7 → 1.6 (bug fix)
  • pg_random removed development suffix (bug fix)
  • asn1oid 1.5 → 1.6
  • table_log 0.6.1 → 0.6.4

Interface Changes

  • Added new Docker parameters: docker_data and docker_storage_driver (#521 by @waitingsong)
  • Added new Infra parameter: alertmanager_port, which lets you specify the AlertManager port
  • Added new Infra parameter: certbot_sign, apply for cert during nginx init? (false by default)
  • Added new Infra parameter: certbot_email, specifying the email used when requesting certificates via Certbot
  • Added new Infra parameter: certbot_options, specifying additional parameters for Certbot
  • Updated IvorySQL to place its default binary under /usr/ivory-4 starting in IvorySQL 4.4
  • Changed the default for pg_lc_ctype and other locale-related parameters from en_US.UTF-8 to C
  • For PostgreSQL 17, if using UTF8 encoding with C or C.UTF-8 locales, PostgreSQL’s built-in localization rules now take priority
  • configure automatically detects whether C.utf8 is supported by both the PG version and the environment, and adjusts locale-related options accordingly
  • Set the default IvorySQL binary path to /usr/ivory-4
  • Updated the default value of pg_packages to pgsql-main patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • Updated the default value of repo_packages to [node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules]
  • Removed LANG and LC_ALL environment variable settings from /etc/profile.d/node.sh
  • Now using bento/rockylinux-8 and bento/rockylinux-9 as the Vagrant box images for EL
  • Added a new alias, extra_modules, which includes additional optional modules
  • Updated PostgreSQL aliases: postgresql, pgsql-main, pgsql-core, pgsql-full
  • GitLab repositories are now included among available modules
  • The Docker module has been merged into the Infra module
  • The node.yml playbook now includes a node_pip task to configure a pip mirror on each node
  • The pgsql.yml playbook now includes a pgbackrest_exporter task for collecting backup metrics
  • The Makefile now allows the use of META/PKG environment variables
  • Added /pg/spool directory as temporary storage for pgBackRest
  • Disabled pgBackRest’s link-all option by default
  • Enabled block-level incremental backups for MinIO repositories by default

Bug Fixes

  • Fixed the exit status code in pg-backup (#532 by @waitingsong)
  • In pg-tune-hugepage, restricted PostgreSQL to use only large pages (#527 by @waitingsong)
  • Fixed logic errors in the pg-role task
  • Corrected type conversion for hugepage configuration parameters
  • Fixed default value issues for node_repo_modules in the slim template

Checksums

768bea3bfc5d492f4c033cb019a81d3a  pigsty-v3.4.0.tgz
7c3d47ef488a9c7961ca6579dc9543d6  pigsty-pkg-v3.4.0.d12.aarch64.tgz
b5d76aefb1e1caa7890b3a37f6a14ea5  pigsty-pkg-v3.4.0.d12.x86_64.tgz
42dacf2f544ca9a02148aeea91f3153a  pigsty-pkg-v3.4.0.el8.aarch64.tgz
d0a694f6cd6a7f2111b0971a60c49ad0  pigsty-pkg-v3.4.0.el8.x86_64.tgz
7caa82254c1b0750e89f78a54bf065f8  pigsty-pkg-v3.4.0.el9.aarch64.tgz
8f817e5fad708b20ee217eb2e12b99cb  pigsty-pkg-v3.4.0.el9.x86_64.tgz
8b2fcaa6ef6fd8d2726f6eafbb488aaf  pigsty-pkg-v3.4.0.u22.aarch64.tgz
83291db7871557566ab6524beb792636  pigsty-pkg-v3.4.0.u22.x86_64.tgz
c927238f0343cde82a4a9ab230ecd2ac  pigsty-pkg-v3.4.0.u24.aarch64.tgz
14cbcb90693ed5de8116648a1f2c3e34  pigsty-pkg-v3.4.0.u24.x86_64.tgz

Sources

2.15 - Pigsty v3.3.0

404 extensions, extension directory, App playbook, Nginx customization
  • Total available extensions increased to 404!
  • PostgreSQL February Minor Updates: 17.4, 16.8, 15.12, 14.17, 13.20
  • New Feature: app.yml script for auto-installing apps like Odoo, Supabase, Dify.
  • New Feature: Further Nginx configuration customization in infra_portal.
  • New Feature: Added Certbot support for quick free HTTPS certificate requests.
  • New Feature: Pure-text extension list now supported in pg_default_extensions.
  • New Feature: Default repositories now include mongo, redis, groonga, haproxy, etc.
  • New Parameter: node_aliases to add command aliases for Nodes.
  • Fix: Resolved default EPEL repo address issue in Bootstrap script.
  • Improvement: Added Aliyun mirror for Debian Security repository.
  • Improvement: pgBackRest backup support for IvorySQL kernel.
  • Improvement: ARM64 and Debian/Ubuntu support for PolarDB.
  • pg_exporter 0.8.0 now supports new metrics in pgbouncer 1.24.
  • New Feature: Auto-completion for common commands like git, docker, systemctl #506 #524 by @waitingsong.
  • Improvement: Refined ignore_startup_parameters in pgbouncer config template #488 by @waitingsong.
  • New homepage design: Pigsty’s website now features a fresh new look.
  • Extension Directory: Detailed information and download links for RPM/DEB binary packages.
  • Extension Build: pig CLI now auto-sets PostgreSQL extension build environment.

New Extensions

12 new PostgreSQL extensions added, bringing the total to 404 available extensions.

Bump Extension

  • citus 13.0.0 -> 13.0.1
  • pg_duckdb 0.2.0 -> 0.3.1
  • pg_mooncake 0.1.0 -> 0.1.2
  • timescaledb 2.17.2 -> 2.18.2
  • supautils 2.5.0 -> 2.6.0
  • supabase_vault 0.3.1 (become C)
  • VectorChord 0.1.0 -> 0.2.1
  • pg_bulkload 3.1.22 (+pg17)
  • pg_store_plan 1.8 (+pg17)
  • pg_search 0.14 -> 0.15.2
  • pg_analytics 0.3.0 -> 0.3.4
  • pgroonga 3.2.5 -> 4.0.0
  • zhparser 2.2 -> 2.3
  • pg_vectorize 0.20.0 -> 0.21.1
  • pg_net 0.14.0
  • pg_curl 2.4.2
  • table_version 1.10.3 -> 1.11.0
  • pg_duration 1.0.2
  • pg_graphql 1.5.9 -> 1.5.11
  • vchord 0.1.1 -> 0.2.1 ((+13))
  • vchord_bm25 0.1.0 -> 0.1.1
  • pg_mooncake 0.1.1 -> 0.1.2
  • pgddl 0.29
  • pgsql_tweaks 0.11.0

Infra Updates

  • pig 0.1.3 -> 0.3.0
  • pushgateway 1.10.0 -> 1.11.0
  • alertmanager 0.27.0 -> 0.28.0
  • nginx_exporter 1.4.0 -> 1.4.1
  • pgbackrest_exporter 0.18.0 -> 0.19.0
  • redis_exporter 1.66.0 -> 1.67.0
  • mongodb_exporter 0.43.0 -> 0.43.1
  • VictoriaMetrics 1.107.0 -> 1.111.0
  • VictoriaLogs v1.3.2 -> 1.9.1
  • DuckDB 1.1.3 -> 1.2.0
  • Etcd 3.5.17 -> 3.5.18
  • pg_timetable 5.10.0 -> 5.11.0
  • FerretDB 1.24.0 -> 2.0.0-rc
  • tigerbeetle 0.16.13 -> 0.16.27
  • grafana 11.4.0 -> 11.5.2
  • vector 0.43.1 -> 0.44.0
  • minio 20241218131544 -> 20250218162555
  • mcli 20241121172154 -> 20250215103616
  • rclone 1.68.2 -> 1.69.0
  • vray 5.23 -> 5.28

Sources

2.16 - Pigsty v3.2.2

390 extensions, Omnigres, Mooncake, Citus 13 & PG17 support

What’s Changed

  • Bump IvorySQL to 4.2 (PostgreSQL 17.2)
  • Add Arm64 and Debian support for PolarDB kernel
  • Add certbot and certbot-nginx to default infra_packages
  • Increase pgbouncer max_prepared_statements to 256
  • remove pgxxx-citus package alias
  • hide pgxxx-olap category in pg_extensions by default

Sources

2.17 - Pigsty v3.2.1

350 extensions, Ivory4, Citus enhancements, Odoo template

Highlights

  • 351 PostgreSQL Extensions, including the powerful postgresql-anonymizer 2.0
  • IvorySQL 4.0 support for EL 8/9
  • Now use the Pigsty compiled Citus, TimescaleDB and pgroonga on all distros
  • Add self-hosting Odoo template and support

Bump software versions

  • pig CLI 0.1.2 self-updating capability
  • prometheus 3.1.0

Add New Extension

  • add pg_anon 2.0.0
  • add omnisketch 1.0.2
  • add ddsketch 1.0.1
  • add pg_duration 1.0.1
  • add ddl_historization 0.0.7
  • add data_historization 1.1.0
  • add schedoc 0.0.1
  • add floatfile 1.3.1
  • add pg_upless 0.0.3
  • add pg_task 1.0.0
  • add pg_readme 0.7.0
  • add vasco 0.1.0
  • add pg_xxhash 0.0.1

Update Extension

  • lower_quantile 1.0.3
  • quantile 1.1.8
  • sequential_uuids 1.0.3
  • pgmq 1.5.0 (subdir)
  • floatvec 1.1.1
  • pg_parquet 0.2.0
  • wrappers 0.4.4
  • pg_later 0.3.0
  • topn fix for deb.arm64
  • add age 17 on debian
  • powa + pg17, 5.0.1
  • h3 + pg17
  • ogr_fdw + pg17
  • age + pg17 1.5 on debian
  • pgtap + pg17 1.3.3
  • repmgr
  • topn + pg17
  • pg_partman 5.2.4
  • credcheck 3.0
  • ogr_fdw 1.1.5
  • ddlx 0.29
  • postgis 3.5.1
  • tdigest 1.4.3
  • pg_repack 1.5.2

Sources

2.18 - Pigsty v3.2.0

Extension CLI, Grafana enhancements, ARM64 extension completion

Highlights

  • New CLI: Introducing the pig command-line tool for managing extension plugins.
  • ARM64 Support: 390 extensions are now available for ARM64 across five major distributions.
  • Supabase Update: Latest Supabase Release Week updates are now supported for self-hosting on all distributions.
  • Grafana v11.4: Upgraded Grafana to version 11.4, featuring a new Infinity datasource.

Package Changes

  • New Extensions
  • Added timescaledb, timescaledb-loader, timescaledb-toolkit, and timescaledb-tool to the PIGSTY repository.
  • Added a custom-compiled pg_timescaledb for EL.
  • Added pgroonga, custom-compiled for all EL variants.
  • Added vchord 0.1.0.
  • Added pg_bestmatch.rs 0.0.1.
  • Added pglite_fusion 0.0.3.
  • Added pgpdf 0.1.0.
  • Updated Extensions
  • pgvectorscale: 0.4.0 → 0.5.1
  • pg_parquet: 0.1.0 → 0.1.1
  • pg_polyline: 0.0.1
  • pg_cardano: 1.0.2 → 1.0.3
  • pg_vectorize: 0.20.0
  • pg_duckdb: 0.1.0 → 0.2.0
  • pg_search: 0.13.0 → 0.13.1
  • aggs_for_vecs: 1.3.1 → 1.3.2
  • Infrastructure
  • Added promscale 0.17.0
  • Added grafana-plugins 11.4
  • Added grafana-infinity-plugins
  • Added grafana-victoriametrics-ds
  • Added grafana-victorialogs-ds
  • vip-manager: 2.8.0 → 3.0.0
  • vector: 0.42.0 → 0.43.0
  • grafana: 11.3 → 11.4
  • prometheus: 3.0.0 → 3.0.1 (package name changed from prometheus2 to prometheus)
  • nginx_exporter: 1.3.0 → 1.4.0
  • mongodb_exporter: 0.41.2 → 0.43.0
  • VictoriaMetrics: 1.106.1 → 1.107.0
  • VictoriaLogs: 1.0.0 → 1.3.2
  • pg_timetable: 5.9.0 → 5.10.0
  • tigerbeetle: 0.16.13 → 0.16.17
  • pg_export: 0.7.0 → 0.7.1
  • New Docker App
  • Add mattermost the open-source Slack alternative self-hosting template
  • Bug Fixes
  • Added python3-cdiff for el8.aarch64 to fix missing Patroni dependency.
  • Added timescaledb-tools for el9.aarch64 to fix missing package in official repo.
  • Added pg_filedump for el9.aarch64 to fix missing package in official repo.
  • Removed Extensions
  • pg_mooncake: Removed due to conflicts with pg_duckdb.
  • pg_top: Removed because of repeated version issues and quality concerns.
  • hunspell_pt_pt: Removed because of conflict with official PG dictionary files.
  • pgml: Disabled by default (no longer downloaded or installed).

API Changes

  • repo_url_packages now defaults to an empty array; packages are installed via OS package managers.
  • grafana_plugin_cache is deprecated; Grafana plugins are now installed via OS package managers.
  • grafana_plugin_list is deprecated for the same reason.
  • The 36-node “production” template has been renamed to simu.
  • Auto-generated code under node_id/vars now includes aarch64 support.
  • infra_packages now includes the pig CLI tool.
  • The configure command now updates the version numbers of pgsql-xxx aliases in auto-generated config files.
  • Update terraform templates with Makefile shortcuts and better provision experience

Bug Fix

  • Fix pgbouncer dashboard selector issue #474
  • Add --arg value support for pg-pitr by @waitingsong
  • Fix redis log message typo by @waitingsong

Checksums

c42da231067f25104b71a065b4a50e68  pigsty-pkg-v3.2.0.d12.aarch64.tgz
ebb818f98f058f932b57d093d310f5c2  pigsty-pkg-v3.2.0.d12.x86_64.tgz
d2b85676235c9b9f2f8a0ad96c5b15fd  pigsty-pkg-v3.2.0.el9.aarch64.tgz
649f79e1d94ec1845931c73f663ae545  pigsty-pkg-v3.2.0.el9.x86_64.tgz
24c0be1d8436f3c64627c12f82665a17  pigsty-pkg-v3.2.0.u22.aarch64.tgz
0b9be0e137661e440cd4f171226d321d  pigsty-pkg-v3.2.0.u22.x86_64.tgz
8fdc6a60820909b0a2464b0e2b90a3a6  pigsty-v3.2.0.tgz

Sources

2.19 - Pigsty v3.1.0

PG17 default, config simplification, Ubuntu24 & ARM support

Highlights

  • PostgreSQL 17 is now the default major version (17.2)
  • Ubuntu 24.04 system support
  • ARM architecture support: EL9, Debian12, Ubuntu 22.04
  • One-click Supabase self-hosting, new supabase.yml playbook
  • MinIO best practice improvements, config templates and Vagrant templates
  • Series of ready-to-use config templates with documentation
  • Allow specifying PG major version with -v|--version during configure
  • Adjusted default extension policy: pg_repack, wal2json, and pgvector installed by default
  • Greatly simplified repo_packages local repo build logic, allowing package group aliases in repo_packages
  • Provided WiltonDB, IvorySQL, PolarDB repo mirrors, simplifying installation
  • Database checksums enabled by default
  • Fixed ETCD and MINIO log panels

Software Upgrades

  • PostgreSQL 17.2, 16.6, 15.10, 14.15, 13.18, 12.22
  • PostgreSQL extension versions: see https://pgext.cloud/en
  • Patroni 4.0.4
  • MinIO 20241107 / MCLI 20241117
  • Rclone 1.68.2
  • Prometheus: 2.54.0 -> 3.0.0
  • VictoriaMetrics 1.102.1 -> 1.106.1
  • VictoriaLogs v0.28.0 -> 1.0.0
  • vslogcli 1.0.0
  • MySQL Exporter 0.15.1 -> 0.16.0
  • Redis Exporter 1.62.0 -> 1.66.0
  • MongoDB Exporter 0.41.2 -> 0.42.0
  • Keepalived Exporter 1.3.3 -> 1.4.0
  • DuckDB 1.1.2 -> 1.1.3
  • etcd 3.5.16 -> 3.5.17
  • tigerbeetle 16.8 -> 0.16.13

API Changes

  • repo_upstream: Generates defaults for each specific OS distribution: roles/node_id/vars
  • repo_packages: Allows aliases defined in package_map
  • repo_extra_packages: New default when unspecified, allows aliases defined in package_map
  • pg_checksum: Default changed to true, enabled by default
  • pg_packages: Default changed to: postgresql, wal2json pg_repack pgvector, patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • pg_extensions: Default changed to empty array []
  • infra_portal: Allows specifying path for home server, replacing default local repo path nginx_home (/www)

Sources

2.20 - Pigsty v3.0.4

PG17 extensions, OLAP suite, pg_duckdb

Features

  • Build & Packaging applicable extensions for PostgreSQL 17
  • Adding OLAP extensions: pg_duckdb & pg_parquet
  • Better supabase self-hosting experience
  • Allow pulling/load images after docker installation

Extensions

Check the new extension catalog: https://ext.pigsty.io

Statistics All PGDG PIGSTY MISC MISS PG17 PG16 PG15 PG14 PG13 PG12
EL Extension 338 134 130 4 7 298 334 336 328 319 310
Deb Extension 326 109 143 74 19 290 322 324 316 307 300
RPM Package 313 122 129 4 6 275 309 311 303 294 285
DEB Package 298 93 142 64 19 264 294 296 288 279 272

landscape

Upgrades

  • New PG Extensions
  • Bump Extension Version
    • pg_search 0.11.0
    • pg_analytics 0.2.0
    • plv8 3.2.3
    • supautils 2.5.0
    • icu_ext 1.9.0
    • redis_fdw 17
    • pg_failover_slots 1.1.0
    • pg_later 0.1.3
    • plprql 1.0.0
    • pg_vectorize 0.18.3
    • unit 7.7 -> 7.9
    • log_fdw 1.4
    • pg_duckdb 0.1.0
    • pg_graphql 1.5.9 (+17)
    • pg_jsonschema 0.3.2 (+17)
    • pgvectorscale 0.4.0 (+17)
    • wrappers 0.4.3 +pg17
    • pg_ivm 1.9
    • pg_timeseries 0.1.6
    • pgmq 1.4.4
    • pg_protobuf 16 17
    • pg_uuidv7 1.6
    • pg_readonly
    • pgddl 0.28
    • pg_safeupdate
    • pg_stat_monitor 2.1
    • pg_profile 4.7
    • system_stats 3.2
    • pg_auth_mon 3.0
    • login_hook 1.6
    • logerrors 2.1.3
    • pg-orphaned
    • pgnodemx 1.7
    • sslutils 1.4 (deb+pg16,17)
    • timestamp9 (deb)
  • Fix broken extensions for PG16/17
    • pg_mon
    • pg_uri
    • agg_for_vecs
    • quantile
    • lower_quantile
    • pg_protobuf
    • acl
    • pg_emailaddr
    • pg_zstd
    • smlar
    • geohash
    • pgsmcrypto (+17)
    • pg_tiktoken (+17)
    • pg_idkit (+17)
  • Update infra packages version
    • Grafana 11.3
    • duckdb 1.1.2
    • etcd 3.5.16
    • ferretdb 1.24.0
    • minio 20241013133411
    • mcli 2024101313411
    • pushgateway 1.10
    • tigerbeetle 0.16.8
    • mongodb_exporter 0.41.2
    • redis_exporter 1.64.1
    • vector 0.41.1
    • vip-manager 2.7
    • sealos 5.0.1

Checksums

5781f2c2f1a96912a9c656993b6299c4  pigsty-v3.0.4.tgz

Sources

2.21 - Pigsty v3.0.3

PostgreSQL 17, Etcd improvements, IvorySQL 3.4, PostGIS 3.5

New Feature:

  • PostgreSQL 17 support through config file
  • WiltonDB 16, compatible with PG 16
  • IvorySQL 3.4, sync with PostgreSQL 16.4
  • ETCD alerting & monitoring enhancement

Version Upgrade:

  • PostGIS 3.5
  • Grafana 11.2
  • duckdb 1.1
  • pg_search 0.10.2
  • pg_analytics 0.1.4

Sources

2.22 - Pigsty v3.0.2

Mini install mode, PolarDB 15 support, monitoring view updates

Features

  • Minimal Installation support with pgsql-min.yml (NODE, PGSQL, ETCD only)
  • Official support for the latest PolarDB for PostgreSQL Kernel v15
  • Optimize monitor.pg_table_bloat and monitor.pg_index_bloat with security definer wrap functions to avoid PolarDB statistics view permission issue.
  • Honor prometheus_enabled, grafana_enabled option in target register, not register when disabled.
  • Add PGDATABASE and PGPORT environment variable to /etc/profile.d/pgsql.sh, set to pg_primary_db (default postgres)

Changes

  • Remove PolarDB 11, CloudberryDB 1.5.4 packages from pgsql repo.
  • New dedicate repo for PolarDB 15, CloudberryDB 1.6.0, MSSQL, IvorySQL.

Bug Fix

  • Fix redis /etc/tmp.files.d entry name
  • Set PGHOST and PGPORT when managing pgbouncer users.
  • Remove support for pg_snakeoil due to clamv deps break on EL8
  • Remove role pgsql notify handler for ansible 2.9 compatibility

Checksums

MD5 (pigsty-v3.0.2.tgz) = e366b754ec9b57f5e22c5feadd8f0901

Sources

2.23 - Pigsty v3.0.1

Routine bug fixes, Patroni 4 support, Oracle compatibility improvements

v3.0.1 Released @ 2024-08-31

kernels

Features & Enhancement

  • Oracle Compatibility through PolarDB-O (3rd commercial kernel)
  • Rewrite monitoring views and SQL statements using Oracle-compatible SQL syntax
  • Patroni 4 support and adaptation
  • New extension pg_analytics enhances PostgreSQL with analytics capabilities via DuckDB
  • Added new extensions: odbc_fdw and jdbc_fdw, providing universal external data source connectivity
  • Added new kernel cloudberrydb (open-source fork by the original Greenplum developers)
  • Add a restart after PGSQL primary initialization to apply pg_param & pg_files, no need to reboot after provisioning a Supabase PG / PolarDB cluster.
  • Add new grafana plugin: volkovlabs-rss-datasource
  • Add new dashboard panel: Extensions in PGCAT databases
  • Bump Pev2 version to 1.12.1

Bug Fix

  • Fix Grafana 11.1.4 panel plugin failed to load by default
  • Fix BlackBox Exporter Ping probe failed on certain OS Distro (run as root rather than prometheus)
  • Make sure /var/run/postgresql and /var/run/redis temporary directory always auto-create after reboot
  • Fix cache.yml playbook not correctly remove outdated Patroni 3.0.4 RPM package
  • Correct description errors in some alerting rules
  • Remove outdated Bootstrap User/HBA parameters from Patroni configuration file
MD5 (pigsty-v3.0.1.tgz) = 277a05f8dc944b9b5ef99b682b300b8d
MD5 (pigsty-pkg-v3.0.1.d12.x86_64.tgz) = 6ca11ea3d3531f2d208fd7dd3b251234
MD5 (pigsty-pkg-v3.0.1.el8.x86_64.tgz) = 12aa6f2eaac46c907e544677ade1d81f
MD5 (pigsty-pkg-v3.0.1.el9.x86_64.tgz) = f1cc152e688ff94f984fb45b1ae28968
MD5 (pigsty-pkg-v3.0.1.u22.x86_64.tgz) = bad1ab8a54df467c46e7d750d92a56c1

Sources

2.24 - Pigsty v3.0.0

333 extensions, pluggable kernels, MSSQL/Oracle/PolarDB compatibility

Highlights

  • PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20
  • 340 PostgreSQL extensions available
  • EL/Debian extension ecosystem parity achieved
  • Pluggable kernels: Babelfish, IvorySQL, PolarDB support
  • Supabase now available on Debian systems
  • Pigsty Pro edition with extended OS and module support

Breaking Changes

  • Primary OS support: EL8/EL9, Debian 12, Ubuntu 22.04
  • Legacy systems (EL7, Debian 11, Ubuntu 20.04) require subscription
  • Default online installation; offline packages discontinued
  • Repository consolidation with GPG signing

API Changes

  • New pg_mode options: pgsql, citus, gpsql, mssql, ivory, polar
  • New parameters: pg_parameters, pg_files, repo_extra_packages
  • patroni_citus_db renamed to pg_primary_db
  • Enhanced: proxy_env, repo_url_packages, pg_databases.extensions
  • Auto-derived defaults for repo_upstream, repo_packages, infra_packages, node_default_packages
  • Bootstrap -k|--keep flag; Configure -m|--conf and -x|--proxy flags

Bug Fixes

  • OpenSSH CVE-2024-6387 auto-remediation
  • Loki high-cardinality label memory fix
  • EL8 Ansible dependency bootstrap fix
MD5 (pigsty-v3.0.0.tgz) = acc802fc2a47a838f09a39e7615ee4d9

Sources

2.25 - Pigsty v2.7.0

Extension explosion, 20+ new powerful extensions, Docker apps

Highlights

New powerful extensions, especially Rust/pgrx-developed ones:

C/C++ extensions:

New Features

  • Allow Pigsty to run in Docker VM images
  • ARM64 packages for INFRA & PGSQL modules on Ubuntu and EL
  • New installer script with Cloudflare download, version specification, better prompts
  • PGSQL PITR dashboard for PITR observability
  • Guardrails to prevent running playbooks on unmanaged nodes
  • Per-distro config files: el7, el8, el9, debian11, debian12, ubuntu20, ubuntu22

Docker App Templates

Software Upgrades

  • PostgreSQL 16.3
  • Patroni 3.3.0
  • pgBackRest 2.51
  • VIP-Manager v2.5.0
  • HAProxy 2.9.7
  • Grafana 10.4.2
  • Prometheus 2.51
  • Loki & Promtail: 3.0.0 (Warning: breaking changes!)
  • Alertmanager 0.27.0
  • BlackBox Exporter 0.25.0
  • Node Exporter 1.8.0
  • pgBackRest Exporter 0.17.0
  • DuckDB 0.10.2
  • etcd 3.5.13
  • minio-20240510014138 / mcli-20240509170424
  • pev2 v1.8.0 -> v1.11.0
  • pgvector 0.6.1 -> 0.7.0
  • pg_tle: v1.3.4 -> v1.4.0
  • hydra: v1.1.1 -> v1.1.2
  • duckdb_fdw: v1.1.0 recompiled for libduckdb 0.10.2
  • pg_bm25 0.5.6 -> pg_search 0.7.0
  • pg_analytics: 0.5.6 -> 0.6.1
  • pg_graphql: 1.5.0 -> 1.5.4
  • pg_net 0.8.0 -> 0.9.1
  • pg_sparse (deprecated)

Bug Fixes

  • Fixed variable whitespace in pg_exporters role
  • Fixed minio_cluster not commented in global config
  • Fixed EL7 template postgis34 should be postgis33
  • Fixed EL8 python3.11-cryptography dependency renamed to python3-cryptography
  • Fixed /pg/bin/pg-role not getting OS username in non-interactive shell
  • Fixed /pg/bin/pg-pitr not prompting -X -P options correctly

API Changes

  • New node_write_etc_hosts parameter for controlling /etc/hosts writes
  • New prometheus_sd_dir parameter for Prometheus static discovery directory
  • Configure script adds -x|--proxy for writing proxy info
  • Stopped parsing Nginx log detail labels in Promtail/Loki to avoid label cardinality explosion
  • Using Alertmanager API v2 instead of v1
  • Using /pg/cert/ca.crt instead of /etc/pki/ca.crt in PGSQL module

Offline Package Checksums

MD5 (pigsty-pkg-v2.7.0.el8.x86_64.tgz) = ec271a1d34b2b1360f78bfa635986c3a
MD5 (pigsty-pkg-v2.7.0.debian12.x86_64.tgz) = f3304bfd896b7e3234d81d8ff4b83577
MD5 (pigsty-pkg-v2.7.0.ubuntu22.x86_64.tgz) = 5b071c2a651e8d1e68fc02e7e922f2b3

Sources

2.26 - Pigsty v2.6.0

PG16 as default, ParadeDB & DuckDB extensions introduced

Highlights

Configuration Changes

  • Replaced node_repo_method with node_repo_modules, removed node_repo_local_urls
  • Temporarily disabled Grafana unified alerting to avoid “Database Locked” errors
  • New node_repo_modules parameter to specify upstream repos added to nodes
  • Removed node_local_repo_urls, functionality replaced by node_repo_modules & repo_upstream
  • Removed node_repo_method parameter, functionality replaced by node_repo_modules
  • Added new local source in repo_upstream, used via node_repo_modules to replace node_local_repo_urls
  • Reorganized node_default_packages, infra_packages, pg_packages, pg_extensions defaults
  • When replacing repo_upstream.baseurl, if EL8/9 PGDG minor-version-specific repos are available, use major.minor instead of major for $releasever for better minor version compatibility

Software Upgrades

  • Grafana 10.3
  • Prometheus 2.47
  • node_exporter 1.7.0
  • HAProxy 2.9.5
  • Loki / Promtail 2.9.4
  • minio-20240216110548 / mcli-20240217011557
  • etcd 3.5.11
  • Redis 7.2.4
  • Bytebase 2.13.2
  • DuckDB 0.10.0
  • FerretDB 1.19
  • Metabase: new Docker app template

PostgreSQL Extensions

  • PostgreSQL minor version upgrades: 16.2, 15.6, 14.11, 13.14, 12.18
  • PostgreSQL 16: now promoted to default major version
  • pg_exporter 0.6.1: security fix
  • Patroni 3.2.2
  • pgBadger 12.4
  • pgBackRest 2.50
  • vip-manager 2.3.0
  • PostGIS 3.4.2
  • TimescaleDB 2.14.1
  • Vector extension PGVector 0.6.0: added parallel HNSW index creation
  • New extension duckdb_fdw v1.1 for reading/writing DuckDB data
  • New extension pgsql-gzip for Gzip compression/decompression v1.0.0
  • New extension pg_sparse for efficient sparse vectors (ParadeDB) v0.5.6
  • New extension pg_bm25 for high-quality BM25 full-text search (ParadeDB) v0.5.6
  • New extension pg_analytics with SIMD + columnar storage for analytics (ParadeDB) v0.5.6
  • Upgraded AIML extension pgml to v2.8.1 with PG 16 support
  • Upgraded columnar extension hydra to v1.1.1 with PG 16 support
  • Upgraded graph extension age to v1.5.0 with PG 16 support
  • Upgraded GraphQL extension pg_graphql to v1.5.0 for Supabase support
MD5 (pigsty-v2.6.0.tgz) = 330e9bc16a2f65d57264965bf98174ff
MD5 (pigsty-pkg-v2.6.0.debian11.x86_64.tgz) = 81abcd0ced798e1198740ab13317c29a
MD5 (pigsty-pkg-v2.6.0.debian12.x86_64.tgz) = 7304f4458c9abd3a14245eaf72f4eeb4
MD5 (pigsty-pkg-v2.6.0.el7.x86_64.tgz) = f914fbb12f90dffc4e29f183753736bb
MD5 (pigsty-pkg-v2.6.0.el8.x86_64.tgz) = fc23d122d0743d1c1cb871ca686449c0
MD5 (pigsty-pkg-v2.6.0.el9.x86_64.tgz) = 9d258dbcecefd232f3a18bcce512b75e
MD5 (pigsty-pkg-v2.6.0.ubuntu20.x86_64.tgz) = 901ee668621682f99799de8932fb716c
MD5 (pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz) = 39872cf774c1fe22697c428be2fc2c22

Sources

2.27 - Pigsty v2.5.1

Routine minor update, PG16 key extension support

Following PostgreSQL v16.1, v15.5, 14.10, 13.13, 12.17, 11.22 routine minor version updates.

All important PostgreSQL 16 extensions are now in place (added pg_repack and timescaledb support).

  • Software updates:
    • PostgreSQL to v16.1, v15.5, 14.10, 13.13, 12.17, 11.22
    • Patroni v3.2.0
    • PgBackrest v2.49
    • Citus 12.1
    • TimescaleDB 2.13
    • Grafana v10.2.0
    • FerretDB 1.15
    • SealOS 4.3.7
    • Bytebase 2.11.1
  • Removed monitor schema prefix from PGCAT dashboard queries (allowing users to install pg_stat_statements elsewhere)
  • New wool.yml config template designed for Alibaba Cloud free 99 ECS single-node
  • Added python3-jmespath package for EL9 to fix jmespath missing after Ansible dependency update during bootstrap
MD5 (pigsty-pkg-v2.5.1.el7.x86_64.tgz) = 31ee48df1007151009c060e0edbd74de
MD5 (pigsty-pkg-v2.5.1.el8.x86_64.tgz) = a40f1b864ae8a19d9431bcd8e74fa116
MD5 (pigsty-pkg-v2.5.1.el9.x86_64.tgz) = c976cd4431fc70367124fda4e2eac0a7
MD5 (pigsty-pkg-v2.5.1.debian11.x86_64.tgz) = 7fc1b5bdd3afa267a5fc1d7cb1f3c9a7
MD5 (pigsty-pkg-v2.5.1.debian12.x86_64.tgz) = add0731dc7ed37f134d3cb5b6646624e
MD5 (pigsty-pkg-v2.5.1.ubuntu20.x86_64.tgz) = 99048d09fa75ccb8db8e22e2a3b41f28
MD5 (pigsty-pkg-v2.5.1.ubuntu22.x86_64.tgz) = 431668425f8ce19388d38e5bfa3a948c

Sources

2.28 - Pigsty v2.5.0

Ubuntu/Debian support: bullseye, bookworm, jammy, focal
curl https://get.pigsty.cc/latest | bash

Highlights

  • Ubuntu / Debian support: bullseye, bookworm, jammy, focal
  • CDN repo.pigsty.cc software repository providing RPM/DEB package downloads
  • Anolis OS support (compatible with EL 8.8)
  • PostgreSQL 16 replaces PostgreSQL 14 as the alternative primary supported version
  • New PGSQL Exporter / PGSQL Patroni dashboards, redesigned PGSQL Query dashboard
  • Extension updates:
    • PostGIS upgraded to 3.4 (EL8/EL9), EL7 remains on PostGIS 3.3
    • Removed pg_embedding as developer discontinued maintenance, recommend pgvector instead
    • New extension (EL): Point cloud plugin pointcloud support, natively available on Ubuntu
    • New extensions (EL): imgsmlr, pg_similarity, pg_bigm for search
    • Recompiled pg_filedump as PG version-independent package
    • Added hydra columnar storage extension, citus no longer installed by default
  • Software updates:
    • Grafana to v10.1.5
    • Prometheus to v2.47
    • Promtail/Loki to v2.9.1
    • Node Exporter to v1.6.1
    • Bytebase to v2.10.0
    • Patroni to v3.1.2
    • pgbouncer to v1.21.0
    • pg_exporter to v0.6.0
    • pgbackrest to v2.48.0
    • pgbadger to v12.2
    • pg_graphql to v1.4.0
    • pg_net to v0.7.3
    • FerretDB to v0.12.1
    • SealOS to 4.3.5
    • Supabase support to 20231013070755

Ubuntu Support Notes

Pigsty supports Ubuntu 22.04 (jammy) and 20.04 (focal) LTS versions with corresponding offline packages.

Compared to EL systems, some parameter defaults need explicit adjustment. See ubuntu.yml for details:

  • repo_upstream: Adjusted for Ubuntu/Debian package names
  • repo_packages: Adjusted for Ubuntu/Debian package names
  • node_repo_local_urls: Defaults to ['deb [trusted=yes] http://${admin_ip}/pigsty ./']
  • node_default_packages:
    • zlib -> zlib1g, readline -> libreadline-dev
    • vim-minimal -> vim-tiny, bind-utils -> dnsutils, perf -> linux-tools-generic
    • Added acl package to ensure Ansible permissions work correctly
  • infra_packages: All packages with _ replaced by -, postgresql-client-16 replaces postgresql16
  • pg_packages: Ubuntu conventionally uses - instead of _, no need to manually install patroni-etcd
  • pg_extensions: Extension names differ from EL, Ubuntu lacks passwordcheck_cracklib
  • pg_dbsu_uid: Ubuntu DEB packages don’t specify explicit UID, manual specification required, Pigsty defaults to 543

API Changes

Default value changes:

  • repo_modules now defaults to infra,node,pgsql,redis,minio, enabling all upstream sources

  • repo_upstream changed, now adds Pigsty Infra/MinIO/Redis/PGSQL modular software sources

  • repo_packages changed, removed unused karma,mtail,dellhw_exporter, removed PG14 main extensions, added PG16 main extensions, added virtualenv package

  • node_default_packages changed, now installs python3-pip by default

  • pg_libs: timescaledb removed from shared_preload_libraries, no longer auto-enabled by default

  • pg_extensions changed, Citus no longer installed by default, passwordcheck_cracklib installed by default, EL8,9 PostGIS default version upgraded to 3.4

    - pg_repack_${pg_version}* wal2json_${pg_version}* passwordcheck_cracklib_${pg_version}*
    - postgis34_${pg_version}* timescaledb-2-postgresql-${pg_version}* pgvector_${pg_version}*
  • All Patroni templates remove wal_keep_size parameter by default to avoid triggering Patroni 3.1.1 bug, functionality covered by min_wal_size

MD5 (pigsty-pkg-v2.5.0.el7.x86_64.tgz) = 87e0be2edc35b18709d7722976e305b0
MD5 (pigsty-pkg-v2.5.0.el8.x86_64.tgz) = e71304d6f53ea6c0f8e2231f238e8204
MD5 (pigsty-pkg-v2.5.0.el9.x86_64.tgz) = 39728496c134e4352436d69b02226ee8
MD5 (pigsty-pkg-v2.5.0.debian11.x86_64.tgz) = e3f548a6c7961af6107ffeee3eabc9a7
MD5 (pigsty-pkg-v2.5.0.debian12.x86_64.tgz) = 1e469cc86a19702e48d7c1a37e2f14f9
MD5 (pigsty-pkg-v2.5.0.ubuntu20.x86_64.tgz) = cc3af3b7c12f98969d3c6962f7c4bd8f
MD5 (pigsty-pkg-v2.5.0.ubuntu22.x86_64.tgz) = c5b2b1a4867eee624e57aed58ac65a80

Sources

2.29 - Pigsty v2.4.1

Supabase/PostgresML support with graphql, jwt, pg_net, vault

Supabase & PostgresML support, and other new extensions!

Pigsty-Distro-En

Highlights

  • Supabase support: run open-source Firebase alternative with external postgres managed by Pigsty: example config
  • PostgresML support: Run LLMs, vector operations, classical Machine Learning in Postgres.
  • GraphQL support: pg_graphql reflects a GraphQL schema from the existing SQL schema.
  • Async HTTP Client support pg_net enables asynchronous (non-blocking) HTTP/HTTPS requests with SQL
  • JWT support: pgjwt is the PostgreSQL implementation of JWT (JSON Web Tokens)
  • Vault support: vault can store encrypted secrets in the Vault
  • New component pg_filedump for pg 14 & 15, low-level data recovery tool for PostgreSQL
  • New extension hydra the columnar available for PG 13 - 15. (not packaged due to conflict with citus columnar)
  • Reduce offline packages size for el9 400MB by removing proj-data*
  • Bump FerretDB version to v1.10
  • Fix patroni v3.1.1 broken issue
7e3989a98b7b0cd213e7efa09a8e8ebc  pigsty-v2.4.1.tgz
efabe7632d8994f3fb58f9838b8f9d7d  pigsty-pkg-v2.4.1.el7.x86_64.tgz
ea78957e8c8434b120d1c8c43d769b56  pigsty-pkg-v2.4.1.el8.x86_64.tgz
4ef280a7d28872814e34521978b851bb  pigsty-pkg-v2.4.1.el9.x86_64.tgz

Sources

2.30 - Pigsty v2.4.0

PG16, RDS monitoring, new extensions: FTS/graph/HTTP/embedding

Highlights

  • PostgreSQL 16 GA released, Pigsty provides support
  • Monitor cloud databases: RDS for PostgreSQL and PolarDB with brand-new PGRDS dashboards
  • Commercial support and consulting services officially launched. First LTS version released, providing up to 5 years of support for subscribers
  • New extension: Apache AGE, openCypher graph query engine on PostgreSQL
  • New extension: zhparser, full text search for Chinese language
  • New extension: pg_roaringbitmap, roaring bitmap for PostgreSQL
  • New extension: pg_embedding, HNSW alternative to pgvector
  • New extension: pg_tle, admin/manage stored procedure extensions
  • New extension: pgsql-http, issue HTTP requests with SQL interface
  • Additional extensions: pg_auth_mon, pg_checksums, pg_failover_slots, pg_readonly, postgresql-unit, pg_store_plans, pg_uuidv7, set_user
  • Redis improvements: Sentinel monitoring support, automatic HA configuration for primary-replica clusters

API Changes

  • New parameter: REDIS.redis_sentinel_monitor — specify list of primaries monitored by Sentinel cluster

Bug Fixes

  • Fixed missing uid when registering datasources in Grafana 10.1
MD5 (pigsty-pkg-v2.4.0.el7.x86_64.tgz) = 257443e3c171439914cbfad8e9f72b17
MD5 (pigsty-pkg-v2.4.0.el8.x86_64.tgz) = 41ad8007ffbfe7d5e8ba5c4b51ff2adc
MD5 (pigsty-pkg-v2.4.0.el9.x86_64.tgz) = 9a950aed77a6df90b0265a6fa6029250

Sources

2.31 - Pigsty v2.3.1

PGVector with HNSW, PG16 RC1, doc refresh, Chinese docs, bug fixes

Highlights

  • pgvector updated to 0.5 with HNSW algorithm support
  • PostgreSQL 16 RC1 support (el8/el9)
  • Added SealOS to default packages for quick Kubernetes cluster deployment

Bug Fixes

  • Fixed infra.repo.repo_pkg task: downloads could be affected by existing /www/pigsty content when repo_packages contains * wildcards
  • Changed vip_dns_suffix default from .vip to empty string, so cluster name itself becomes the default Node cluster L2 VIP
  • modprobe watchdog and chown watchdog if patroni_watchdog_mode is required
  • When pg_dbsu_sudo = limit and patroni_watchdog_mode = required, grant database dbsu sudo for:
    • /usr/bin/sudo /sbin/modprobe softdog: Ensure softdog kernel module enabled when starting Patroni service
    • /usr/bin/sudo /bin/chown {{ pg_dbsu }} /dev/watchdog: Ensure watchdog ownership correct when starting Patroni service

Documentation Updates

  • Added updated content to English documentation
  • Added simplified Chinese built-in docs, fixed Chinese docs on pigsty.cc

Software Updates

  • PostgreSQL 16 RC1 for EL8/EL9
  • PGVector 0.5.0 with HNSW index support
  • TimescaleDB 2.11.2
  • Grafana 10.1.0
  • Loki & Promtail 2.8.4
  • Redis Stack 7.2 on el7/8
  • mcli-20230829225506 / minio-20230829230735
  • FerretDB 1.9
  • SealOS 4.3.3
  • pgBadger 1.12.2
MD5 (pigsty-pkg-v2.3.1.el7.x86_64.tgz) = ce69791eb622fa87c543096cdf11f970
MD5 (pigsty-pkg-v2.3.1.el8.x86_64.tgz) = 495aba9d6d18ce1ebed6271e6c96b63a
MD5 (pigsty-pkg-v2.3.1.el9.x86_64.tgz) = 38b45582cbc337ff363144980d0d7b64

Sources

2.32 - Pigsty v2.3.0

Node VIP, FerretDB, NocoDB, MySQL stub, CVE fixes

Highlights

  • INFRA: Added NODE/PGSQL VIP monitoring support
  • PGSQL: Fixed PostgreSQL CVE-2023-39417 via minor upgrades: 15.4, 14.9, 13.12, 12.16, and Patroni v3.1.0
  • NODE: Allow users to bind L2 VIP to node clusters using keepalived
  • REPO: Pigsty Yum repo optimized, site-wide HTTPS by default: get.pigsty.cc and demo.pigsty.cc
  • APP: Upgraded app/bytebase to v2.6.0, app/ferretdb to v1.8; added new app template: NocoDB, open-source Airtable
  • REDIS: Upgraded to v7.2, redesigned Redis dashboards
  • MONGO: Added basic support via FerretDB 1.8
  • MYSQL: Added Prometheus/Grafana/CA stubs for future integration

API Changes

Added new parameter group NODE.NODE_VIP with 8 new parameters:

  • NODE.VIP.vip_enabled: Enable VIP on this node cluster?
  • NODE.VIP.vip_address: Node VIP address in IPv4 format, required if VIP enabled
  • NODE.VIP.vip_vrid: Required, integer 1-255, must be unique within same VLAN
  • NODE.VIP.vip_role: master/backup, defaults to backup, used as initial role
  • NODE.VIP.vip_preempt: Optional, true/false, defaults to false, enable VIP preemption
  • NODE.VIP.vip_interface: Node VIP network interface to listen on, eth0 by default
  • NODE.VIP.vip_dns_suffix: Node VIP DNS name suffix, defaults to .vip
  • NODE.VIP.vip_exporter_port: Keepalived exporter listen port, defaults to 9650
MD5 (pigsty-pkg-v2.3.0.el7.x86_64.tgz) = 81db95f1c591008725175d280ad23615
MD5 (pigsty-pkg-v2.3.0.el8.x86_64.tgz) = 6f4d169b36f6ec4aa33bfd5901c9abbe
MD5 (pigsty-pkg-v2.3.0.el9.x86_64.tgz) = 4bc9ae920e7de6dd8988ca7ee681459d

Sources

2.33 - Pigsty v2.2.0

Dashboard & provisioning overhaul, UOS compatibility

Highlights

  • Monitoring Dashboard Overhaul: https://demo.pigsty.cc
  • Vagrant Sandbox Redesign: libvirt support with new config templates
  • Pigsty EL Yum Repos: Consolidated scattered RPMs, simplified installation/build process
  • OS Compatibility: Added UOS-v20-1050e support
  • New Config Template: 42-node production simulation configuration
  • Unified official PGDG Citus packages (el7)

Software Upgrades

  • PostgreSQL 16 beta2
  • Citus 12 / PostGIS 3.3.3 / TimescaleDB 2.11.1 / PGVector 0.44
  • Patroni 3.0.4 / pgBackRest 2.47 / pgBouncer 1.20
  • Grafana 10.0.3 / Loki/Promtail/logcli 2.8.3
  • etcd 3.5.9 / HAProxy v2.8.1 / Redis v7.0.12
  • MinIO 20230711212934 / mcli 20230711233044

Bug Fixes

  • Fixed Docker group permission issue 29434bd
  • Made infra OS user group supplementary rather than primary
  • Fixed Redis Sentinel systemd service auto-enable state 5c96feb
  • Relaxed bootstrap & configure checks, especially when /etc/redhat-release doesn’t exist
  • Upgraded to Grafana 10, fixing Grafana 9.x CVE-2023-1410
  • Added PG 14-16 command tags and error codes to CMDB pglog schema

API Changes

New variable:

  • INFRA.NGINX.nginx_exporter_enabled: Users can now disable nginx_exporter by setting this parameter

Default value changes:

  • repo_modules: node,pgsql,infra : Redis now provided by pigsty-el repo, no longer needs redis module
  • repo_upstream:
    • Added pigsty-el: EL version-independent RPMs: grafana, minio, pg_exporter, etc.
    • Added pigsty-misc: EL version-specific RPMs: redis, prometheus stack, etc.
    • Removed citus: PGDG now has complete EL7-EL9 Citus 12 support
    • Removed remi: Redis now provided by pigsty-el repo
  • repo_packages: Consolidated package lists (see source for details)
  • repo_url_packages:
  • node_default_packages: Updated package list
  • infra_packages: Updated package list
  • PGSERVICE in .pigsty replaced with PGDATABASE=postgres, allowing users to access specific instances from admin node using just IP address

Directory structure changes:

  • bin/dns and bin/ssh moved to vagrant/ directory
MD5 (pigsty-pkg-v2.2.0.el7.x86_64.tgz) = 5fb6a449a234e36c0d895a35c76add3c
MD5 (pigsty-pkg-v2.2.0.el8.x86_64.tgz) = c7211730998d3b32671234e91f529fd0
MD5 (pigsty-pkg-v2.2.0.el9.x86_64.tgz) = 385432fe86ee0f8cbccbbc9454472fdd

Sources

2.34 - Pigsty v2.1.0

PostgreSQL 12-16beta support

Highlights

  • PostgreSQL 16 beta support, plus support for versions 12-15
  • Added PGVector extension support for PG 12-15 for storing AI embeddings
  • Added 6 additional default extension panel/datasource plugins for Grafana
  • Added bin/profile script for remote profiling and flame graph generation
  • Added bin/validate for validating pigsty.yml configuration file correctness
  • Added bin/repo-add for quickly adding Yum repo definitions to nodes
  • PostgreSQL 16 observability: added pg_stat_io support and related monitoring dashboards

Software Upgrades

  • PostgreSQL 15.3, 14.8, 13.11, 12.15, 11.20, and 16 beta1
  • pgBackRest 2.46 / pgbouncer 1.19
  • Redis 7.0.11
  • Grafana v9.5.3
  • Loki / Promtail / Logcli 2.8.2
  • Prometheus 2.44
  • TimescaleDB 2.11.0
  • minio-20230518000536 / mcli-20230518165900
  • Bytebase v2.2.0

Improvements

  • When adding local user public keys, all id*.pub files are now added to remote machines (e.g., keys generated with elliptic curve algorithms)

Sources

2.35 - Pigsty v2.0.2

Added pgvector support, fixed MinIO CVE

Highlights

Use out-of-the-box pgvector to store AI Embeddings, index, and retrieve vectors.

Changes

  • New extension pgvector for storing AI embeddings and vector similarity search
  • Fixed MinIO CVE-2023-28432, using new policy API from 20230324
  • Added dynamic reload command for DNSMASQ systemd service
  • Updated PEV version to v1.8
  • Updated Grafana version to v9.4.7
  • Updated MinIO and MCLI versions to 20230324
  • Updated Bytebase version to v1.15.0
  • Updated monitoring dashboards and fixed dead links
  • Updated Aliyun Terraform template, default to RockyLinux 9
  • Using Grafana v9.4 Provisioning API
  • Added asciinema videos for many admin tasks
  • Fixed EL8 PostgreSQL broken dependencies: removed anonymizer_15 faker_15 pgloader
MD5 (pigsty-pkg-v2.0.2.el7.x86_64.tgz) = d46440a115d741386d29d6de646acfe2
MD5 (pigsty-pkg-v2.0.2.el8.x86_64.tgz) = 5fa268b5545ac96b40c444210157e1e1
MD5 (pigsty-pkg-v2.0.2.el9.x86_64.tgz) = c8b113d57c769ee86a22579fc98e8345

Sources

2.36 - Pigsty v2.0.1

v2 bug fixes, security enhancements, Grafana upgrade

Security improvements and bug fixes for v2.0.0.

Improvements

  • New pig logo to comply with PostgreSQL trademark policy
  • Grafana upgraded to v9.4 with better UI and bug fixes
  • Patroni upgraded to v3.0.1 with bug fixes
  • Grafana systemd service file reverted to rpm default
  • Use slower copy instead of rsync for Grafana dashboard sync, more reliable
  • Bootstrap now restores default repo files after execution
  • Added asciinema videos for various admin tasks
  • Security enhancement mode: restricted monitoring user permissions
  • New config template: dual.yml for two-node deployment
  • Enable log_connections and log_disconnections in crit.yml template
  • Enable $lib/passwordcheck in pg_libs in crit.yml template
  • Explicitly grant pg_monitor role monitoring view permissions
  • Remove default dbrole_readonly from dbuser_monitor to restrict monitoring user permissions
  • Patroni now listens on {{ inventory_hostname }} instead of 0.0.0.0
  • pg_listen now controls postgres/pgbouncer listen address
  • ${ip}, ${lo}, ${vip} placeholders now available in pg_listen
  • Aliyun terraform image upgraded from centos 7.9 to Rocky Linux 9
  • Bytebase upgraded to v1.14.0

Bug Fixes

  • Added missing advertise address for alertmanager
  • Fixed missing pg_mode variable when creating database users with bin/pgsql-user
  • Added -a password option for Redis cluster join task in redis.yml
  • Added missing default value in infra-rm.yml.remove infra data task
  • Fixed prometheus monitoring target definition file owner to prometheus user
  • Use admin user instead of root to delete DCS metadata
  • Fixed issue caused by Grafana 9.4 bug: missing Meta datasource

Sources

2.37 - Pigsty v2.0.0

Major architecture upgrade, compatibility/security/maintainability

Highlights

  • Perfect integration of PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 — distributed geospatial time-series hyper-converged database
  • Major OS compatibility improvements: supports EL7, 8, 9, plus RHEL, CentOS, Rocky, OracleLinux, AlmaLinux compatible distros
  • Security improvements: self-signed CA, global SSL network encryption, scram-sha-256 password auth, AES-encrypted backups, redesigned HBA rule system
  • Patroni upgraded to 3.0, providing native HA Citus distributed cluster support, FailSafe mode enabled by default — no fear of DCS failures causing global primary outages
  • Out-of-the-box PITR support based on pgBackRest, default support for local filesystem and dedicated MinIO/S3 cluster backups
  • New ETCD module: independently deployable, easy scaling, built-in monitoring and HA, completely replacing Consul as DCS for HA PG
  • New MINIO module: independently deployable, multi-disk multi-node support, S3 local replacement, also for centralized PostgreSQL backup repository
  • Significantly simplified configuration parameters, usable without defaults; templates auto-adjust host and PG parameters based on machine specs, HBA/service definitions more concise and universal
  • License changed from Apache License 2.0 to AGPL 3.0 due to Grafana and MinIO dependencies

Compatibility

  • Supports EL7, EL8, EL9 major versions with corresponding offline packages, default dev/test environment upgraded from EL7 to EL9
  • Supports more EL-compatible Linux distros: RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux, etc.
  • Source and offline package naming conventions changed — version, OS version, and architecture now reflected in package names
  • PGSQL: PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 now work together harmoniously
  • PGSQL: Patroni upgraded to 3.0 as PGSQL HA component
    • ETCD now default DCS, replacing Consul, eliminating one Consul Agent failure point
    • vip-manager upgraded to 2.1 using ETCDv3 API, completely deprecating ETCDv2 API; same for Patroni
    • Native HA Citus distributed cluster support using fully open-source Citus 11.2
    • FailSafe mode enabled by default — no fear of DCS failures causing global primary outages
  • PGSQL: pgBackrest v2.44 introduced for out-of-the-box PostgreSQL PITR
    • Default backup repo on primary’s backup directory, rolling two-day recovery window
    • Default alternative repo is dedicated MinIO/S3 cluster, rolling two-week recovery window; local use requires enabling MinIO module
  • ETCD now an independently deployed module with complete scale-out/in solution and monitoring
  • MINIO now an independently deployed module, multi-disk multi-node support, S3 local replacement, also for centralized backup repository
  • NODE module now includes haproxy, docker, node_exporter, promtail components
    • chronyd now replaces ntpd as default NTP service on all nodes
    • HAPROXY now part of NODE rather than PGSQL-exclusive, can expose services via NodePort
    • PGSQL module can now use dedicated centralized HAPROXY cluster for unified external service
  • INFRA module now includes dnsmasq, nginx, prometheus, grafana, loki components
    • DNSMASQ server in Infra module enabled by default, added as default DNS server for all nodes
    • Added blackbox_exporter for host PING probing, pushgateway for batch job metrics
    • loki and promtail now use Grafana’s default packages with official Grafana Echarts panel plugin
    • Monitoring support for PostgreSQL 15’s new observability points, added Patroni monitoring
  • Software version upgrades
    • PostgreSQL 15.2 / PostGIS 3.3 / TimescaleDB 2.10 / Citus 11.2
    • Patroni 3.0 / Pgbouncer 1.18 / pgBackRest 2.44 / vip-manager 2.1
    • HAProxy 2.7 / Etcd 3.5 / MinIO 20230131022419 / mcli 20230128202938
    • Prometheus 2.42 / Grafana 9.3 / Loki & Promtail 2.7 / Node Exporter 1.5

Security

  • Complete local self-signed CA: pigsty-ca for issuing internal component certificates
  • User creation/password changes no longer leave traces in log files
  • Nginx enables SSL support by default (for HTTPS, trust pigsty-ca in your system or use Chrome thisisunsafe)
  • ETCD fully enables SSL encryption for client and peer communication
  • PostgreSQL SSL support added and enabled by default, management connections use SSL
  • Pgbouncer SSL support added, disabled by default for performance
  • Patroni SSL support added, management API restricted to local and admin node access with password auth
  • PostgreSQL default password auth changed from md5 to scram-sha-256
  • Pgbouncer auth query support added for dynamic connection pool user management
  • pgBackRest uses AES-256-CBC encryption by default for remote centralized backup storage
  • High-security template provided: enforces global SSL and requires admin certificate login
  • All default HBA rules now explicitly defined in config files

Maintainability

  • Existing config templates auto-adjust optimizations based on machine specs (CPU/memory/storage)
  • Postgres/Pgbouncer/Patroni/pgBackRest log directories now dynamically configurable: default /pg/log/<type>/
  • Original IP placeholder 10.10.10.10 replaced with dedicated variable ${admin_ip}, referenceable in multiple places for switching backup admin nodes
  • region can be specified to use upstream mirrors from different regions for faster package downloads
  • Finer-grained upstream source addresses now allowed based on EL version, architecture, and region
  • Terraform templates for Alibaba Cloud and AWS China provided for one-click EC2 VM provisioning
  • Multiple Vagrant sandbox templates provided: meta, full, el7/8/9, minio, build, citus
  • New dedicated playbook: pgsql-monitor.yml for monitoring existing Postgres instances or RDS
  • New dedicated playbook: pgsql-migration.yml for seamless logical replication migration to Pigsty-managed clusters
  • Series of dedicated shell utilities added, wrapping common ops operations
  • All Ansible roles optimized for simplicity, readability, and maintainability — usable without default parameters
  • Additional Pgbouncer parameters can be defined at business database/user level

API Changes

Pigsty v2.0 has extensive changes: 64 new parameters, 13 removed, 17 renamed.

New Parameters

  • INFRA.META.admin_ip: Primary meta node IP address
  • INFRA.META.region: Upstream mirror region: default|china|europe
  • INFRA.META.os_version: Enterprise Linux version: 7,8,9
  • INFRA.CA.ca_cn: CA Common Name, default pigsty-ca
  • INFRA.CA.cert_validity: Certificate validity, default 20 years
  • INFRA.REPO.repo_enabled: Build local yum repo on infra node?
  • INFRA.REPO.repo_upstream: Upstream yum repo definition list
  • INFRA.REPO.repo_home: Local yum repo home directory, usually same as nginx_home ‘/www’
  • INFRA.NGINX.nginx_ssl_port: HTTPS listen port
  • INFRA.NGINX.nginx_ssl_enabled: Enable nginx HTTPS?
  • INFRA.PROMETHEUS.alertmanager_endpoint: Alertmanager endpoint (ip|domain):port format
  • NODE.NODE_TUNE.node_hugepage_ratio: Memory hugepage ratio, default 0 (disabled)
  • NODE.HAPROXY.haproxy_service: List of haproxy services to expose
  • PGSQL.PG_ID.pg_mode: pgsql cluster mode: pgsql,citus,gpsql
  • PGSQL.PG_BUSINESS.pg_dbsu_password: dbsu password, empty string means no dbsu password
  • PGSQL.PG_INSTALL.pg_log_dir: postgres log directory, default /pg/data/log
  • PGSQL.PG_BOOTSTRAP.pg_storage_type: SSD|HDD, default SSD
  • PGSQL.PG_BOOTSTRAP.patroni_log_dir: patroni log directory, default /pg/log
  • PGSQL.PG_BOOTSTRAP.patroni_ssl_enabled: Use SSL for patroni RestAPI?
  • PGSQL.PG_BOOTSTRAP.patroni_username: patroni rest api username
  • PGSQL.PG_BOOTSTRAP.patroni_password: patroni rest api password (important: change this)
  • PGSQL.PG_BOOTSTRAP.patroni_citus_db: Citus database managed by patroni, default postgres
  • PGSQL.PG_BOOTSTRAP.pg_max_conn: postgres max connections, auto uses recommended value
  • PGSQL.PG_BOOTSTRAP.pg_shmem_ratio: postgres shared memory ratio, default 0.25, range 0.1~0.4
  • PGSQL.PG_BOOTSTRAP.pg_rto: Recovery Time Objective, failover ttl, default 30s
  • PGSQL.PG_BOOTSTRAP.pg_rpo: Recovery Point Objective, max 1MB data loss by default
  • PGSQL.PG_BOOTSTRAP.pg_pwd_enc: Password encryption algorithm: md5|scram-sha-256
  • PGSQL.PG_BOOTSTRAP.pgbouncer_log_dir: pgbouncer log directory, default /var/log/pgbouncer
  • PGSQL.PG_BOOTSTRAP.pgbouncer_auth_query: If enabled, query pg_authid for biz users instead of populating user list
  • PGSQL.PG_BOOTSTRAP.pgbouncer_sslmode: pgbouncer client SSL: disable|allow|prefer|require|verify-ca|verify-full
  • PGSQL.PG_BOOTSTRAP.pg_service_provider: Dedicated haproxy node group name, or empty for local node
  • PGSQL.PG_BOOTSTRAP.pg_default_service_dest: Default service destination if svc.dest=‘default’
  • PGSQL.PG_BACKUP.pgbackrest_enabled: Enable pgbackrest?
  • PGSQL.PG_BACKUP.pgbackrest_clean: Remove pgbackrest data during init?
  • PGSQL.PG_BACKUP.pgbackrest_log_dir: pgbackrest log directory, default /pg/log
  • PGSQL.PG_BACKUP.pgbackrest_method: pgbackrest backup repo method: local or minio
  • PGSQL.PG_BACKUP.pgbackrest_repo: pgbackrest backup repo config
  • PGSQL.PG_DNS.pg_dns_suffix: pgsql dns suffix, default empty
  • PGSQL.PG_DNS.pg_dns_target: auto, primary, vip, none, or ad hoc ip
  • ETCD.etcd_seq: etcd instance identifier, required
  • ETCD.etcd_cluster: etcd cluster and group name, default etcd
  • ETCD.etcd_safeguard: Prevent purging running etcd instances?
  • ETCD.etcd_clean: Clean existing etcd during init?
  • ETCD.etcd_data: etcd data directory, default /data/etcd
  • ETCD.etcd_port: etcd client port, default 2379
  • ETCD.etcd_peer_port: etcd peer port, default 2380
  • ETCD.etcd_init: etcd initial cluster state: new or existing
  • ETCD.etcd_election_timeout: etcd election timeout, default 1000ms
  • ETCD.etcd_heartbeat_interval: etcd heartbeat interval, default 100ms
  • MINIO.minio_seq: minio instance identifier, required
  • MINIO.minio_cluster: minio cluster name, default minio
  • MINIO.minio_clean: Clean minio during init? default false
  • MINIO.minio_user: minio OS user, default minio
  • MINIO.minio_node: minio node name pattern
  • MINIO.minio_data: minio data directory, use {x…y} for multiple drives
  • MINIO.minio_domain: minio external domain, default sss.pigsty
  • MINIO.minio_port: minio service port, default 9000
  • MINIO.minio_admin_port: minio console port, default 9001
  • MINIO.minio_access_key: root access key, default minioadmin
  • MINIO.minio_secret_key: root secret key, default minioadmin
  • MINIO.minio_extra_vars: extra environment variables for minio server
  • MINIO.minio_alias: alias for local minio deployment
  • MINIO.minio_buckets: list of minio buckets to create
  • MINIO.minio_users: list of minio users to create

Removed Parameters

  • INFRA.CA.ca_homedir: CA home directory, now fixed to /etc/pki/
  • INFRA.CA.ca_cert: CA certificate filename, now fixed to ca.key
  • INFRA.CA.ca_key: CA key filename, now fixed to ca.key
  • INFRA.REPO.repo_upstreams: Replaced by repo_upstream
  • PGSQL.PG_INSTALL.pgdg_repo: Now handled by node playbooks
  • PGSQL.PG_INSTALL.pg_add_repo: Now handled by node playbooks
  • PGSQL.PG_IDENTITY.pg_backup: Unused and conflicted with partial names
  • PGSQL.PG_IDENTITY.pg_preflight_skip: No longer used, replaced by pg_id
  • DCS.dcs_name: Removed due to etcd usage
  • DCS.dcs_servers: Replaced by ad hoc group etcd
  • DCS.dcs_registry: Removed due to etcd usage
  • DCS.dcs_safeguard: Replaced by etcd_safeguard
  • DCS.dcs_clean: Replaced by etcd_clean

Renamed Parameters

  • nginx_upstream -> infra_portal
  • repo_address -> repo_endpoint
  • pg_hostname -> node_id_from_pg
  • pg_sindex -> pg_group
  • pg_services -> pg_default_services
  • pg_services_extra -> pg_services
  • pg_hba_rules_extra -> pg_hba_rules
  • pg_hba_rules -> pg_default_hba_rules
  • pgbouncer_hba_rules_extra -> pgb_hba_rules
  • pgbouncer_hba_rules -> pgb_default_hba_rules
  • vip_mode -> pg_vip_enabled
  • vip_address -> pg_vip_address
  • vip_interface -> pg_vip_interface
  • node_packages_default -> node_default_packages
  • node_packages_meta -> infra_packages
  • node_packages_meta_pip -> infra_packages_pip
  • node_data_dir -> node_data

Special thanks to Italian user @alemacci for contributions on SSL encryption, backup, multi-OS distro adaptation, and adaptive parameter templates!

Sources

2.38 - Pigsty v1.5.1

Grafana security hotfix

Highlights

IMPORTANT: Fixed the issue where CREATE INDEX|REINDEX CONCURRENTLY in PG14.0-14.3 could corrupt index data.

Pigsty v1.5.1 upgrades the default PostgreSQL version to 14.4. Strongly recommend updating ASAP.

Software Upgrades

  • postgres upgraded to 14.4
  • haproxy upgraded to 2.6.0
  • grafana upgraded to 9.0.0
  • prometheus upgraded to 2.36.0
  • patroni upgraded to 2.1.4

Bug Fixes

  • Fixed TYPO in pgsql-migration.yml
  • Removed PID config item from HAProxy configuration
  • Removed i686 packages from default packages
  • Enabled all Systemd Redis Services by default
  • Enabled all Systemd Patroni Services by default

API Changes

  • grafana_database and grafana_pgurl marked as deprecated API, will be removed in future versions

New Applications

  • wiki.js: Build local Wikipedia with Postgres
  • FerretDB: Provide MongoDB API using Postgres

Sources

2.39 - Pigsty v1.5.0

Docker application support

Highlights

  • Complete Docker support: enabled by default on meta node with many out-of-the-box software templates: bytebase, pgadmin, pgweb, postgrest, minio, etc.
  • Infrastructure self-monitoring: Nginx, ETCD, Consul, Prometheus, Grafana, Loki self-monitoring
  • CMDB upgrade: compatibility improvements, supports Redis cluster/Greenplum cluster metadata, config file visualization
  • Service discovery improvements: Consul can auto-discover all monitoring targets and integrate with Prometheus
  • Better cold backup support: default scheduled backup tasks, pg_probackup backup tool, one-click delayed replica creation
  • ETCD can now be used as PostgreSQL/Patroni DCS service, as an alternative to Consul
  • Redis playbook/role improvements: now allows init and remove operations for individual Redis instances, not just entire Redis nodes

Monitoring System

Dashboards

  • CMDB Overview: visualize Pigsty CMDB Inventory
  • DCS Overview: view Consul and ETCD cluster monitoring metrics
  • Nginx Overview: view Pigsty Web access metrics and logs
  • Grafana Overview: Grafana self-monitoring
  • Prometheus Overview: Prometheus self-monitoring
  • INFRA Dashboard redesigned to reflect overall infrastructure status

Monitoring Architecture

  • Now allows Consul for service discovery (when all services are registered to Consul)
  • All Infra components now enable self-monitoring and register to Prometheus and Consul via infra_register role
  • Metrics collector pg_exporter updated to v0.5.0, new features: scale and default, allowing metric multiplication factors and default values
  • pg_bgwriter, pg_wal, pg_query, pg_db, pgbouncer_stat time-related metrics now uniformly scaled to seconds from milliseconds/microseconds
  • Related counter metrics in pg_table now have default value 0 instead of NaN
  • pg_class metrics collector removed by default, related metrics added to pg_table and pg_index collectors
  • pg_table_size metrics collector now enabled by default with 300-second cache time

Deployment

  • New optional package docker.tgz with common app images: Pgadmin, Pgweb, Postgrest, ByteBase, Kong, Minio, etc.
  • New ETCD role: automatically deploys ETCD service on DCS Server nodes and integrates with monitoring
  • pg_dcs_type specifies DCS service for PG high-availability: Consul (default), ETCD (alternative)
  • node_crontab parameter for configuring node scheduled tasks like database backups, VACUUM, statistics collection
  • New pg_checksum option: when enabled, database cluster enables data checksums (previously only crit template enabled by default)
  • New pg_delay option: when instance is Standby Cluster Leader, this parameter configures a delayed replica
  • New pg_probackup package, default role replicator now has backup-related function permissions
  • Redis deployment split into two parts: Redis node and Redis instance, redis_port parameter controls specific instances
  • Loki and Promtail now installed via fpm-built RPM packages
  • DCS3 config template now uses a 3-node pg-meta cluster with a single-node delayed replica

Software Upgrades

  • PostgreSQL upgraded to 14.3
  • Redis upgraded to 6.2.7
  • PG Exporter upgraded to 0.5.0
  • Consul upgraded to 1.12.0
  • vip-manager upgraded to v1.0.2
  • Grafana upgraded to v8.5.2
  • Loki & Promtail upgraded to v2.5.0, using fpm packaging

Bug Fixes

  • Fixed Loki and Promtail default config filename issues
  • Fixed Loki and Promtail environment variable expansion issues
  • Complete English documentation translation and revision; documentation JS resources now served locally, no internet access required

API Changes

New Parameters

  • node_data_dir: Main data mount path, created if doesn’t exist
  • node_crontab_overwrite: Overwrite /etc/crontab instead of appending
  • node_crontab: Node crontab content to append or overwrite
  • nameserver_enabled: Enable nameserver on this infra node?
  • prometheus_enabled: Enable prometheus on this infra node?
  • grafana_enabled: Enable grafana on this infra node?
  • loki_enabled: Enable loki on this infra node?
  • docker_enable: Enable docker on this infra node?
  • consul_enable: Enable consul server/agent?
  • etcd_enable: Enable etcd server/client?
  • pg_checksum: Enable pg cluster data checksums?
  • pg_delay: Application delay when backup cluster leader replays replication

Parameter Redesign

*_clean is now a boolean parameter for cleaning existing instances during init.

*_safeguard is also a boolean parameter to prevent cleaning running instances during any playbook execution.

  • pg_exists_action -> pg_clean
  • pg_disable_purge -> pg_safeguard
  • dcs_exists_action -> dcs_clean
  • dcs_disable_purge -> dcs_safeguard

Parameter Renames

  • node_ntp_config -> node_ntp_enabled
  • node_admin_setup -> node_admin_enabled
  • node_admin_pks -> node_admin_pk_list
  • node_dns_hosts -> node_etc_hosts_default
  • node_dns_hosts_extra -> node_etc_hosts
  • node_dns_server -> node_dns_method
  • node_local_repo_url -> node_repo_local_urls
  • node_packages -> node_packages_default
  • node_extra_packages -> node_packages
  • node_packages_meta -> node_packages_meta
  • node_meta_pip_install -> node_packages_meta_pip
  • node_sysctl_params -> node_tune_params
  • app_list -> nginx_indexes
  • grafana_plugin -> grafana_plugin_method
  • grafana_cache -> grafana_plugin_cache
  • grafana_plugins -> grafana_plugin_list
  • grafana_git_plugin_git -> grafana_plugin_git
  • haproxy_admin_auth_enabled -> haproxy_auth_enabled
  • pg_shared_libraries -> pg_libs
  • dcs_type -> pg_dcs_type

Sources

2.40 - Pigsty v1.4.1

Bug fixes & full English documentation translation

Bug fixes / Docker support / English documentation

Docker is now enabled by default on the meta node, allowing you to spin up various software.

Bug Fixes

  • Fixed Promtail & Loki configuration variable issues
  • Fixed Grafana legacy alerts
  • Disabled nameserver by default
  • Renamed pg-alias.sh for Patroni shortcuts
  • Disabled exemplars queries for all dashboards
  • Fixed Loki data directory issue
  • Changed autovacuum_freeze_max_age from 100000000 to 1000000000

Sources

2.41 - Pigsty v1.4.0

MatrixDB support, separated INFRA/NODES/PGSQL/REDIS modules

Architecture

  • Decoupled system into 4 major categories: INFRA, NODES, PGSQL, REDIS, making Pigsty clearer and more extensible
  • Single-node deployment = INFRA + NODES + PGSQL
  • PGSQL cluster deployment = NODES + PGSQL
  • Redis cluster deployment = NODES + REDIS
  • Other database deployment = NODES + xxx (e.g., MONGO, KAFKA…)

Accessibility

  • CDN for mainland China
  • Use bash -c "$(curl -fsSL http://get.pigsty.cc/latest)" to get latest source
  • New download script to download and extract packages

Monitoring Enhancements

  • Split monitoring into 5 categories: INFRA, NODES, REDIS, PGSQL, APP
  • Logging enabled by default
    • loki and promtail now enabled by default, with prebuilt loki-rpm
  • Model and labels
    • Added hidden ds prometheus datasource variable to all dashboards
    • Added ip label to all metrics, used as join key between database and node metrics
  • INFRA Monitoring
    • INFRA main dashboard: INFRA Overview
    • Added Log dashboard: Logs Instance
    • PGLOG Analysis and PGLOG Session now treated as sample Pigsty APPs
  • NODES Monitoring Application
    • Pigsty can be used standalone as host monitoring software
    • Includes 4 core dashboards: Nodes Overview & Nodes Cluster & Nodes Instance & Nodes Alert
    • New identity variables for nodes: node_cluster and nodename
  • PGSQL Monitoring Enhancements
    • New PGSQL Cluster, simplified and focused on what matters in a cluster
    • New dashboard PGSQL Databases for cluster-level object monitoring
    • PGSQL Alert dashboard now focuses solely on PGSQL alerts
    • PGSQL Shard added to PGSQL
  • Redis Monitoring Enhancements
    • Added node monitoring to all Redis dashboards

MatrixDB Support

  • MatrixDB (Greenplum 7) can be deployed via pigsty-matrix.yml playbook
  • MatrixDB monitoring dashboard: PGSQL MatrixDB
  • Added sample configuration: pigsty-mxdb.yml

Software Upgrades

  • PostgreSQL 14.2
  • PostGIS 3.2
  • TimescaleDB 2.6
  • Patroni 2.1.3 (Prometheus metrics + failover slots)
  • HAProxy 2.5.5 (fixed stats errors, more metrics)
  • PG Exporter 0.4.1 (timeout parameters, etc.)
  • Grafana 8.4.4
  • Prometheus 2.33.4
  • Greenplum 6.19.4 / MatrixDB 4.4.0
  • Loki now provided as RPM package instead of ZIP archive

Bug Fixes

  • Removed Patroni’s Consul dependency, making migration to new Consul clusters easier
  • Fixed Prometheus bin/new script default data directory path
  • Added restart seconds in vip-manager systemd service
  • Fixed typos and tasks

API Changes

New Variables

  • node_cluster: Identity variable for node cluster
  • nodename_overwrite: If set, nodename will be set to node’s hostname
  • nodename_exchange: Exchange node hostnames between play hosts (in /etc/hosts)
  • node_dns_hosts_extra: Extra static DNS records easily overridable by single instance/cluster
  • patroni_enabled: If disabled, postgres & patroni bootstrap not executed during postgres role
  • pgbouncer_enabled: If disabled, pgbouncer not started during postgres role
  • pg_exporter_params: Extra URL parameters for pg_exporter when generating monitoring target URL
  • pg_provision: Boolean variable indicating whether to execute provisioning part of postgres role
  • no_cmdb: Used for infra.yml and infra-demo.yml playbooks, won’t create CMDB on meta node

Sources

2.42 - Pigsty v1.3.1

Dashboard polish, security fixes, and software upgrades

Monitoring

  • PGSQL & PGCAT dashboard improvements
  • Optimized PGCAT Instance & PGCAT Database layout
  • Added key metric panels to PGSQL Instance dashboard (consistent with PGSQL Cluster)
  • Added table/index bloat panels to PGCAT Database, removed PGCAT Bloat dashboard
  • Added index information to PGCAT Database dashboard
  • Fixed broken panels in Grafana 8.3
  • Added Redis index to Nginx homepage

Deployment

  • New infra-demo.yml playbook for one-click bootstrap
  • New infra-jupyter.yml playbook for optional JupyterLab server
  • New infra-pgweb.yml playbook for optional PGWeb server
  • Added pg alias on meta node for starting PostgreSQL cluster from admin user
  • Adjusted max_locks_per_transactions in all Patroni config templates per timescaledb-tune recommendations
  • Added citus.node_conninfo: 'sslmode=prefer' to config templates for SSL-free Citus usage
  • Added all extensions (except pgrouting) from PGDG14 to package list
  • Upgraded node_exporter to v1.3.1
  • Added PostgREST v9.0.0 for generating REST APIs from PostgreSQL schemas

Bug Fixes

  • Grafana security vulnerability fix (upgraded to v8.3.1, details)
  • Fixed pg_instance & pg_service issues in register role when starting playbook mid-run
  • Fixed Nginx homepage rendering on hosts without pg_cluster variable
  • Fixed style issues when upgrading to Grafana 8.3.1

Sources

2.43 - Pigsty v1.3.0

PGCAT overhaul & PGSQL enhancement & Redis beta support

Redis Support

Feature Description
Redis Deployment Standalone, Sentinel, and Cluster modes
Redis Monitoring Overview, Cluster, and Instance dashboards

PGCAT Overhaul

Dashboard Description
PGCAT Instance New instance-level catalog dashboard
PGCAT Database New database-level catalog dashboard
PGCAT Table Redesigned table-level dashboard

PGSQL Enhancements

Dashboard Improvements
PGSQL Cluster Added 10 key metric panels
PGSQL Instance Added 10 key metric panels
PGSQL Service Simplified and redesigned
Cross-references Navigation links between PGCAT and PGSQL dashboards

Monitor Deployment

  • Grafana datasources auto-register during monitor-only deployment

Software Upgrades

  • PostgreSQL 13 added to default package list
  • PostgreSQL upgraded to 14.1 as default
  • Added Greenplum RPM packages and dependencies
  • Added Redis RPM and source packages
  • Added perf as default package

Sources

2.44 - Pigsty v1.2.0

Default PGSQL version upgraded to 14

Core Features

  • Default to PostgreSQL 14
  • Default to TimescaleDB 2.5 extension
  • TimescaleDB and PostGIS enabled by default in CMDB

Monitor-Only Mode

  • Monitor existing PostgreSQL instances via connection URL only
  • pg_exporter deployed on local meta node
  • New PGSQL Cluster Monly dashboard for remote clusters

Software Upgrades

  • Grafana upgraded to 8.2.2
  • pev2 upgraded to v0.11.9
  • Promscale upgraded to 0.6.2
  • PgWeb upgraded to 0.11.9
  • New extensions: pglogical, pg_stat_monitor, orafce

Improvements

  • Auto-detect machine specs and use appropriate node_tune and pg_conf templates
  • Reworked bloat-related views, exposing more information
  • Removed TimescaleDB and Citus internal monitoring
  • Added pgsql-audit.yml playbook for creating audit reports
  • All config templates simplified to two: auto and demo

Bug Fixes

  • pgbouncer_exporter resource owner changed to {{ pg_dbsu }} instead of postgres
  • Fixed pg_exporter duplicate metrics on pg_table/pg_index during REINDEX TABLE CONCURRENTLY

Sources

2.45 - Pigsty v1.1.1

TimescaleDB upgrade and new Patroni templates
  • Replaced TimescaleDB apache version with timescale version
  • Upgraded Prometheus to 2.30
  • Fixed pg_exporter config directory owner issue (changed to {{ pg_dbsu }})

Upgrade Notes

The main change in this version is TimescaleDB — using the official TimescaleDB License (TSL) version to replace the Apache License v2 version from the PGDG repository.


## Sources

- [GitHub release](https://github.com/pgsty/pigsty/releases/tag/v1.1.1)
- [Pigsty v1.1 release article](https://pigsty.io/blog/pigsty/v1.1/)
- [Source comparison: `v1.1...v1.1.1`](https://github.com/pgsty/pigsty/compare/v1.1...v1.1.1)

2.46 - Pigsty v1.1.0

Homepage, JupyterLab, PGWEB, Pev2 & pgbadger

Feature Enhancements

  • Added pg_dummy_filesize to create filesystem space placeholder
  • Major homepage redesign
  • Added JupyterLab integration
  • Added PGWeb console integration
  • Added PgBadger support
  • Added PEV2 support, execution plan visualization tool
  • Added pglog tooling

Software Upgrades

  • PostgreSQL upgraded to v13.4 (with official PG14 support)
  • pgbouncer upgraded to v1.16 (metric definitions updated)
  • Grafana upgraded to v8.1.4
  • Prometheus upgraded to v2.29
  • node_exporter upgraded to v1.2.2
  • HAProxy upgraded to v2.1.1
  • Consul upgraded to v1.10.2
  • vip-manager upgraded to v1.0.1

API Changes

  • nginx_upstream now has different structure (incompatible)
  • New config entry: app_list, navigation entries rendered to homepage
  • New config entry: docs_enabled, setup local docs on default server
  • New config entry: pev2_enabled, setup local PEV2 tool
  • New config entry: pgbadger_enabled, create log summary/report directory
  • New config entry: jupyter_enabled, enable JupyterLab server on meta node
  • New config entry: jupyter_username, specify user to run JupyterLab
  • New config entry: jupyter_password, specify default password for JupyterLab
  • New config entry: pgweb_enabled, enable PGWeb server on meta node
  • New config entry: pgweb_username, specify user to run PGWeb
  • Renamed internal flag repo_exist to repo_exists
  • repo_address default value changed to pigsty instead of yum.pigsty
  • HAProxy access point changed to http://pigsty instead of http://h.pigsty

Sources

2.47 - Pigsty v1.0.1

Bug fixes and documentation improvements

2021-09-14

Documentation Update

  • Chinese documentation now available
  • Machine-translated English documentation now available

Bug Fixes

  • pgsql-remove no longer removes primary instances
  • Replaced pg_instance with pg_cluster + pg_seq (Start-At-Task could fail when pg_instance undefined)
  • Removed Citus from default shared preload libraries (Citus forces max_prepared_transaction to non-zero)
  • Added ssh sudo check in configure (now uses ssh -t sudo -n ls for permission check)
  • Fixed pg-backup script typo

Optimizations

  • Removed NTP sanity check alert (duplicate of ClockSkew)
  • Removed collector.systemd to reduce overhead

Sources

2.48 - Pigsty v1.0.0

v1 GA, Monitoring System Overhaul

Monitoring System Overhaul

  • New dashboards on Grafana 8.0
  • New metric definitions, added PG14 support
  • Simplified labeling system: static label set (job, cls, ins)
  • New alerting rules and derived metrics
  • Monitor multiple databases simultaneously
  • Real-time log search & csvlog analysis
  • Richly-linked dashboards, click through for drill-down/roll-up

Architecture Changes

  • Added Citus and TimescaleDB to default installation
  • Added PostgreSQL 14beta2 support
  • Simplified HAProxy admin page indexing
  • Decoupled infrastructure and PGSQL by adding new role register
  • Added new roles loki and promtail for logging
  • Added new role environ to setup environment for admin user on meta node
  • Default to static service discovery for Prometheus (instead of consul)
  • Added new role remove for graceful cluster and instance removal
  • Upgraded Prometheus and Grafana provisioning logic
  • Upgraded to vip-manager 1.0, node_exporter 1.2, pg_exporter 0.4, Grafana 8.0
  • Every database on every instance auto-registers as a Grafana datasource
  • Moved Consul registration to register role, changed Consul service tags
  • Added cmdb.sql as pg-meta baseline definition (CMDB & PGLOG)

Application Framework

  • Extensible framework for new features
  • Core app: PostgreSQL monitoring system pgsql
  • Core app: PostgreSQL catalog explorer pgcat
  • Core app: PostgreSQL csvlog analyzer pglog
  • Added sample app covid for COVID-19 data visualization
  • Added sample app isd for ISD weather data visualization

Other

  • Added JupyterLab for full Python data science environment
  • Added vonng-echarts-panel to restore ECharts support
  • Added wrapper scripts createpg, createdb, createuser
  • Added CMDB dynamic inventory scripts: load_conf.py, inventory_cmdb, inventory_conf
  • Removed obsolete playbooks: pgsql-monitor, pgsql-service, node-remove, etc.

API Changes

  • New variable: node_meta_pip_install
  • New variable: grafana_admin_username
  • New variable: grafana_database
  • New variable: grafana_pgurl
  • New variable: pg_shared_libraries
  • New variable: pg_exporter_auto_discovery
  • New variable: pg_exporter_exclude_database
  • New variable: pg_exporter_include_database
  • Variable renamed: grafana_urlgrafana_endpoint

Bug Fixes

  • Fixed default timezone Asia/Shanghai (CST) issue
  • Fixed nofile limits for pgbouncer & patroni
  • pgbouncer user list and database list now generated when running tag pgbouncer

Sources

2.49 - Pigsty v0.9.1

Three-step installer, PostgreSQL 13.3, and Grafana 7.5.6

Update package version:

  • PostgreSQL 13.3
  • Grafana 7.5.6

Add configure support.

Now install pigsty with 3 steps: download, configure and install:

curl -fsSL https://github.com/pgsty/pigsty/releases/download/v0.9.1/pigsty.tgz | gzip -d | tar -xC ~; cd ~/pigsty
./configure
make install

WoW! just like old time!

Sources

2.50 - Pigsty v0.9.0

Pigsty GUI, CLI, Logging Integration

New Stuff

  • One-liner install: curl -fsSL https://pigsty.cc/install | bash bootstraps everything.
  • pigsty-cli: wraps the common Ansible playbooks so you stop copy-pasting command lines. Still beta but already handy.
  • Loki + Promtail: Postgres, pgbouncer, and Patroni logs stream into Grafana with metrics extracted from log volume. infra-loki.yml and pgsql-promtail.yml wire things up.
  • Binary exporters: grab monitoring binaries with files/get_bin.sh if you don’t want to rely on repos.
  • Flight mode: once the meta node is initialized you can run bin/upgrade to switch into a dynamic inventory using data stored inside pg-meta.

Fixes

  • Cleaned up HAProxy health checks that were flooding PG and Patroni logs with connection reset noise.
  • Patroni logs now carry readable timestamps (no more millisecond fragments) and explicit time zones.
  • Monitoring queries run by dbuser_monitor log only when slower than 1s.
  • Grafana role refactor keeps the API stable, but uses CDN-hosted plugin bundles for faster installs.
  • Pgbouncer user creation now handles md5 passwords properly.
  • Hardened SQL templates for DB/user creation, fixed DNS orchestration edge cases, and tidied Makefile typos.

Knob Changes

  • node_disable_swap defaults to false; Pigsty no longer nukes swap by default.
  • node_sysctl_params stops writing kernel tunables unless you explicitly set them.
  • grafana_plugin: install now means “download from CDN if cache is missing.”
  • repo_url_packages pulls extra RPMs from the Pigsty CDN so installs inside China work out of the box.
  • proxy_env.no_proxy includes the CDN endpoints.
  • grafana_customize defaults to false; flip it on only if you have the Pigsty Pro UI bits.
  • node_admin_pk_current adds your current ~/.ssh/id_rsa.pub to the admin account.
  • Loki/Promtail knobs: loki_clean, loki_data_dir, promtail_enabled, promtail_clean, promtail_port, promtail_status_file, promtail_send_url.

Sources

2.51 - Pigsty v0.8.0

Service Provision

v0.8 finalizes the provisioning API. Services are completely rebuilt: instead of a hard-coded primary/replica pair you can now declare any number of services, plug in HAProxy, swap in an external load balancer, or hand off to a custom VIP controller. Everything else in the supply chain stabilizes on top of this model.

Service API

The old vip and haproxy knobs moved under the service role. pg_services (plus pg_services_extra) define each exposed endpoint—name, ports, selectors, health checks, weights, and balancer hints. Selectors are JMESPath filters over cluster members, and optional selector_backup pools handle fail-in when replicas are gone. Out of the box we ship primary, replica, default, and offline service definitions; swap dst_port to point at postgres, pgbouncer, or any number.

The HAProxy stanza keeps per-service tuning (maxconn, algorithm, timeouts) while VIP config distinguishes L2/L4 implementations so you can drop Pigsty behind an existing load balancer.

Database Interface Tweaks

Locales can now be split into lc_collate and lc_ctype so extensions like pg_trgm behave with non-C collations. The rest of the pg_databases schema stays the same—owner/template/encoding/connlimit/revokeconn/pgbouncer/comment—just with better defaults and inline comments.

Sources

2.52 - Pigsty v0.7.0

Monitor only deployment

Pigsty v0.7 focuses on plugging existing fleets into Pigsty’s observability stack. The new monitor-only flow lets you drop Pigsty dashboards onto databases that were provisioned elsewhere, and the declarative APIs for databases and users got a much needed redesign.

Highlights

  • Monitor-only deployment flow (monly) with its own playbook.
  • Split static Prometheus target files by cluster for easier hand-editing.
  • New helper playbooks: pgsql-createuser.yml and pgsql-createdb.yml for live clusters.
  • Database and user schema definitions now cover owner/template/locale knobs plus per-role capabilities.
  • Bug fixes for extension schema typos and pgbouncer reload.

API Changes

New options:

prometheus_sd_target: batch
exporter_install: none
exporter_repo_url: ''
node_exporter_options: '--no-collector.softnet --collector.systemd --collector.ntp --collector.tcpstat --collector.processes'
pg_exporter_url: ''
pgbouncer_exporter_url: ''

Removed option:

exporter_binary_install

Structures affected: pg_default_roles, pg_users, pg_databases. Also fixed the pg_default_privilegs typo → pg_default_privileges.

Monitor-Only Mode

When you just want Pigsty’s observability without touching the way databases were provisioned, run the monly flow. Infra still gets bootstrapped on the meta node via ./infra.yml, but database nodes skip the provisioning playbooks and only run ./pgsql-monitor.yml. Config gets much shorter—most of the time you only keep infra vars and a handful of monitoring knobs.

Database Provisioning Interface

pg_databases now exposes owner/template/encoding/locale/connlimit/allowconn knobs plus revokeconn (strip CONNECT from public) and inline comments. Use ./pgsql-createdb.yml -e pg_database=<name> to create or mutate live databases; the generated SQL lives inside /pg/tmp/pg-db-<name>.sql on the primary.

User Provisioning Interface

pg_users swapped usernamename, groupsroles, and exploded options into discrete flags (login, superuser, createdb, createrole, inherit, replication, bypassrls, connlimit). Users can also get expire_at / expire_in timers plus pgbouncer defaults to false. Apply changes through ./pgsql-createuser.yml -e pg_user=<name> which renders /pg/tmp/pg-user-<name>.sql on the primary.

Sources

2.53 - Pigsty v0.6.0

Architecture Enhancement

Pigsty v0.6 responds to user feedback with a redesigned provisioning path plus a monitoring stack that can sit beside any managed PG fleet—even a MyBase cluster built elsewhere.

Bug Fixes

  • Patroni no longer resets PG HBA on restart.
  • Fixed copy typos and the default primary for the pg-test sandbox cluster.
  • Patched the dashboard title typo on PG Overview.

Feature Work

  • Monitoring supply chain overhaul: Prometheus can now run fully static, exporters accept service_registry toggles, and exporter_binary_install lets you drop binaries without hitting repos. Each exporter has its own *_enabled flag.
  • Prometheus static discovery is rendered straight from inventory, so you can graft Pigsty dashboards onto any PG-as-a-service footprint.
  • HAProxy provisioning adds a global console at h.pigsty, optional auth, fallback routing to the primary when all replicas die, and per-service weight tuning.
  • ACL defaults now include dbrole_offline for slow-query/ETL workloads plus HBA rules that fence those workloads to marked nodes.
  • Component refresh: PostgreSQL 13.2, Prometheus 2.25, pg_exporter 0.3.2, node_exporter 1.1, Consul 1.9.3, and a faster ZJU PG mirror.

API Changes

New knobs:

service_registry: consul
prometheus_options: '--storage.tsdb.retention=30d'
prometheus_sd_method: consul
prometheus_sd_interval: 2s
pg_offline_query: false
node_exporter_enabled: true
pg_exporter_enabled: true
pgbouncer_exporter_enabled: true
dcs_disable_purge: false
pg_disable_purge: false
haproxy_weight: 100
haproxy_weight_fallback: 1

Removed knobs:

prometheus_metrics_path
prometheus_retention

Sources

2.54 - Pigsty v0.5.2

Playbook restructuring, VIP/HAProxy controls, and configuration cleanup

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Made pigsty.yml the default configuration and reorganized the standard sandbox.yml, infra.yml, and pgsql.yml workflows.
  • Split VIP management from HAProxy and added administrator authentication, traffic weights, and primary fallback controls.
  • Added the nameserver step to the main playbook and refreshed the accompanying documentation.

v0.5.2 is a tagged maintenance snapshot without a separately authored GitHub Release body.

Sources

2.55 - Pigsty v0.5.1

Dashboard fixes, the ZJU mirror, and documentation refresh

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Fixed PostgreSQL cluster and instance dashboard issues found after v0.5.0.
  • Switched the default PostgreSQL mirror to Zhejiang University for faster regional installs.
  • Refreshed the README and consolidated the v0.5 documentation snapshot.

v0.5.1 is a tagged maintenance snapshot without a separately authored GitHub Release body.

Sources

2.56 - Pigsty v0.5.0

Database Customize Template

Outline

  • The official docs site (http://pigsty.cc/) is live.
  • Database templating becomes fully declarative: define users, roles, databases, ACLs, extensions, and schemas in config.
  • The default access model is refined and HBA management now comes straight from Pigsty instead of Patroni.
  • Grafana provisioning switched from shoving a sqlite file to JSON provisioning via API.
  • Added the pg-cluster-replication dashboard to the open bundle.
  • CentOS 7.8 offline bundle: pkg.tgz.

Declarative Database Layouts

Multi-tenant headaches go away once everything is described as code. The new templates let you declare users, passwords, role hierarchies, DB defaults, extensions, schemas, and default privileges in YAML so a single config file replaces piles of runbooks. A stripped example:


## Sources

- [GitHub release](https://github.com/pgsty/pigsty/releases/tag/v0.5.0)
- [Pigsty v0.5 release article](https://pigsty.io/blog/pigsty/v0.5/)
- [Historical About / Release Note](https://pigsty.io/docs/about/release/#v050)
- [Source comparison: `v0.4.0...v0.5.0`](https://github.com/pgsty/pigsty/compare/v0.4.0...v0.5.0)

2.57 - Pigsty v0.4.0

PostgreSQL 13 Support, Official Documentation

Pigsty v0.4 is our second public beta. The observability stack was rebuilt around Grafana 7.3, and ten curated dashboards became the default open-source payload. pg_exporter 0.3.1 drives metrics, and the alert wiring has been cleaned up for the new Grafana release.

Open-Source Dashboards

The OSS build now exposes ten high-signal Grafana panels: PG Overview, Cluster, Service, Instance, Database, Query, Table, Table Catalog, Table Detail, and Node. Even with a lean set it easily outclasses most “enterprise” PG monitoring suites.

Software Refresh

  • PostgreSQL 13.1 + Patroni 2.0.1-4, with citus added to the repo
  • pg_exporter upgraded to 0.3.1
  • Grafana jumps to 7.3; a ton of compatibility fixes landed
  • Prometheus 2.23 with the new UI enabled
  • Consul 1.9 and related components updated

Other Improvements

  • Updated Prometheus alert rules and Alertmanager info links
  • Fixed a batch of bugs and typos
  • Added a tiny backup script for quick dumps

Offline Bundle

Need an air-gapped install? Grab the CentOS 7.8 package bundle (pkg.tgz) from GitHub and deploy from local media.

Sources

2.58 - Pigsty v0.3.0

Provisioning Solution GA

Pigsty v0.3.0 is the very first public preview. It packages a lean observability stack plus a reproducible offline bundle so you can spin up a real PostgreSQL lab without touching the public Internet.

Observability Stack

The open build ships eight curated Grafana dashboards: PG Overview, Cluster, Service, Instance, Database, Table Overview, Table Catalog, and a bare-metal Node view. Even with a trimmed set the coverage still crushes most “enterprise” monitoring stories.

Offline Bundle

Shipyard environments can fetch the CentOS 7.8 offline bundle directly from GitHub (pkg.tgz). Drop it on the management node and you have a deterministic install no matter how broken the mirrors are.

Sources

2.59 - Pigsty v0.0.5

Offline installation, Consul role, and HAProxy fixes

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Added an offline installation mode for environments without Internet access.
  • Introduced a dedicated Consul role and refreshed repository bootstrap behavior.
  • Added psql startup helpers, split PostgreSQL script tasks, and fixed HAProxy connection-reset noise.

This historical record is reconstructed from the v0.0.5 tag and its source comparison with v0.0.4.

Sources

2.60 - Pigsty v0.0.4

Ansible role split, networking, and repository refactor

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Split the former monolithic automation into dedicated Meta, Grafana, DNS, Nginx, and Prometheus roles.
  • Added static-network handling and revised the local repository upstream policy.
  • Expanded role documentation while keeping service registration templates aligned with the new layout.

This historical record is reconstructed from the v0.0.4 tag and its source comparison with v0.0.3.

Sources

2.61 - Pigsty v0.0.3

Interface and monitoring-schema improvements

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Improved the early Pigsty configuration interface and added the monitoring schema.
  • Added a Kubernetes playbook and refined the PostgreSQL initialization defaults.
  • Simplified the Vagrant bootstrap path and fixed several HAProxy, Patroni, and exporter registration details.

This historical tag predates the public release series. Its record is reconstructed from the tagged source and the commit history leading to v0.0.3.

Sources

2.62 - Pigsty v0.2.0

Provisioning refactor, etcd DCS, and HAProxy 2.2 support

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Refactored the infrastructure, node, repository, Patroni, PgBouncer, monitoring, and PostgreSQL initialization roles.
  • Added etcd as a DCS option, production/test inventory layouts, and configurable database superuser support.
  • Added Patroni pause handling, HAProxy 2.2 compatibility, and fixes for older CentOS 7 environments.

v0.2.0 predates curated GitHub Release notes. This record is reconstructed from the tagged source and the comparison with v0.1.0.

Sources

2.63 - Pigsty v0.1.0

Test-environment validation after the initial role-based restructuring

[!INFO]

This historical version is represented by its Git tag and source tree because no GitHub Release was published.

Highlights

  • Completed the first large-scale conversion from playbooks to reusable Ansible roles.
  • Established the initial PostgreSQL primary/standby, PgBouncer, monitoring, HAProxy, Keepalived, and repository workflows.
  • Validated the reorganized project in a production-like test environment.

v0.1.0 is an early engineering milestone rather than a curated GitHub Release. The notes are reconstructed from the tag and its commit history.

Sources

3 - Design

Architecture decisions and implementation notes for Pigsty engineering.

Design notes document the context, constraints, decisions, and trade-offs behind Pigsty’s architecture and implementation.