Skip to content

feat: Add 78 extensions, matching what pglayers ships - #20

Merged
ruxwez merged 2 commits into
mainfrom
feat/more-extensions
Oct 25, 2026
Merged

ruxwez merged 2 commits into
mainfrom
feat/more-extensions

Conversation

@ruxwez

@ruxwez ruxwez commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

Brings the image from 4 to 82 tested extensions (plus contrib). It covers everything pglayers ships except 3 that don't fit (see below).

Source Extensions
PGDG apt, pinned in extensions/pgdg.txt (57) age, credcheck, pg_cron, db2fce, documentdb, pg_dirtyread, extra_window_functions, first_last_agg, h3, hll, http, hypopg, icu_ext, ip4r, jsquery, orafce, pg_partman, periods, pg_background, pg_csv, pg_failover_slots, pg_hint_plan, pg_ivm, pg_permissions, pg_pwhash, pg_qualstats, pg_rrule, pg_stat_kcache, pg_textsearch, pg_uuidv7, pg_wait_sampling, pgaudit, pgfincore, pglogical, pgnodemx, pgpcre, pgrouting, pgsphere, pgtap, pgtt, pgvector, pljs, plpgsql_check, plprofiler, postgis, prefix, prioritize, rational, pg_repack, roaringbitmap, rum, semver, set_user, pg_show_plans, pg_similarity, pg_squeeze, pg_statviz, tdigest, tds_fdw, timescaledb (Apache-2.0 edition), timestamp9, toastinfo, wal2json
Authors' prebuilt packages (5) anon, pg_graphql, pg_jsonschema, pgvectorscale, wrappers
Copied from the authors' images (3) pg_duckdb, pg_clickhouse, re2
Built from source (10) pgmq, pg_bigm, pg_hashids, pg_incremental, pg_net, pg_stat_monitor, pgsodium, temporal_tables, pgjwt, postgres_protobuf

Not included

  • plv8: needs V8 compiled for each architecture (hours and GBs of build cache). pljs is included instead.
  • pg_lake: conflicts with pg_duckdb, since both bundle DuckDB, and needs a vcpkg/C++ toolchain.
  • pg_durable: binaries exist only for PG 17–18 on amd64.

Per-major availability

  • documentdb and pg_incremental: PG 15+.
  • pg_textsearch: PG 17+.
  • Their tests report SKIP on older majors.

Two incompatibilities found by the tests. Both are documented in .docs/included-extensions.md, and the affected extensions are tested on their own server (isolated):

  • pg_show_plans + timescaledb preloaded together segfault on hypertable inserts.
  • anon + pg_duckdb preloaded together abort intermittently. anon's pgrx hooks panic when DuckDB calls them from its worker threads. CI caught this one on PG 17 amd64; I reproduced it locally in 1 of 6 runs, and in 0 of 12 with pg_duckdb alone.

Other changes

  • pgvector now comes from PGDG: 0.8.2 → 0.8.7, a compatible patch update.
  • Image contents: per-extension labels are replaced by /usr/share/postgres-extensor/extensions.txt, which lists every extension and its version.
  • tests/run.sh:
    • new assert_true() helper;
    • optional server.conf, pg-versions, database and isolated files per extension;
    • versions are de-duplicated in the summary;
    • after a test crashes the server, it waits for recovery and keeps running the remaining tests.
  • Renovate: tracks extensions/pgdg.txt through the PGDG apt index, as one grouped weekly PR. A local dry-run resolves all 83 entries.
  • Release notes: one row per extension and one column per PostgreSQL major.
  • Docs (EN/ES):
    • full categorized list in .docs/included-extensions(.es).md, with preload requirements and caveats;
    • rewritten guide for adding extensions;
    • README comparison now includes pglayers.

Trade-off

Images grow from about 960 MB to about 1.55 GB, against 650 MB for the official one. That is the cost of bundling DuckDB, TimescaleDB, pgRouting/Boost and the rest. Nothing is preloaded or enabled by default, so the runtime behavior stays identical to the official image.

Testing

Local, amd64:

PG Passed Skipped
14 79 3
15 81 1
16 81 1
17 82 0
18 82 0

shellcheck and actionlint pass. This PR's CI covers arm64.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QTN7At86i5TYDmozENSNv8

ruxwez and others added 2 commits October 25, 2026 23:21
Brings the image from 4 to 82 tested extensions (plus contrib), covering
everything pglayers includes except plv8, pg_lake and pg_durable.

- extensions/pgdg.txt: 57 extensions from PGDG apt, pinned, with
  per-major lines where versions differ (age, pgaudit, pg_hint_plan,
  timescaledb) or the package doesn't exist for every major
  (documentdb 15+, pg_textsearch 17+). pgvector now comes from PGDG
  (0.8.2 -> 0.8.7).
- Prebuilt release packages (fetch-deb): anon, pg_graphql,
  pg_jsonschema, pgvectorscale, wrappers.
- Copied from the authors' images: pg_duckdb, pg_clickhouse, re2.
- Built from source (pgxs-build): pgmq, pg_bigm, pg_hashids,
  pg_incremental (15+), pg_net, pg_stat_monitor, pgsodium (with a
  static libsodium 1.0.22), temporal_tables, pgjwt, postgres_protobuf.
- /usr/share/postgres-extensor/extensions.txt lists every extension and
  version; per-extension labels are gone.
- tests/run.sh: assert_true() helper, and optional server.conf,
  pg-versions, database and isolated files per extension.
  pg_show_plans runs isolated: preloaded with timescaledb it segfaults
  on hypertable inserts.
- Renovate tracks pgdg.txt (deb datasource, one weekly grouped PR).
- Release notes become one row per extension, one column per major.
- Docs: full list in .docs/included-extensions(.es).md, new guide for
  adding extensions, README comparison now includes pglayers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTN7At86i5TYDmozENSNv8
CI caught an intermittent abort on PG 17: with anon preloaded, DuckDB
calls anon's pgrx hooks from its worker threads and pgrx panics
("postgres FFI may not be called from multiple threads"). Reproduced
locally (1 in 6 runs with every preload, 0 in 12 with pg_duckdb alone).

- pg_duckdb runs on its own server; the conflict is documented.
- run.sh waits for PostgreSQL to recover after a failing test instead of
  aborting, so the remaining tests still run and report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTN7At86i5TYDmozENSNv8
@ruxwez
ruxwez merged commit 12cb43b into main Oct 25, 2026
14 checks passed
@ruxwez
ruxwez deleted the feat/more-extensions branch October 25, 2026 22:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant