Contents
Publishing a PostgreSQL extension
This is the checklist for releasing jev. It doubles as a guide to how PostgreSQL extensions reach developers.
Where developers get extensions
| Channel | What it is | How they install |
|---|---|---|
| GitHub / git | Source of truth. make install via PGXS works on any machine with pg_config. |
git clone … && make install |
| PGXN (pgxn.org) | The PostgreSQL Extension Network: a CPAN-style index of source distributions. Requires a (free, manually approved) account at manager.pgxn.org. | pgxn install jev |
| Trunk (pgt.dev) | Pre-built binaries per PG version; used by Tembo and others. Optional. | trunk install jev |
| pgxman | apt-style packages for extensions. Optional. | pgxman install jev |
| Docker image | Easiest way to try it. Publish to GHCR or Docker Hub. | docker run ghcr.io/realzachi/pg-jev |
| Distro / PGDG packages | Debian/RPM packages in apt.postgresql.org and yum.postgresql.org. Ask the PGDG packagers on the pgsql-pkg lists once the project is stable. | apt install postgresql-16-jev |
| Managed providers | RDS, Cloud SQL, Neon, Supabase etc. each curate their own allow-list. Only reachable by request, and plpython3u is not allowed on most of them. |
– |
For a PL/Python extension like this one there is nothing to compile, so the source distribution is the binary: PGXN plus a Docker image covers nearly everyone.
Release checklist
- Version bump. Update
default_versioninjev.control, rename/addsql/jev--X.Y.Z.sql, add an upgrade scriptsql/jev--OLD--NEW.sqlif the SQL objects changed, updatejev_version(),META.json,CHANGELOG.md. - Test.
make docker-test PG_MAJOR=14…17. CI does the same on every push. - Check the bundle.
docker run --rm --platform linux/amd64 -v "$PWD":/repo -w /repo pgxn/pgxn-tools pgxn-bundlevalidatesMETA.jsonand writesjev-X.Y.Z.zip(same content asmake dist;.gitattributeskeeps.agents,.claude,.githuband dotfiles out of it). Note thatgit archivereads.gitattributesfrom the commit, so those rules have to be committed to take effect. - Tag.
git tag -a vX.Y.Z -m "jev X.Y.Z" && git push origin vX.Y.Z. The release workflow attaches the zip to a GitHub release and, when thePGXN_USERNAME/PGXN_PASSWORDrepository secrets are set, uploads it to PGXN withpgxn-release. The distribution appears at https://pgxn.org/dist/jev/ within minutes and is then installable withpgxn install jev. Manual alternative: upload the zip at https://manager.pgxn.org/upload. A version can only be released once; fixing a published release means bumping the version. - Docker.
docker build -t ghcr.io/realzachi/pg-jev:X.Y.Z-pg16 --build-arg PG_MAJOR=16 .for each supported major, push, and addlatest. - Announce. pgsql-announce@lists.postgresql.org (moderated, extensions welcome), the PostgreSQL
Slack/Discord
#extensions, and the TypeSafe community.
What a good extension repo has
EXTENSION.control+sql/EXTENSION--VERSION.sql, versioned, with upgrade scripts between releases.- A PGXS
Makefilesomake installandmake installcheckjust work. META.json(PGXN spec 1.0.0) with abstract, license, provides, prereqs and resources.- An OSI license. PostgreSQL License and MIT are the norm in this ecosystem.
- Regression tests (
pg_regress) that don’t depend on network or secrets. - CI across all supported PostgreSQL majors.
- README covering install, every function and setting, security notes, and cost.
- CHANGELOG, CONTRIBUTING, and a clear statement of which PostgreSQL versions are supported.