Posted on 2019-11-14 by PostgreSQL Global Development Group
PostgreSQL Project
The PostgreSQL Global Development Group has released an update to all supported versions of our database system, including 12.1, 11.6, 10.11, 9.6.16, 9.5.20, and 9.4.25. This release fixes over 60 bugs reported over the last three months.
PostgreSQL 9.4 EOL Approaching
PostgreSQL 9.4 will stop receiving fixes on February 13, 2020, which is the next planned cumulative update release. Please see our versioning policy for more information.
Bug Fixes and Improvements
This update also fixes over 50 bugs that were reported in the last several months. Some of these issues affect only version 12, but may also affect all supported versions.
Some of these fixes include:
- Fix crash that occurs when
ALTER TABLEadds a column without a default value along with other changes that require a table rewrite - Several fixes for
REINDEX CONCURRENTLY. - Fix for
VACUUMthat would cause it to fail under a specific case involving a still-running transaction. - Fix for a memory leak that could occur when
VACUUMruns on a GiST index. - Fix for an error that occurred when running
CLUSTERon an expression index. - Fix failure for
SET CONSTRAINTS ... DEFERREDon partitioned tables. - Several fixes for the creation and dropping of indexes on partitioned tables.
- Fix for partition-wise joins that could lead to planner failures.
- Ensure that offset expressions in WINDOW clauses are processed when a query's expressions are manipulated.
- Fix misbehavior of
bitshiftright()where it failed to zero out padding space in the last byte if the bit string length is not a multiple of 8. For how to correct your data, please see the "Updating" section. - Ensure an empty string that is evaluated by the
position()functions returns 1, as per the SQL standard. - Fix for a parallel query failure when it is unable to request a background worker.
- Fix crash triggered by a case involving a
BEFORE UPDATEtrigger. - Display the correct error when a query tries to access a TOAST table.
- Allow encoding conversion to succeed on strings with output up to 1GB. Previously there was hard limit of 0.25GB on the input string.
- Ensure that temporary WAL and history files are removed at the end of archive recovery.
- Avoid failure in archive recovery if
recovery_min_apply_delayis enabled. - Ignore
restore_command,recovery_end_command, andrecovery_min_apply_delaysettings during crash recovery. - Several fixes for logical replication, including a failure when the publisher and subscriber had different REPLICA IDENTITY columns set.
- Correctly timestamp replication messages for logical decoding, which in the
broken case would lead to
pg_stat_subscription.last_msg_send_timeset toNULL. - Several fixes for libpq, including one that improves PostgreSQL 12 compatibility.
- Several
pg_upgradefixes. - Fix how a parallel restore handles foreign key constraints on partitioned tables to ensure they are not created too soon.
pg_dumpnow outputs similarly named triggers and RLS policies in order based on table name, instead of OID.- Fix
pg_rewindto not update the contents ofpg_controlwhen using the--dry-runoption.
This update also contains tzdata release 2019c for DST law changes in Fiji and Norfolk Island. Historical corrections for Alberta, Austria, Belgium, British Columbia, Cambodia, Hong Kong, Indiana (Perry County), Kaliningrad, Kentucky, Michigan, Norfolk Island, South Korea, and Turkey.
For the full list of changes available, please review the release notes.
Updating
All PostgreSQL update releases are cumulative. As with other minor releases,
users are not required to dump and reload their database or use pg_upgrade in
order to apply this update release; you may simply shutdown PostgreSQL and
update its binaries.
Users who have skipped one or more update releases may need to run additional, post-update steps; please see the release notes for earlier versions for details.
If you have inconsistent data as a result of saving the output of
bitshiftright() in a table, it's possible to fix it with a query similar to:
UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
NOTE: PostgreSQL 9.4 will stop receiving fixes on February 13, 2020. Please see our versioning policy for more information.