Install pgEdge Enterprise Postgres
Postgres with pgEdge extensions, operations tools, pgAdmin 4, AI toolkit and community extensions: dnf and apt packages for Enterprise Linux, Debian and Ubuntu on x86_64 and arm64.
Individual components have different names on dnf and apt, so a multi-release build uses the meta-packages.
None extra
Components not built for your selection are greyed out.
# Prerequisites: EPEL and CodeReady Builder (CRB)
sudo dnf install -y epel-release dnf-plugins-core
sudo dnf config-manager --set-enabled crb
# If the PGDG community repo is enabled, disable it first:
# sudo dnf config-manager --set-disabled 'pgdg*'
# Add the pgEdge repository
sudo dnf install -y https://dnf.pgedge.com/reporpm/pgedge-release-latest.noarch.rpm
# Install packages
sudo dnf install -y pgedge-enterprise-postgres_18
# Initialize, start on boot, and verify
sudo /usr/pgsql-18/bin/postgresql-18-setup initdb
sudo systemctl enable --now postgresql-18
sudo -u postgres /usr/pgsql-18/bin/psql -c "SELECT version();"Installing replaces any community Postgres packages on this host.
Free places to run the test
Every command above can be checked in a clean container before it touches a real server. The same smoke-test script runs anywhere Docker or Podman runs; these are the no-cost places to run it.
GitHub Actions
Standard hosted runners are free for public repositories, including native arm64 runners (ubuntu-24.04-arm), so the full distro × arch × version matrix runs without emulation.
GitHub Codespaces
Personal accounts include a monthly allowance of free core-hours. The default dev container ships with Docker, so paste the Docker tab commands into its terminal.
Interactive debuggingPlay with Docker
A free browser playground at labs.play-with-docker.com with 4-hour sessions. Sign in with a Docker Hub account, add an instance, paste the commands. amd64 only.
Zero setupKillercoda
Free Ubuntu playgrounds with Docker preinstalled at killercoda.com. Useful for a quick run when you can't install anything locally.
Zero setupYour own machine
Docker Desktop, Docker Engine or Podman. To test arm64 on an x86 host (slower, but it works), register QEMU once:docker run --privileged --rm tonistiigi/
#!/usr/bin/env bash
# pgEdge repository smoke test. Run as root inside a fresh container.
# PG Postgres major version (default 18)
# SCOPE postgres | all | none (meta-package) (default postgres)
# EXTRA individual packages, space separated (optional)
set -euo pipefail
PG="${PG:-18}"
SCOPE="${SCOPE:-postgres}"
EXTRA="${EXTRA:-}"
. /etc/os-release
# >>> apt-helpers (identical in every script that has it; the site build checks)
# OS repositories: tolerate errors. End-of-life releases lose their security and
# updates suites, or move to archive.debian.org, and apt-get update then fails
# even though everything needed is still there.
apt_update_base() {
local err=/tmp/apt-update.err f
apt-get update -qq 2> "$err" && return 0
apt-get update -qq -o Acquire::Check-Valid-Until=false 2> "$err" && return 0
if [ "${ID:-}" = debian ]; then
echo "note: ${VERSION_CODENAME:-this release} is no longer on the regular Debian mirrors; using archive.debian.org"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
[ -f "$f" ] && sed -i -E 's#https?://(deb|security)\.debian\.org#http://archive.debian.org#g' "$f"
done
apt-get update -qq -o Acquire::Check-Valid-Until=false 2> "$err" && return 0
fi
echo "warning: apt-get update reported errors for the OS repositories; continuing:" >&2
sed 's/^/ /' "$err" >&2
APT_BASE_NOTE="apt-get update had failed: $(grep -m1 -E '^(E|W): ' "$err" | cut -c1-160)"
return 0
}
# The pgEdge repository alone, so OS repository errors can't hide pgEdge errors (these are fatal).
# Extra arguments are passed to apt-get update.
apt_update_pgedge() {
local src
src=$(ls /etc/apt/sources.list.d/*pgedge* 2> /dev/null | head -1 || true)
[ -n "$src" ] || { echo "error: pgedge-release did not add an apt source" >&2; return 1; }
# apt-get update exits 0 even when a repository can't be fetched ("W: Failed to fetch ...
# old ones used instead"), so check its messages too
local out
out=$(apt-get update -o Dir::Etc::sourcelist="$src" -o Dir::Etc::sourceparts=/dev/null -o APT::Get::List-Cleanup=0 "$@" 2>&1) \
|| { printf '%s\n' "$out" >&2; return 1; }
if printf '%s\n' "$out" | grep -qE '^(E:|Err:|W: Failed to fetch|W: Some index files failed)'; then
printf '%s\n' "$out" | grep -E '^(E:|Err:|W:)' >&2
echo "error: could not refresh the pgEdge repository" >&2
return 1
fi
}
# <<< apt-helpers
echo "==> $PRETTY_NAME ($(uname -m)): Postgres $PG, meta-package: $SCOPE"
case "$ID" in
rocky|almalinux|ol|rhel)
MAJOR="${VERSION_ID%%.*}"
dnf install -y -q dnf-plugins-core
case "$ID" in
ol)
dnf install -y -q "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${MAJOR}.noarch.rpm"
dnf config-manager --set-enabled "ol${MAJOR}_codeready_builder" ;;
rhel)
dnf install -y -q "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${MAJOR}.noarch.rpm"
subscription-manager repos --enable "codeready-builder-for-rhel-${MAJOR}-$(uname -m)-rpms" ;;
*)
dnf install -y -q epel-release
dnf config-manager --set-enabled crb ;;
esac
dnf install -y -q https://dnf.pgedge.com/reporpm/pgedge-release-latest.noarch.rpm
PKGS="$EXTRA"
[ "$SCOPE" != "none" ] && PKGS="pgedge-enterprise-${SCOPE}_${PG} $PKGS"
# shellcheck disable=SC2086
dnf install -y $PKGS
BIN="/usr/pgsql-${PG}/bin"
DATA="/var/lib/pgsql/${PG}/data"
if [ -x "$BIN/initdb" ] && [ -x "$BIN/postgres" ]; then
# No systemd in containers: initdb and pg_ctl directly
su postgres -c "$BIN/initdb -D $DATA" > /dev/null
su postgres -c "$BIN/pg_ctl -D $DATA -l /tmp/pg.log -w start"
PSQL="$BIN/psql"
fi
;;
debian|ubuntu)
export DEBIAN_FRONTEND=noninteractive
apt_update_base
apt-get install -y -qq curl gnupg2 lsb-release ca-certificates > /dev/null
curl -fsSL -o /tmp/pgedge-release.deb \
https://apt.pgedge.com/repodeb/pgedge-release_latest_all.deb
apt-get install -y -qq /tmp/pgedge-release.deb > /dev/null
apt_update_pgedge
PKGS="$EXTRA"
[ "$SCOPE" != "none" ] && PKGS="pgedge-enterprise-${SCOPE}-${PG} $PKGS"
# shellcheck disable=SC2086
apt-get install -y $PKGS
if [ -x "/usr/lib/postgresql/${PG}/bin/postgres" ]; then
# The server package creates the "main" cluster; start it (no systemd here)
pg_ctlcluster "$PG" main start 2>/dev/null || true
pg_lsclusters
PSQL="psql"
fi
;;
*)
echo "Unsupported distribution: $ID" >&2; exit 2 ;;
esac
echo "==> Installed pgEdge packages"
if command -v rpm > /dev/null; then rpm -qa 'pgedge-*' | sort; else dpkg -l 'pgedge-*' | awk '/^ii/{print $2" "$3}'; fi
if [ -n "${PSQL:-}" ]; then
echo "==> Server check"
su postgres -c "$PSQL -Atc 'SELECT version();'"
su postgres -c "$PSQL -Atc \"SELECT 'available extensions: ' || coalesce(string_agg(name, ', ' ORDER BY name), 'none')
FROM pg_available_extensions
WHERE name IN ('spock','snowflake','lolor','vector','postgis','pgaudit','vectorizer');\""
else
echo "==> No Postgres server package selected; skipped the database check"
fi
echo "==> PASS"# Installs pgEdge packages from dnf.pgedge.com / apt.pgedge.com
# in clean containers on every supported distro, arch and Postgres version.
name: pgEdge repo smoke test
on:
workflow_dispatch:
pull_request:
schedule:
- cron: "0 3 * * *" # nightly, catches repo regressions early
jobs:
smoke:
name: ${{ matrix.image }} / ${{ matrix.arch }} / PG ${{ matrix.pg }}
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
arch: [amd64, arm64]
pg: [16, 17, 18]
image:
- rockylinux/rockylinux:9
- rockylinux/rockylinux:10
- almalinux:9
- almalinux:10
- oraclelinux:9
- oraclelinux:10
- debian:bookworm
- debian:trixie
- ubuntu:22.04
- ubuntu:24.04
- ubuntu:26.04
steps:
- uses: actions/checkout@v4
- name: Install from the pgEdge repo and start Postgres
run: |
docker run --rm \
-e PG=${{ matrix.pg }} \
-e SCOPE=postgres \
-v "$PWD/ci/pgedge-smoke.sh:/pgedge-smoke.sh:ro" \
${{ matrix.image }} bash /pgedge-smoke.sh
# Heavier check: the full "all components" meta-package on the newest PG.
full:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
image: [rockylinux/rockylinux:9, debian:bookworm, ubuntu:24.04]
steps:
- uses: actions/checkout@v4
- run: |
docker run --rm -e PG=18 -e SCOPE=all \
-v "$PWD/ci/pgedge-smoke.sh:/pgedge-smoke.sh:ro" \
${{ matrix.image }} bash /pgedge-smoke.shThe workflow runs a short job for every image, architecture and Postgres version. In a public repository that costs nothing; in a private one it draws from your Actions minutes, so trim the matrix or drop arm64 there.
How the offline repository works
The bundle is a complete package repository for one release and architecture: your selection, every dependency, and nginx. It needs no internet access on the machines that use it.
| On the offline machine | What it does |
|---|---|
sudo ./ | Registers the bundle as a dnf or apt repository on this machine. Installs nothing. |
sudo ./ | Installs nginx from the bundle and serves the repository to other machines on your network (port 80, or serve 8080). Prints the commands for those machines. |
sudo ./ | Removes the repository definition and the nginx site. Packages already installed stay. |
./ | Shows what is configured. |
./ | Only writes client configs for this bundle served at URL, from any machine and any web server. Used to serve many bundles from one machine. |
Same release and architecture
Build the bundle for the release and architecture of the offline machines. setup-repo.sh refuses to run anywhere else.
Signatures
On Enterprise Linux, packages are checked with the signing keys shipped in the bundle. The apt repository is unsigned and marked trusted; sign it with your own key if your policy requires that.
Every release at once
Choose Every release under Bundle for to build one bundle per release and architecture in a single run, then serve them all from one machine with setup-repo.sh client-files. To keep a live copy instead, use the Mirror page.
Browse the pgEdge repositories
What each repository contains: every package with its version, size and path in the repository, as read from the live repositories by the catalog job.
Collection report: 4 of 4 collected
| Repository | Result | Details |
|---|---|---|
el9-amd64 | collected | 1118 package versions, 539 packages |
el9-arm64 | collected | 1118 package versions, 539 packages |
el10-amd64 | collected | 1103 package versions, 524 packages |
el10-arm64 | collected | 1103 package versions, 524 packages |
| Folder | Section | Description | |||
|---|---|---|---|---|---|
| pgedge-ace | Operations | Active Consistency Engine for cluster data validation | |||
| pgedge-ai-dba-alerter | New in the repo | pgEdge AI DBA Alerter | |||
| pgedge-ai-dba-client | New in the repo | pgEdge AI DBA Web Client | |||
| pgedge-ai-dba-collector | New in the repo | pgEdge AI DBA Collector | |||
| pgedge-ai-dba-server | New in the repo | pgEdge AI DBA Server | |||
| pgedge-ai-kb | New in the repo | pgEdge AI Knowledgebase database | |||
| pgedge-ai-kb-gemini-gemini-embedding-001 | New in the repo | pgEdge AI Knowledgebase database (gemini-gemini-embedding-001) | |||
| pgedge-ai-kb-ollama-nomic-embed-text | New in the repo | pgEdge AI Knowledgebase database (ollama-nomic-embed-text) | |||
| pgedge-ai-kb-openai-text-embedding-3-small | New in the repo | pgEdge AI Knowledgebase database (openai-text-embedding-3-small) | |||
| pgedge-ai-kb-voyage-voyage-3 | New in the repo | pgEdge AI Knowledgebase database (voyage-voyage-3) | |||
| pgedge-anonymizer | AI toolkit | Data anonymization and masking | |||
| pgedge-CGAL-demos-source | New in the repo | Examples and demos of CGAL algorithms | |||
| pgedge-coldfront_18 | pgEdge extensions | ColdFront tiered-storage command-line tools | |||
| pgedge-coldfront-duckdb-extensions | pgEdge extensions | Patched DuckDB extensions for ColdFront tiered storage | |||
| pgedge-consul | New in the repo | Consul is a tool for service discovery and configuration. Consul is distributed, highly available, and extremely scalable. | |||
| pgedge-control-plane | Operations | pgEdge Control Plane | |||
| pgedge-docloader | AI toolkit | Document loading utility | |||
| pgedge-enterprise-all_16 | Meta-packages | pgEdge Enterprise PostgreSQL18 all components | |||
| pgedge-enterprise-all_17 | Meta-packages | pgEdge Enterprise PostgreSQL18 all components | |||
| pgedge-enterprise-all_18 | Meta-packages | pgEdge Enterprise PostgreSQL18 all components | |||
| pgedge-enterprise-postgres_16 | Meta-packages | pgEdge Enterprise PostgreSQL18 server components | |||
| pgedge-enterprise-postgres_17 | Meta-packages | pgEdge Enterprise PostgreSQL18 server components | |||
| pgedge-enterprise-postgres_18 | Meta-packages | pgEdge Enterprise PostgreSQL18 server components | |||
| pgedge-etcd | Operations | A distributed, reliable key-value store for distributed systems | |||
| pgedge-gdal311 | New in the repo | GIS file format library | |||
| pgedge-gdal311-java | New in the repo | Java modules for the GDAL file format library | |||
| pgedge-gdal311-javadoc | New in the repo | Javadocs for pgedge-gdal311 | |||
| pgedge-gdal311-libs | New in the repo | GDAL file format library | |||
| pgedge-gdal311-python-tools | New in the repo | Python tools for the GDAL file format library | |||
| pgedge-gdal311-python3 | New in the repo | Python modules for the GDAL file format library | |||
| pgedge-gdal312 | New in the repo | GIS file format library | |||
| pgedge-gdal312-java | New in the repo | Java modules for the GDAL file format library | |||
| pgedge-gdal312-javadoc | New in the repo | Javadocs for pgedge-gdal312 | |||
| pgedge-gdal312-libs | New in the repo | GDAL file format library | |||
| pgedge-gdal312-python-tools | New in the repo | Python tools for the GDAL file format library | |||
| pgedge-gdal312-python3 | New in the repo | Python modules for the GDAL file format library | |||
| pgedge-geos313 | New in the repo | GEOS is a C++ port of the Java Topology Suite | |||
| pgedge-geos314 | New in the repo | GEOS is a C++ port of the Java Topology Suite | |||
| pgedge-lakekeeper | New in the repo | Lakekeeper - Apache Iceberg REST Catalog | |||
| pgedge-libgeotiff17 | New in the repo | GeoTIFF format library | |||
| pgedge-libpq5 | New in the repo | PostgreSQL Client Library | |||
| pgedge-librttopo | New in the repo | Create and manage SQL/MM topologies | |||
| pgedge-libspatialite50 | New in the repo | Enables SQLite to support spatial data | |||
| pgedge-lolor_16 | pgEdge extensions | Large-object logical replication | |||
| pgedge-lolor_16-llvmjit | pgEdge extensions | LLVM JIT (just-in-time compilation) support for LOLOR | |||
| pgedge-lolor_17 | pgEdge extensions | Large-object logical replication | |||
| pgedge-lolor_17-llvmjit | pgEdge extensions | LLVM JIT (just-in-time compilation) support for LOLOR | |||
| pgedge-lolor_18 | pgEdge extensions | Large-object logical replication | |||
| pgedge-lolor_18-llvmjit | pgEdge extensions | LLVM JIT (just-in-time compilation) support for LOLOR | |||
| pgedge-nla-cli | AI toolkit | Natural Language API CLI | |||
| pgedge-nla-web | AI toolkit | Natural Language API web UI | |||
| pgedge-ogdi41 | New in the repo | Open Geographic Datastore Interface | |||
| pgedge-patroni | Operations | High-availability manager | |||
| pgedge-patroni-aws | Operations | Related components to use patroni on AWS | |||
| pgedge-patroni-consul | Operations | Related components to use patroni with Consul | |||
| pgedge-patroni-etcd | Operations | Related components to use patroni with etcd | |||
| pgedge-patroni-zookeeper | Operations | Related components to use patroni with Zookeeper | |||
| pgedge-pg_cron_16 | Community extensions | Run periodic jobs in PostgreSQL | |||
| pgedge-pg_cron_16-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for Pg cron | |||
| pgedge-pg_cron_17 | Community extensions | Run periodic jobs in PostgreSQL | |||
| pgedge-pg_cron_17-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for Pg cron | |||
| pgedge-pg_cron_18 | Community extensions | Run periodic jobs in PostgreSQL | |||
| pgedge-pg_cron_18-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for Pg cron | |||
| pgedge-pg-duckdb_16 | Community extensions | DuckDB analytics engine embedded in PostgreSQL | |||
| pgedge-pg-duckdb_17 | Community extensions | DuckDB analytics engine embedded in PostgreSQL | |||
| pgedge-pg-duckdb_18 | Community extensions | DuckDB analytics engine embedded in PostgreSQL | |||
| pgedge-pg-stat-monitor_16 | Community extensions | Statistics collector for PostgreSQL | |||
| pgedge-pg-stat-monitor_17 | Community extensions | Statistics collector for PostgreSQL | |||
| pgedge-pg-stat-monitor_18 | Community extensions | Statistics collector for PostgreSQL | |||
| pgedge-pg-tokenizer_16 | Community extensions | PostgreSQL tokenizer extension for full-text search | |||
| pgedge-pg-tokenizer_17 | Community extensions | PostgreSQL tokenizer extension for full-text search | |||
| pgedge-pg-tokenizer_18 | Community extensions | PostgreSQL tokenizer extension for full-text search | |||
| pgedge-pg-vectorize_16 | Community extensions | Full-text and semantic search on any Postgres | |||
| pgedge-pg-vectorize_17 | Community extensions | Full-text and semantic search on any Postgres | |||
| pgedge-pg-vectorize_18 | Community extensions | Full-text and semantic search on any Postgres | |||
| pgedge-pgadmin4 | pgAdmin 4 | Web-based management tool | |||
| pgedge-pgadmin4-desktop | pgAdmin 4 | Desktop mode | |||
| pgedge-pgadmin4-server | pgAdmin 4 | Core server component | |||
| pgedge-pgadmin4-web | pgAdmin 4 | Server/web mode only | |||
| pgedge-pgaudit_16 | Community extensions | Session and object audit logging | |||
| pgedge-pgaudit_16-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgAudit | |||
| pgedge-pgaudit_17 | Community extensions | Session and object audit logging | |||
| pgedge-pgaudit_17-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgAudit | |||
| pgedge-pgaudit_18 | Community extensions | Session and object audit logging | |||
| pgedge-pgaudit_18-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgAudit | |||
| pgedge-pgbackrest | Operations | Backup and restore | |||
| pgedge-pgbouncer | Operations | Connection pooler | |||
| pgedge-pgmq_16 | Community extensions | A lightweight message queue. Like AWS SQS and RSMQ but on Postgres. | |||
| pgedge-pgmq_17 | Community extensions | A lightweight message queue. Like AWS SQS and RSMQ but on Postgres. | |||
| pgedge-pgmq_18 | Community extensions | A lightweight message queue. Like AWS SQS and RSMQ but on Postgres. | |||
| pgedge-pgvector_16 | Community extensions | Vector similarity search | |||
| pgedge-pgvector_16-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgvector | |||
| pgedge-pgvector_17 | Community extensions | Vector similarity search | |||
| pgedge-pgvector_17-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgvector | |||
| pgedge-pgvector_18 | Community extensions | Vector similarity search | |||
| pgedge-pgvector_18-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for pgvector | |||
| pgedge-pldebugger_16 | Community extensions | PL/pgSQL debugger server-side code | |||
| pgedge-pldebugger_16-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for Pldebugger | |||
| pgedge-pldebugger_17 | Community extensions | PL/pgSQL debugger server-side code | |||
| pgedge-pldebugger_17-llvmjit | Community extensions | LLVM JIT (just-in-time compilation) support for Pldebugger |
Enterprise Linux 9 has no listings, so only the package names the installer knows about are shown.
Packages by component
Every component in the repository, grouped by what it does, with its name on each platform. Versioned names are shown for PostgreSQL 18; the wizard substitutes your version.
| Component | What it does | Enterprise Linux (dnf) | Debian / Ubuntu (apt) |
|---|---|---|---|
| Meta-packages | |||
| Enterprise Postgres: server + core extensions | pgEdge Enterprise PostgreSQL18 server components | pgedge-enterprise-postgres_18 | pgedge-enterprise-postgres-18 |
| Enterprise All: everything | pgEdge Enterprise PostgreSQL18 all components | pgedge-enterprise-all_18 | pgedge-enterprise-all-18 |
| Postgres | |||
| Postgres server | Database server binaries | pgedge-postgresql18-server | pgedge-postgresql-18 |
| Postgres client | psql and client libraries | pgedge-postgresql18 | pgedge-postgresql-client-18 |
| Postgres client (JIT) | LLVM JIT (just-in-time compilation) support for Postgres client | pgedge-postgresql18-llvmjit | Not packaged |
| Postgres contrib | Bundled contrib extensions | pgedge-postgresql18-contrib | Included in the server package |
| Postgresql all | metapackage depending on all PostgreSQL server packages | Not packaged | pgedge-postgresql-all |
| Postgresql client | front-end programs for PostgreSQL (supported version) | Not packaged | pgedge-postgresql-client |
| Postgresql client common | manager for multiple PostgreSQL client versions | Not packaged | pgedge-postgresql-client-common |
| Postgresql common | PostgreSQL database-cluster manager | Not packaged | pgedge-postgresql-common |
| Postgresql doc | documentation for the PostgreSQL database management system | Not packaged | pgedge-postgresql-doc-18 |
| Postgresql ecpg | Run-time library for ECPG programs | pgedge-postgresql18-ecpg | Not packaged |
| Postgresql libs | The shared libraries required for any PostgreSQL clients | pgedge-postgresql18-libs | Not packaged |
| Postgresql libs oauth | The shared libraries required for any PostgreSQL clients - OAuth flow | pgedge-postgresql18-libs-oauth | Not packaged |
| Postgresql plperl | The Perl procedural language for PostgreSQL | pgedge-postgresql18-plperl | pgedge-postgresql-plperl-18 |
| Postgresql plpython3 | The Python3 procedural language for PostgreSQL | pgedge-postgresql18-plpython3 | pgedge-postgresql-plpython3-18 |
| Postgresql pltcl | The Tcl procedural language for PostgreSQL | pgedge-postgresql18-pltcl | pgedge-postgresql-pltcl-18 |
| Postgresql postgis | Geographic objects support for PostgreSQL -- Metapackage | Not packaged | pgedge-postgresql-postgis |
| Postgresql postgis scripts | Geographic objects support for PostgreSQL -- SQL scripts metapackage | Not packaged | pgedge-postgresql-postgis-scripts |
| Postgresql server dev | development files for PostgreSQL 16 server-side programming | Not packaged | pgedge-postgresql-server-dev-18 |
| Postgresql server dev all | build tools for multiple PostgreSQL versions | Not packaged | pgedge-postgresql-server-dev-all |
| Postgresql test | The test suite distributed with PostgreSQL | pgedge-postgresql18-test | Not packaged |
| pgEdge extensions | |||
| Spock | Multi-master logical replication | pgedge-spock50_18 | pgedge-postgresql-18-spock50 |
| Spock (JIT) | LLVM JIT (just-in-time compilation) support for Spock | pgedge-spock50_18-llvmjit | Not packaged |
| Snowflake | Distributed unique ID sequences | pgedge-snowflake_18 | pgedge-postgresql-18-snowflake |
| Snowflake (JIT) | LLVM JIT (just-in-time compilation) support for Snowflake | pgedge-snowflake_18-llvmjit | Not packaged |
| LOLOR | Large-object logical replication | pgedge-lolor_18 | pgedge-postgresql-18-lolor |
| LOLOR (JIT) | LLVM JIT (just-in-time compilation) support for LOLOR | pgedge-lolor_18-llvmjit | Not packaged |
| pgEdge Vectorizer | Automatic vector embeddings | pgedge-vectorizer_18 | pgedge-postgresql-18-vectorizer |
| pgEdge Vectorizer (JIT) | LLVM JIT (just-in-time compilation) support for pgEdge Vectorizer | pgedge-vectorizer_18-llvmjit | Not packaged |
| Coldfront | ColdFront tiered-storage command-line tools | pgedge-coldfront_18 | pgedge-coldfront |
| Coldfront duckdb extensions | Patched DuckDB extensions for ColdFront tiered storage | pgedge-coldfront-duckdb-extensions | pgedge-coldfront-duckdb-extensions |
| Safesession | Read-only session enforcement for PostgreSQL roles | pgedge-safesession_18 | pgedge-postgresql-18-safesession |
| Spock60 | Logical Multi-master Replication | pgedge-spock60_18 | pgedge-postgresql-18-spock60 |
| Safesession (JIT) | LLVM JIT (just-in-time compilation) support for Safesession | pgedge-safesession_18-llvmjit | Not packaged |
| Spock60 (JIT) | LLVM JIT (just-in-time compilation) support for Spock60 | pgedge-spock60_18-llvmjit | Not packaged |
| Operations | |||
| pgBackRest | Backup and restore | pgedge-pgbackrest | pgedge-pgbackrest |
| PgBouncer | Connection pooler | pgedge-pgbouncer | pgedge-pgbouncer |
| Patroni | High-availability manager | pgedge-patroni | pgedge-patroni |
| ACE | Active Consistency Engine for cluster data validation | pgedge-ace | pgedge-ace |
| psycopg2 | Python Postgres driver | pgedge-python3-psycopg2 | pgedge-python3-psycopg2 |
| Control plane | pgEdge Control Plane | pgedge-control-plane | pgedge-control-plane |
| Etcd | A distributed, reliable key-value store for distributed systems | pgedge-etcd | pgedge-etcd |
| Patroni aws | Related components to use patroni on AWS | pgedge-patroni-aws | Not packaged |
| Patroni consul | Related components to use patroni with Consul | pgedge-patroni-consul | Not packaged |
| Patroni etcd | Related components to use patroni with etcd | pgedge-patroni-etcd | Not packaged |
| Patroni zookeeper | Related components to use patroni with Zookeeper | pgedge-patroni-zookeeper | Not packaged |
| Python3 psycopg2 tests | A testsuite for Python 3 | pgedge-python3-psycopg2-tests | Not packaged |
| Python3.12 psycopg2 | A PostgreSQL database adapter for Python 3 | pgedge-python3.12-psycopg2 | Not packaged |
| Radar | Agentless, zero-dependency diagnostic data collection tool for PostgreSQL and system metrics | pgedge-radar | pgedge-radar |
| pgAdmin 4 | |||
| pgAdmin 4 (all modes) | Web-based management tool | pgedge-pgadmin4 | pgedge-pgadmin4 |
| pgAdmin 4 web | Server/web mode only | pgedge-pgadmin4-web | pgedge-pgadmin4-web |
| pgAdmin 4 server | Core server component | pgedge-pgadmin4-server | pgedge-pgadmin4-server |
| pgAdmin 4 desktop | Desktop mode | pgedge-pgadmin4-desktop | pgedge-pgadmin4-desktop |
| AI toolkit | |||
| Postgres MCP Server | Model Context Protocol server | pgedge-postgres-mcp | pgedge-postgres-mcp |
| MCP KB Server | Knowledgebase support for MCP | pgedge-postgres-mcp-kb | pgedge-postgres-mcp-kb |
| NLA CLI client | Natural Language API CLI | pgedge-nla-cli | pgedge-nla-cli |
| NLA web client | Natural Language API web UI | pgedge-nla-web | pgedge-nla-web |
| RAG Server | Retrieval-augmented generation | pgedge-rag-server2 | pgedge-rag-server2 |
| DocLoader | Document loading utility | pgedge-docloader | pgedge-docloader |
| Anonymizer | Data anonymization and masking | pgedge-anonymizer | pgedge-anonymizer |
| Rag server | A simple API server for performing Retrieval-Augmented Generation (RAG) of text based on content from a PostgreSQL database using pgvector. | pgedge-rag-server | pgedge-rag-server |
| Community extensions | |||
| pgAudit | Session and object audit logging | pgedge-pgaudit_18 | pgedge-postgresql-18-pgaudit |
| pgAudit (JIT) | LLVM JIT (just-in-time compilation) support for pgAudit | pgedge-pgaudit_18-llvmjit | Not packaged |
| pgvector | Vector similarity search | pgedge-pgvector_18 | pgedge-postgresql-18-pgvector |
| pgvector (JIT) | LLVM JIT (just-in-time compilation) support for pgvector | pgedge-pgvector_18-llvmjit | Not packaged |
| PostGIS | Spatial and geographic objects | pgedge-postgis35_18 | pgedge-postgresql-18-postgis-3 |
| PostGIS (JIT) | LLVM JIT (just-in-time compilation) support for PostGIS | pgedge-postgis35_18-llvmjit | Not packaged |
| Cron | Run periodic jobs in PostgreSQL | Not packaged | pgedge-postgresql-18-cron |
| Jit | LLVM JIT support for PostgreSQL 18 | Not packaged | pgedge-postgresql-18-jit |
| Pg cron | Run periodic jobs in PostgreSQL | pgedge-pg_cron_18 | Not packaged |
| Pg duckdb | DuckDB analytics engine embedded in PostgreSQL | pgedge-pg-duckdb_18 | pgedge-postgresql-18-pg-duckdb |
| Pg stat monitor | Statistics collector for PostgreSQL | pgedge-pg-stat-monitor_18 | pgedge-postgresql-18-pg-stat-monitor |
| Pg tokenizer | PostgreSQL tokenizer extension for full-text search | pgedge-pg-tokenizer_18 | pgedge-postgresql-18-pg-tokenizer |
| Pg vectorize | Full-text and semantic search on any Postgres | pgedge-pg-vectorize_18 | pgedge-postgresql-18-pg-vectorize |
| Pgmq | A lightweight message queue. Like AWS SQS and RSMQ but on Postgres. | pgedge-pgmq_18 | pgedge-postgresql-18-pgmq |
| Pldebugger | PL/pgSQL debugger server-side code | pgedge-pldebugger_18 | pgedge-postgresql-18-pldebugger |
| Postgis 3 scripts | Geographic objects support for PostgreSQL 16 -- SQL scripts | Not packaged | pgedge-postgresql-18-postgis-3-scripts |
| Postgis35 client | Client tools and their libraries of PostGIS | pgedge-postgis35_18-client | Not packaged |
| Postgis35 gui | GUI for PostGIS | pgedge-postgis35_18-gui | Not packaged |
| Postgis35 utils | The utils for PostGIS | pgedge-postgis35_18-utils | Not packaged |
| Postgis36 | Geographic Information Systems Extensions to PostgreSQL | pgedge-postgis36_18 | Not packaged |
| Postgis36 client | Client tools and their libraries of PostGIS | pgedge-postgis36_18-client | Not packaged |
| Postgis36 gui | GUI for PostGIS | pgedge-postgis36_18-gui | Not packaged |
| Postgis36 utils | The utils for PostGIS | pgedge-postgis36_18-utils | Not packaged |
| Supautils | PostgreSQL extension to safely run Postgres in a hosted/managed environment | pgedge-supautils_18 | pgedge-postgresql-18-supautils |
| System stats | Open-source system_stats similarity search for Postgres | pgedge-system_stats_18 | pgedge-postgresql-18-system-stats |
| Vchord bm25 | PostgreSQL extension for BM25 vector search | pgedge-vchord-bm25_18 | pgedge-postgresql-18-vchord-bm25 |
| Pg cron (JIT) | LLVM JIT (just-in-time compilation) support for Pg cron | pgedge-pg_cron_18-llvmjit | Not packaged |
| Pldebugger (JIT) | LLVM JIT (just-in-time compilation) support for Pldebugger | pgedge-pldebugger_18-llvmjit | Not packaged |
| Postgis36 (JIT) | LLVM JIT (just-in-time compilation) support for Postgis36 | pgedge-postgis36_18-llvmjit | Not packaged |
| Supautils (JIT) | LLVM JIT (just-in-time compilation) support for Supautils | pgedge-supautils_18-llvmjit | Not packaged |
| System stats (JIT) | LLVM JIT (just-in-time compilation) support for System stats | pgedge-system_stats_18-llvmjit | Not packaged |
| New in the repo | |||
| Ai dba alerter | pgEdge AI DBA Alerter | pgedge-ai-dba-alerter | pgedge-ai-dba-alerter |
| Ai dba client | pgEdge AI DBA Web Client | pgedge-ai-dba-client | pgedge-ai-dba-client |
| Ai dba collector | pgEdge AI DBA Collector | pgedge-ai-dba-collector | pgedge-ai-dba-collector |
| Ai dba server | pgEdge AI DBA Server | pgedge-ai-dba-server | pgedge-ai-dba-server |
| Ai kb | pgEdge AI Knowledgebase database | pgedge-ai-kb | pgedge-ai-kb |
| Ai kb gemini gemini embedding 001 | pgEdge AI Knowledgebase database (gemini-gemini-embedding-001) | pgedge-ai-kb-gemini-gemini-embedding-001 | pgedge-ai-kb-gemini-gemini-embedding-001 |
| Ai kb ollama nomic embed text | pgEdge AI Knowledgebase database (ollama-nomic-embed-text) | pgedge-ai-kb-ollama-nomic-embed-text | pgedge-ai-kb-ollama-nomic-embed-text |
| Ai kb openai text embedding 3 small | pgEdge AI Knowledgebase database (openai-text-embedding-3-small) | pgedge-ai-kb-openai-text-embedding-3-small | pgedge-ai-kb-openai-text-embedding-3-small |
| Ai kb voyage voyage 3 | pgEdge AI Knowledgebase database (voyage-voyage-3) | pgedge-ai-kb-voyage-voyage-3 | pgedge-ai-kb-voyage-voyage-3 |
| Cgal demos source | Examples and demos of CGAL algorithms | pgedge-CGAL-demos-source | Not packaged |
| Consul | Consul is a tool for service discovery and configuration. Consul is distributed, highly available, and extremely scalable. | pgedge-consul | Not packaged |
| Gdal311 | GIS file format library | pgedge-gdal311 | Not packaged |
| Gdal311 java | Java modules for the GDAL file format library | pgedge-gdal311-java | Not packaged |
| Gdal311 javadoc | Javadocs for pgedge-gdal311 | pgedge-gdal311-javadoc | Not packaged |
| Gdal311 libs | GDAL file format library | pgedge-gdal311-libs | Not packaged |
| Gdal311 python tools | Python tools for the GDAL file format library | pgedge-gdal311-python-tools | Not packaged |
| Gdal311 python3 | Python modules for the GDAL file format library | pgedge-gdal311-python3 | Not packaged |
| Gdal312 | GIS file format library | pgedge-gdal312 | Not packaged |
| Gdal312 java | Java modules for the GDAL file format library | pgedge-gdal312-java | Not packaged |
| Gdal312 javadoc | Javadocs for pgedge-gdal312 | pgedge-gdal312-javadoc | Not packaged |
| Gdal312 libs | GDAL file format library | pgedge-gdal312-libs | Not packaged |
| Gdal312 python tools | Python tools for the GDAL file format library | pgedge-gdal312-python-tools | Not packaged |
| Gdal312 python3 | Python modules for the GDAL file format library | pgedge-gdal312-python3 | Not packaged |
| Geos313 | GEOS is a C++ port of the Java Topology Suite | pgedge-geos313 | Not packaged |
| Geos314 | GEOS is a C++ port of the Java Topology Suite | pgedge-geos314 | Not packaged |
| Lakekeeper | Lakekeeper - Apache Iceberg REST Catalog | pgedge-lakekeeper | pgedge-lakekeeper |
| Libgeotiff17 | GeoTIFF format library | pgedge-libgeotiff17 | Not packaged |
| Libpq5 | PostgreSQL Client Library | pgedge-libpq5 | Not packaged |
| Librttopo | Create and manage SQL/MM topologies | pgedge-librttopo | Not packaged |
| Libspatialite50 | Enables SQLite to support spatial data | pgedge-libspatialite50 | Not packaged |
| Ogdi41 | Open Geographic Datastore Interface | pgedge-ogdi41 | Not packaged |
| Postgis | Geographic objects support for PostgreSQL | Not packaged | pgedge-postgis |
| Postgrest | PostgREST - REST API for PostgreSQL | pgedge-postgrest | pgedge-postgrest |
| Proj96 | Cartographic projection software (PROJ) | pgedge-proj96 | Not packaged |
| Proj98 | Cartographic projection software (PROJ) | pgedge-proj98 | Not packaged |
| Py consul | Python client for Consul | pgedge-py-consul | Not packaged |
| Python3 etcd | A Python etcd client library | pgedge-python3-etcd | pgedge-python3-etcd |
| Python3 json logger | A python library adding a json log formatter | pgedge-python3-json-logger | pgedge-python3-json-logger |
| Python3 ydiff | View colored, incremental diff | pgedge-python3-ydiff | pgedge-python3-ydiff |
| Python3.12 boto3 | The AWS SDK for Python | pgedge-python3.12-boto3 | Not packaged |
| Python3.12 botocore | Low-level, data-driven core of boto 3 | pgedge-python3.12-botocore | Not packaged |
| Python3.12 click | Composable command line interface toolkit | pgedge-python3.12-click | Not packaged |
| Python3.12 dateutil | Powerful extensions to the standard datetime module | pgedge-python3.12-dateutil | Not packaged |
| Python3.12 dns | DNS toolkit for Python 3.12 | pgedge-python3.12-dns | Not packaged |
| Python3.12 jmespath | JSON Matching Expressions for Python | pgedge-python3.12-jmespath | Not packaged |
| Python3.12 kazoo | Higher-level Zookeeper client for Python | pgedge-python3.12-kazoo | Not packaged |
| Python3.12 prettytable | A simple Python library for easily displaying tabular data | pgedge-python3.12-prettytable | Not packaged |
| Python3.12 psutil | A cross-platform process and system utilities module for Python | pgedge-python3.12-psutil | Not packaged |
| Python3.12 s3transfer | An Amazon S3 transfer manager for Python | pgedge-python3.12-s3transfer | Not packaged |
| Python3.12 six | Python 2 and 3 compatibility utilities | pgedge-python3.12-six | Not packaged |
| Python3.12 wcwidth | Measures the displayed width of unicode strings in a terminal | pgedge-python3.12-wcwidth | Not packaged |
| Sfcgal | C++ wrapper library around CGAL for PostGIS | pgedge-SFCGAL | Not packaged |
| Sfcgal libs | The shared libraries required for SFCGAL | pgedge-SFCGAL-libs | Not packaged |
Read from the live repositories (14 platform/architecture combinations).
Mirror the pgEdge repositories
One machine can keep a copy of every pgEdge dnf and apt repository: Enterprise Linux 9 and 10, Debian 12 and 13, Ubuntu 22.04, 24.04 and 26.04, each for x86_64 and arm64. It serves them to the machines on your network, which then need no internet access, and can update itself on a schedule. An x86_64 or arm64 host mirrors both architectures without emulation.
el9/, el10/ with x86_64/ and aarch64/; apt: apt/ <release>/ with amd64, arm64 and allMirroring every release (el9, el10, debian12, debian13, ubuntu22.04, ubuntu24.04, ubuntu26.04) for x86_64 and arm64, all versions. Releases pgEdge doesn't publish for an architecture are skipped.
/: the example mirror folder. Use a folder on a disk with enough room.srv/ pgedge-mirror MIRROR-HOSTinhttp:/: this machine's name or IP address, as the other machines will reach it. The path after it (/ MIRROR-HOST/ pgedge /) is where the mirror appears on the web server.pgedge
Get the mirror script
On the machine that will hold the mirror: Linux with Docker, or a Debian or Ubuntu machine without Docker (the script then installs dnf and debmirror itself). On a Mac, use Docker.
# Use Download script, and save pgedge-mirror.sh in the folder you run the commands fromSave the settings and run the first sync
Change the two example values first (see above). The first sync can take hours.
sudo env MIRROR_DIR=/srv/pgedge-mirror MIRROR_URL=http://MIRROR-HOST/pgedge \ PLATFORMS=all ARCHES=all KEEP=all \ bash pgedge-mirror.sh configure sudo /usr/local/bin/pgedge-mirror.sh syncPublish it
Installs nginx and serves the mirror at the MIRROR_URL you set, with browsable folders, and opens the firewall port.
sudo /usr/local/bin/pgedge-mirror.sh serveOptional: keep it up to date automatically
Installs a systemd timer (a cron job where there's no systemd) that runs the sync every day at 03:30. It downloads from pgEdge, so it only works if this machine can reach pgEdge's repositories. Without that, skip this step and run the sync by hand when you can.
sudo /usr/local/bin/pgedge-mirror.sh install-schedule # Another time: sudo env SCHEDULE=02:00 /usr/local/bin/pgedge-mirror.sh install-schedule # Stop: sudo /usr/local/bin/pgedge-mirror.sh remove-schedulePoint each client at it
Run on each machine that should install from the mirror, using the release that matches the machine and your real address for MIRROR-HOST. These machines don't need internet access.
# Enterprise Linux clients (Rocky, Alma, Oracle, RHEL): el9 shown; use el9 or el10 to match the client sudo curl -fsSL -o /etc/yum.repos.d/pgedge-mirror.repo http://MIRROR-HOST/pgedge/el9/pgedge-mirror.repo sudo dnf makecache # Debian and Ubuntu clients: debian12 shown; use debian12, debian13, ubuntu22.04, ubuntu24.04, ubuntu26.04 to match the client sudo install -d /etc/apt/keyrings sudo curl -fsSL -o /etc/apt/keyrings/pgedge.gpg http://MIRROR-HOST/pgedge/apt/debian12/pgedge.gpg sudo curl -fsSL -o /etc/apt/sources.list.d/pgedge-mirror.sources http://MIRROR-HOST/pgedge/apt/debian12/pgedge-mirror.sources sudo apt-get update # If a client has pgEdge's internet repository configured, remove it first: # sudo dnf remove -y pgedge-release or sudo apt-get remove -y pgedge-releaseCheck it
The status file lists every repository as ok, skipped (not published by pgEdge) or failed.
pgedge-mirror.sh status curl -s http://MIRROR-HOST/pgedge/pgedge-mirror-status.json
What to expect
Unpublished combinations are skipped
If pgEdge doesn't publish a release or architecture, the mirror records it as skipped and the run still succeeds. Only a clear "not there" from the server counts (HTTP 404, 403 or 410).
Real failures fail loudly
An unreachable server, a timeout or a server error marks that repository failed and makes the run exit with an error, so a systemd timer, cron job or Task Scheduler shows it.
Every architecture gets its own packages
Even when pgEdge's repository file names one architecture literally, each architecture directory is filled from the right repository and checked to contain its own packages.
A status file for monitoring
Every sync writes pgedge-mirror-status.json into the mirror, with ok, skipped or failed and a package count per repository. Point your monitoring at <mirror URL>/.
Debug packages are left out
Debug-symbol packages (-debuginfo, -dbgsym) are often larger than everything else together, so the mirror skips them. To include them, add INCLUDE_DEBUG=1 to the settings in step 2.
Where internet access is needed
Only the mirror machine needs to reach pgEdge's repositories, for the first sync and every update. The machines that install from the mirror don't. They still get dependencies from their usual OS repositories (and EPEL on Enterprise Linux), so point those at your OS mirrors too if they have no internet.
No internet on any machine?
Use the offline bundles: each is a complete repository for one release, dependencies included. Or run the sync on a machine that does have internet, copy the mirror folder into the closed network, and serve it there with any web server.
Platforms and repository details
Which releases and architectures pgEdge packages are published for, and where the repository definitions live.
Supported platforms
Packages are published for amd64 (x86_64) and arm64 (aarch64). The wizard offers Postgres 16, 17 and 18; confirm per-platform availability in the release notes.
| Distribution | Versions | amd64 | arm64 | Container image for testing | Package manager |
|---|---|---|---|---|---|
| Rocky Linux | 9, 10 | Yes | Yes | rockylinux/rockylinux:9 / :10 | dnf |
| AlmaLinux | 9, 10 | Yes | Yes | almalinux:9 / :10 | dnf |
| Oracle Linux | 9, 10 | Yes | Yes | oraclelinux:9 / :10 | dnf |
| Red Hat Enterprise Linux | 9, 10 | Yes | Yes | Use Rocky or Alma of the same major | dnf |
| Debian | 12, 13 | Yes | Yes | debian:bookworm / trixie | apt |
| Ubuntu | 22.04 LTS, 24.04 LTS, 26.04 LTS | Yes | Yes | ubuntu:22.04 / 24.04 / 26.04 | apt |
Repository details
Where the config lands
Enterprise Linux: /
Debian/Ubuntu: /
No internet on the target?
Use the Mirror page to keep a local copy of the repositories that can update itself on a schedule, from Linux, or from Windows with Docker Desktop or WSL. Or use the Offline page to build a single archive with every dependency.
Package not found?
Refresh metadata, then search: sudo dnf makecache or sudo apt update, followed by a search for pgedge-enterprise.
Installed before March 1, 2026?
Replace and refresh the repository package for FIPS support. See Updating your repo.
pgEdge packages replace community Postgres packages. Installing them removes PGDG / distribution Postgres packages, and PGDG repos share file paths with pgEdge, so disable PGDG first. To keep an existing install, use a separate VM or container.

