Contents
Releasing to PGXN
pg_vault_tde’s distribution metadata lives in META.json (mandatory for PGXN, the PostgreSQL Extension Network) and Changes (release history). This section is for maintainers cutting a new release, not for end users installing the extension — see “1. Install” above or wiki: Installation for that.
One-time setup
Register a PGXN Manager account at https://manager.pgxn.org/account/register if you don’t already have one. No API token/CLI upload path is offered by PGXN Manager — every release is uploaded by hand through its web UI.
Every release
- Bump the version in lockstep, in three places that must agree:
pg_vault_tde.control→default_version = 'X.Y'— PostgreSQL’s own extension version, tied 1:1 to thesql/pg_vault_tde--X.Y.sqlfilename and toextversioninpg_extension. Stays 2-part; nothing outside PostgreSQL reads this file, so it does not need to follow semver.VERSIONandMETA.json(top-level"version"andprovides.pg_vault_tde.version) →X.Y.0— PGXN requires a 3-part semantic version (https://pgxn.org/spec/— “three-part dotted integers, such as1.2.0”).VERSIONis also compiled into the extension itself (the Makefile embeds its content as-DPG_VAULT_TDE_BUILD_VERSION, returned bypg_vault_tde_build_version()/ thebuild_versioncolumn ofpg_vault_tde_health_check()) — it distinguishes binary builds that share the sameextversion(e.g. a C-only bugfix with no SQL script change), so it must always mirrorMETA.json’s"version"exactly, and a plainmakeafter bumping it needs a precedingmake cleanfor the new string to actually take effect (CFLAGS changes alone don’t invalidate already-built.ofiles). Both map 1:1 to the control file’sX.Ywith a trailing.0.- Add the corresponding
sql/pg_vault_tde--X.Y.sql(and, if upgrading an already-installed extension in place, ansql/pg_vault_tde--<old>--X.Y.sqlmigration script) and pointMETA.json’sprovides.pg_vault_tde.fileat the new SQL file.
- Add an entry to Changes for the new version.
Build and smoke-test the exact bundle PGXN will receive: ```bash make dist # → dist/pg_vault_tde-X.Y.zip (git archive of HEAD; # commit the version bump first, or it won’t be in the zip) cd /tmp && unzip -o /path/to/dist/pg_vault_tde-X.Y.zip && cd pg_vault_tde-X.Y
PGXN’s own build/test recipe — must pass before uploading:
make USE_PGXS=1 make USE_PGXS=1 install make USE_PGXS=1 installcheck PGDATABASE=postgres # needs a running server with # shared_preload_libraries=pg_vault_tde; # see ci/scripts/run-regress.sh / # run-isolation.sh for the required GUCs ```
- Validate META.json before uploading (catches schema mistakes PGXN
Manager would otherwise reject at upload time):
bash pip install pgxnclient pgxn validate-meta META.json # or: validate_pgxn_meta META.json, if you have # the Perl PGXN::Meta::Validator tooling installed - Upload: log in at https://manager.pgxn.org/, click “Upload” in the
side navigation, and submit
dist/pg_vault_tde-X.Y.zip. PGXN Manager parsesMETA.jsonfrom the zip, so double-check the version inside the zip matches what you intend to release before submitting — once a version is published it cannot be re-uploaded under the same number. - Tag the release in git (
git tag vX.Y && git push --tags) — this repo currently has only av1.6tag;default_versionin the control file had already moved on to later versions in-tree before being tagged, so don’t assume the control file version and the latest git tag are the same thing when preparing a release.