LOXODATA

PostgreSQL 9.6.1 et autres correctifs

2016-10-27   948 mots, 5 minutes de lecture

Publication de PostgreSQL 9.6.1 et autres correctifs

Le PostgreSQL Global Development Group a publié une mise à jour de l’ensemble des versions supportées de PostgreSQL. Il s’agit des versions mineures: 9.6.1, 9.5.5, 9.4.10, 9.3.15, 9.2.19 et 9.1.24. C’est la dernière mise à jour fournie pour la branche 9.1, désormais officiellement en fin de vie. Cette mise à jour corrige deux risques de corruption des données ainsi qu’un grand nombre de bogues. Comme toujours, les mises à jour doivent être appliquées le plus rapidement possible.

Enregistrement WAL de relations supprimées

Avant cette mise à jour, il était possible qu’une instance PostgreSQL tente d’accéder à des données qui n’existent plus sur disque.

Si la carte de la mémoire disponible n’est pas mise à jour pour tenir compte de la suppression, une base PostgreSQL peut retourner une page qui n’existe plus, et produire une erreur du type :

ERROR: could not read block 28991 in file "base/16390/572026": read only 0 of 8192 byte

Si le contrôle checksum est activé, une erreur dans le contrôle de la carte de visibilité peut aussi apparaître.

Ce problème est présent sur les branches 9.3, 9.4, 9.5 et 9.6.

Problème pg_upgrade sur les serveurs en big-endian

Sur les machines en big-endian (i.e. la plupart des architectures non-Intel), pg_upgrade écrit de manière incorrecte les octets de la carte de visibilité, ce qui l’empêche de finir l’opération.

Dans le cas d’un pg_upgrade depuis des versions antérieures à 9.6, il faut considérer que toutes les cartes de visibilité sont incorrectes et les regénérer. Il suffit de supprimer les cartes de toutes les relations à l’aide de la fonction pg_truncate_visibility_map() disponible dans l’extension contrib/pg_visibility. La section “mise à jour” donne des instructions sur les opérations de post-installation.

Ce problème n’est présent que sur la branche 9.6.

Correctifs de bogues et améliorations

En plus des corrections précédentes, cette mise à jour corrige les bogues remontés les derniers mois. Quelques bogues n’affectent que la version 9.6, mais plusieurs concernent l’ensemble des branches.

Plus de 50 correctifs sont fournis, dont :

  • Fix use-after-free hazard in execution of aggregate functions using DISTINCT, which could lead to crashes
  • Fix incorrect handling of polymorphic aggregates used as window functions, which could lead to crashes
  • Fix incorrect creation of GIN index WAL records on big-endian machines
  • Fix file descriptor leakage when truncating a temporary relation of more than 1GB
  • Fix query-lifespan memory leak in a bulk UPDATE on a table with a PRIMARY KEY or REPLICA IDENTITY index
  • Fix SELECT FOR UPDATE/SHARE to correctly lock tuples that have been updated by a subsequently-aborted transaction
  • Fix COPY with a column name list from a table that has row-level security enabled
  • Fix deletion of speculatively inserted TOAST tuples when backing out of INSERT … ON CONFLICT
  • Fix timeout length when VACUUM is waiting for exclusive table lock so that it can truncate the table
  • Fix bugs in merging inherited CHECK constraints while creating or altering a table
  • Fix replacement of array elements in jsonb_set()
  • Fix possible sorting error when aborting use of abbreviated keys in btree indexes
  • On Windows, retry creation of the dynamic shared memory control segment after an access-denied error
  • Fix pgbench’s calculation of average latency
  • Make pg_receivexlog work correctly with –synchronous without slots
  • Make pg_rewind turn off synchronous_commit in its session on the source servere
  • Don’t try to share SSL contexts across multiple connections in libpq
  • Support OpenSSL 1.1.0
  • Install TAP test infrastructure so that it’s available for extension testing
  • Several fixes for logical WAL decoding and replication slots
  • Several fixes for minor issues in pg_dump, pg_xlogdump, and pg_upgrade
  • Several fixes for minor issues in the query planner and in the output of EXPLAIN
  • Several fixes for timezone support

Cette mise à jour contient également la version 2016h de tzdata avec les modifications DST pour la Palestine et la Turquie, ainsi que des modifications historiques pour la Turquie et quelques régions de la Russie. Certains fuseaux horaires d’Antarctique, de l’ancienne Union Soviétique et du Sri Lanka ont été basculés en abbréviations numériques.

La base de données des fuseaux horaires de l’IANA fournissait précédemment des abbréviations textuelles pour tous les fuseaux. Parfois, ces abbréviations n’avaient pas d'écho dans la population. De ce fait, un processus de migration vers des décalages numérique par rapport à UTC a été entrepris lorsque l’abbréviation anglaise semblait sans intérêt. Dans l’immédiat, PostgreSQL continue d’accepter ces abbréviations lors d’insertion de timestamp. Mais elles ne seront plus affichées dans la vue pg_timezones, ni utilisées lors de l’affichage.

Dans cette mise à jour, AMT n’est plus une abbréviation de Armenia Time. De ce fait, elle est interprétée comme Amazon Time, soit UTC-4 et plus UTC+4.

Fin de vie de la branche 9.1

La branche 9.1 de PostgreSQL est désormais en fin de vie (EOL). Il n’y aura plus de mise à jour ou de correctifs de sécurité. Il est recommandé de passer à une verison plus récente le plus rapidement possible. La Politique de gestion des versions donne plus d’informations.

Mise à jour

Toutes les mises à jours de PostgreSQL sont cumulatives. Comme pour toutes les mises à jours, il n’est pas nécessaire d’effectuer un export/import des bases ou d’utiliser pg_upgrade pour appliquer la mise à jour courante. Il suffit d’arrêter PostgreSQL et de mettre à jour les binaires.

Si le système est affecté par le bogue pg_upgrade sur système big_endian, il convient de se référer à la page du Wiki concernant le problème de la carte de visibilité, et de suivre les instructions qui y figurent.

Les utilisateurs qui ont manqué une ou plusieurs mises à jour devront éventuellement effectuer des opérations post-mise à jour supplémentaires. Voir les notes de version à ce propos.

Liens :