Revision history for pg_vault_tde This file tracks default_version bumps in pg_vault_tde.control / VERSION. Dates are taken from git history (`git log --follow -- VERSION pg_vault_tde.control`) or, where available, from the annotated release tag; "in-tree" means the version string changed in this branch's history but the commit was not (yet) tagged as a release at the time of writing. See doc/ROADMAP.md for the full feature-by-feature history, including v1.0-v1.3. 1.7.1 (in-tree since 2026-09-05; C-only bugfixes, no SQL/catalog change — pg_vault_tde_build_version() distinguishes these builds from 1.7.0) - PSQLE-148: pg_dump_tde creates its output file with mode 0600 instead of leaving it to the ambient umask. The dump is ciphertext, but its header carries the sealed DEK, so a world-readable file handed anyone on the machine an offline target. Dumps written by earlier versions keep the permissions they were created with: check them and chmod 0600. - PSQLE-148: the passphrase-file readers — the local KMS provider and pg_dump_tde — now validate the descriptor they opened, via open(O_RDONLY|O_NOFOLLOW) + fstat() + fdopen(), instead of stat()ing the path and opening it in a second step. The owner-only permission check could previously be side-stepped by repointing the path in between, and a symlink is now refused outright. - PSQLE-135: fix AAD relid resolution and HEAP_HASEXTERNAL on decrypt. - PSQLE-126: KMS GUCs are now genuinely independent settings: the provider is initialised on first use (tde_kms_provider()) instead of from the pg_vault_tde.kms_provider assign hook, so the order and the scope of the ALTER DATABASE SET / ALTER ROLE ... IN DATABASE SET statements no longer matter. Fixes the spurious "local wallet passphrase env var ... not set" WARNING on every connection, and the silent use of the per-database default wallet_path when wallet_path was set after kms_provider. - The local wallet path is no longer snapshotted per backend; changing a KMS GUC mid-session re-initialises the provider and drops any cached KEK. - pg_vault_tde_wallet_status() resolves the provider before reporting, so wallet_open still reflects the wallet and not "nothing has opened it in this session yet" now that init() is lazy. - SHOW pg_vault_tde.wallet_path now reports the computed per-database default instead of an empty string (show_hook was never registered). - The postmaster no longer attempts to open a local wallet at startup (it has no database context), removing the "cannot open wallet \"\"" WARNING from every cluster-level 'local' setup. - New TAP file: tap/18_guc_order_independence.t. - PSQLE-145: postgresqlNN-devel does not pull in clang/llvm, so the rpm spec declares them as BuildRequires. Without them a rebuild from the SRPM in a clean buildroot — which is how mock, and therefore yum.postgresql.org, builds — failed on the first LLVM bitcode target. - PSQLE-145: the source build instructions in README.md were incomplete. RHEL/Rocky additionally needs EPEL and CRB (for perl(IPC::Run)), redhat-rpm-config and clang/llvm-devel; Debian/Ubuntu needs build-essential; and both need the PGDG repository for any major the distribution does not ship itself. Following them on a fresh host now works. - PSQLE-144: new `make check-standalone`, which creates a throwaway cluster, runs the regression test and tears it down — no container, no KMS service, no cluster to configure. PGXS declines `make check` for out-of-tree extensions, and plain `make installcheck` needs a server that already preloads the library, so neither was usable when building from source. - PSQLE-143: the PGXN release bundle is named after VERSION (1.7.1) rather than the control file's default_version (1.7), and its content is filtered through .gitattributes: internal CI, the wiki sources and the container-only test suites no longer ship inside it. - PSQLE-146: the PostgreSQL support tables that had drifted into three copies are reduced to one, and doc/pg_vault_tde.md gains a generated Support Matrix — which (OS, PostgreSQL) combinations are packaged, and which of them are actually exercised in CI rather than merely compiled — plus a KMS Provider Coverage table. - PSQLE-147: CodeQL static analysis runs over the C sources for both supported majors and over the workflows themselves; the two PSQLE-148 findings above came out of its first scan. 1.7.0 (in-tree since 2026-06-09; current default_version, unreleased) - TOAST chunk-level storage encryption, KEK hierarchy / key rotation for all KMS providers, PKCS#11 / HSM support, audit logging, fixed-size type index key encryption for tde_btree (int4, int8, uuid, date, timestamptz), CREATE INDEX CONCURRENTLY / REINDEX CONCURRENTLY support on encrypted_heap tables. - See doc/ROADMAP.md "v1.7" section for the complete list. 1.6.0 (tagged 2026-05-26) - Local PKCS#12 wallet KMS provider (production-ready offline encryption): passphrase via command/env/file, dev-mode passphrase convenience, wallet lock/unlock, Vault-to-wallet migration. 1.5.0 (in-tree since 2026-03-04) - Per-table DEK isolation, online key rotation (pg_vault_tde_rotate_online), wire format v3 with per-tuple authenticated associated data. 1.4.0 (in-tree since 2026-02-28) - Containerized CI/CD pipeline, tde_btree encrypted index access method (AES-256-SIV), wire format v2. 1.0.0 - 1.3.0 - Initial development: AES-256-GCM encrypted_heap Table Access Method, HashiCorp Vault / OpenBao KMS integration, logical decoding compatibility, multi_insert / background worker / health_check. - Not individually dated in this file; see doc/ROADMAP.md.