install_coldfront
The install_coldfront role installs the ColdFront tiered-storage
extension onto an existing pgEdge Distributed Postgres node, rather than
standing up a separate instance. ColdFront keeps recent data in native
Postgres partitions and archives older data to Iceberg on S3-compatible
storage, readable and writable through the same SQL with no application
changes.
The role performs the following tasks on inventory hosts:
- Install the ColdFront Postgres extension package, the
pgedge-coldfrontpackage holding the archiver, partitioner and compactor, andpgedge-python3-psycopg2.
Role Dependencies
This role requires the following roles for normal operation:
role_configprovides shared configuration variables to the role.init_serverrefuses apg_versionColdFront packages are not published for, before anything is installed.install_pgedgeinstalls the base Postgres package this role's package depends on.
When to Use
ColdFront is opt-in per cluster, through coldfront_enabled on the
pgedge group. Add this role to the pgedge play of a cluster playbook,
after install_pgedge and before setup_postgres. setup_postgres then
preloads ColdFront's libraries, and Postgres will not start with a library
it cannot find. Follow setup_postgres with setup_coldfront_db, and
setup_pgedge with setup_coldfront.
In the following example, the playbook installs and sets up ColdFront only
where coldfront_enabled is set:
- hosts: pgedge
collections:
- pgedge.platform
roles:
- install_repos
- install_pgedge
- role: install_coldfront
when: coldfront_enabled | bool
- setup_postgres
- role: setup_coldfront_db
when: coldfront_enabled | bool
- setup_pgedge
- role: setup_coldfront
when: coldfront_enabled | bool
ColdFront also needs Lakekeeper (install_lakekeeper and
setup_lakekeeper) serving before setup_coldfront runs, and an
S3-compatible object store reachable from this host. The
sample-playbooks/simple-cluster-coldfront playbook sets up Lakekeeper in a play of
its own ahead of this one, for the lakekeeper group. See the
ColdFront Configuration reference for the
settings both need.
Configuration
This role uses the following parameters from the inventory file:
| Parameter | Use Case |
|---|---|
pg_version |
Names the ColdFront extension package to install. |
The settings ColdFront runs on once installed, such as its database and its DuckDB role, belong to setup_coldfront.
See the Configuration Reference and ColdFront Configuration for descriptions and defaults.
How It Works
Supported releases
ColdFront packages exist for Postgres 16, 17, and 18, confirmed against the
package lists on apt.pgedge.com and dnf.pgedge.com. They are listed in
coldfront_supported_pg_versions, and init_server refuses
coldfront_enabled with any other pg_version, before anything is
installed, rather than letting this role fail with an opaque
package-manager error.
Package names differ by OS family
The Postgres extension package depends on the base Postgres package
install_pgedge already installed, plus pg_duckdb and the patched
DuckDB extensions, but its own name differs by OS family:
| OS Family | Package name |
|---|---|
| Debian | pgedge-postgresql-<pg_version>-coldfront |
| RHEL | pgedge-coldfront_<pg_version> |
Debian nests the version between postgresql and the extension name;
RHEL suffixes the version onto the extension name instead, and drops
postgresql from the name entirely. pgedge-coldfront (the archiver,
partitioner, and compactor) and pgedge-coldfront-duckdb-extensions (the
patched DuckDB extensions) share the same name on both OS families.
Idempotency
This role is idempotent and safe to re-run on inventory hosts. Package installation is a no-op once already done.