PostgreSQL 15.19 / 17.11 minor release — action may be required for ltree, pgcrypto, btree_gist, and custom operators #50918
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Postgres minor upgrade to 15.19/17.11 fixes 44 CVEs.
ltree and btree_gist indexes may need reindexing, and pgcrypto data encrypted with legacy ciphers needs re-encryption.
What changed
We are rolling out the PostgreSQL 15.19 / 17.11 minor release (from 15.14 / 17.6).
It bundles five upstream security cycles and closes 44 CVEs.
Four changes may require action, depending on how you use your database:
ltreevalues (any encoding).cipher-algo=bf/blowfish/cast5was effectively stored unencrypted and fails to decrypt by default after the upgrade.NaNneed reindexing.If none of the detection queries below return rows for your project, no action is needed.
Why we made this change
This is an upstream PostgreSQL minor release.
Staying current closes 44 CVEs (including several rated High) and picks up correctness fixes in the
ltreeandbtree_gistextensions.Who is affected
1. ltree indexes
Case-folding (multibyte/ICU)
After upgrading, indexes on
ltreecolumns built under the previous version can silently return incomplete results on databases using a multibyte encoding (such as UTF-8) or a non-libccollation provider (ICU or builtin).Check whether your database is affected:
If
reindex_requiredistrue, find the affected indexes:Integer overflow (any encoding)
This release also fixes an integer overflow in
ltreecomparisons: values with more than about 14,653 labels could compare incorrectly, which can corrupt B-tree indexes built over them, regardless of your database encoding.This query lists only the B-tree indexes that actually contain such values (an empty result means no action is needed):
2. pgcrypto legacy ciphers (CVE-2026-14663)
If you call
pgp_sym_encrypt/pgp_pub_encrypt(or their_byteavariants) withcipher-algo=bf,cipher-algo=blowfish, orcipher-algo=cast5, that data was effectively stored unencrypted — decryption succeeds even with the wrong key.The default cipher (AES) and
3desare not affected.If you never passed a
cipher-algooption, no action is needed.To find affected rows, scan each stored value with a deliberately wrong passphrase: properly encrypted values raise an error, while affected values decrypt successfully even with the wrong key.
Run the helper and the scan in the same session (
pg_tempfunctions are session-scoped):Any rows returned hold affected values.
The scan covers symmetric (
pgp_sym_*) messages.The wrong-key probe does not apply to public-key (
pgp_pub_*) messages.If
pgp_pub_encryptwas used with an affectedcipher-algo, treat those values as affected and re-encrypt them the same way usingpgp_pub_decryptandpgp_pub_encryptwith the key pair.3. btree_gist indexes on float columns
Indexes built under the previous version can return wrong results for rows containing
NaNuntil reindexed.Find
btree_gistindexes on float columns:You are affected only if indexes are returned and those columns may contain
NaNvalues.4. Custom operators (CVE-2026-2004)
Only superusers may now attach a non-built-in selectivity estimator to an operator.
Existing operators keep working.
Only re-creation (dump/restore, branching, major-version upgrade) fails.
Operators installed by extensions (PostGIS, intarray, etc.) are not affected.
Check for affected operators:
What happens if you take no action
ignore-cipher-failure=1decrypt option).The underlying data remains effectively unencrypted at rest until re-encrypted.
Migration steps
REINDEX INDEX CONCURRENTLY <schema_name>.<index_name>;runs online with no downtime, but cannot run inside a transaction block.cipher-algo=aes256), before the upgrade or after it usingignore-cipher-failure=1, and consider rotating secrets stored this way.RESTRICT/JOINclause (or with a built-in estimator), or contact support and we'll assist.Rollout timeline
Affected products: Database
Authored by @utkarash2991
All reactions