Adventures in Extension Packaging
summary
PGXN v2 prototypes a binary distribution: a trunk package format bundled into OCI image index artifacts, with a CLI that pulls the correct image for OS/PG version. A prototype builds Darwin ARM64 and Linux AMD64 trunks, pushes them to a registry and installs them successfully. Scaling reveals concrete blockers: 238+ extensions required manual fixes, libc incompatibilities between Ubuntu 22/24, PGRX version collisions, inconsistent CMake pipelines, and dependency oddities (DuckDB, libcurl). Runpath bundling partly works; image-volume immutability forces design tradeoffs.
AI-written summary · about
chapters (11)
- 0:00Introduction and background
- 1:56PGXN overview and limitations
- 4:48Vision for PGXN version 2
- 8:18Metaspec v2 and binary packaging
- 15:01Trunk package format proposal
- 24:08Challenges in automated packaging
- 32:57Cloud-native Postgres extensions
- 37:11Extension search path proposal
- 41:04Handling dependencies in packaging
- 46:26Run path and dependency resolution
- 48:35Future work and call to action
related talks
26mState of the Postgres Extension Ecosystem
28mBeyond Postgres: Insights about the PostgreSQL Extensibility
46mFearless Extension Development With Rust and PGRX
58mPushing boundaries with extensions, for extension
47mWhat does it take to onboard an extension?
50mPostgreSQL hacker tips
42mPostgreSQL Extensions: A Deep Dive
39mDeveloping a Postgres Extension in Rust
