Par SAS le 14/11/2006 - 15:33
Nouvelles hebdomadaires de PostgreSQL - 12 Novembre 2006
PostgreSQL 8.2 beta3 réalisé. Merci de la tester.
Simon Riggs a initié un fil de discussion sur -hackers sur la fçon de résoudre les problèmes de "hot tables". Il a également proposé une nouvelle conception. La discussion continue.
Lorenzo Alberton a réalisé un mémento pour PostgreSQL.
http://www.alberton.info/postgresql_cheat_sheet.html
Les nouveautés des produits dérivés
Les jobs PostgreSQL de novembre
http://archives.postgresql.org/pgsql-jobs/2006-11/threads.php
PostgreSQL Local
Que du mondial cette semaine.
PostgreSQL dans les média
PostgreSQL Weekly News vous est présenté cette semaine par David Fetter et Dave Page.
Adaptation francophone de Stéphane Schildknecht.
Correctifs appliqués
Tom Lane a comitté :
-
la suppression de quelques avertissement de 'variable non initialisée' émis par gcc en -O3 et supérieurs uniquement (probablement parce qu'il incorpore plus de choses). D'après une remarque de Mark Mielke ;
-
la correction de pg_get_serial_sequence(), qui peut retourner, à tort, le nom d'un index sur une colonne de type serial au lieu du nom de la séquence associée. Provient de changements récents dans l'installation des dépendances pour le type serial. D'après le bogue #2732 relevé par Basil Evseenko ;
-
le nettoyage de certaines références qui décrivent, à tort, %p comme un chemin absolu, d'après Simon Riggs ;
-
l'amélioration du formattage de la description des arguments de PQexecParams, d'après Theo Kramer ;
-
la mise en exergue, dans create_function.sgml, du fait que les fonctions immutable et stable ne peuvent modifier la base. xfunc.sgml est assez Ă jour de ce point de vue, mais cela ne fera pas de mal de le clarifier Ă©galement ;
-
la correction des erreurs de la colonne key_column_usage.position_in_unique_constraint récemment ajoutée dans information_schema (d'après un ajout du SQL2003). Le code original échouait si une colonne référencée participait à plus d'une entrée dans pg_constraint. Cela ne fonctionnait pas non plus si un FK reposait directement sur un index unique sans syntaxe de contrainte. Ce cas réside en dehors des spécifications du SQL, mais PG l'a toujours supporté. Il est donc raisonnable qu'information_schema le gère. D'après le bogue #2750 relevé par Stephen Haberman ;
-
un correctif de set_joinrel_size_estimates() qui permet d'estimer la taille des jointures externes avec plus de précision : il faut distinguer les effets des clauses ON propres à la jointure des effets des clauses ajoutées. Cela a fait l'objet d'un hack rapide il y a longtemps. Mais il est temps de mieux faire. D'après un exemple de Thomas Hallgren ;
-
la modification des substituts rename et unlink pour Windows pour imposer un timeout de 30 secondes en lieu et place de tentatives infinies. Modification également de xlog.c so de façon à délier un vieux segment xlog qu'elle ne parviendrait pas à renommer vers un slot futur. D'après la discussion du bogue #2712, dans laquelle il apparaissait que Windows peut délier un fichier resté ouvert, mais pas le renommer ;
-
la modification de aset.c pour récupérer explicitement la taille du la prochaine allocation de bloque. Le code précédent reposait sur la taille réellement allouéee au bloc précédant, ce qui donnait de drôles de résultats si la première allocation est plus grande que ALLOC_CHUNK_LIMIT : les allocations suivantes reposaient sur cette taille et non sur la série attendue de tailles de blocs. Relevé lors de l'étude des pertes mémoires par Tatsuo Ishii ;
-
la modification de accumArrayResult() pour doubler la taille des tableaux de travail lorsque plus d'espace est requis, plutôt que de l'augmenter d'une taille fixe. L'ancienne méthode perdait beaucoup de place et de temps lorsque la taille totale était importance. D'après Tatsuo Ishii ;
-
la correction des problèmes de performance de replace_text(), replace_text_regexp(), et text_to_array() : ils avaient tous un comportement en O(N^2) sur les longues chaînes de caractères en encodage multi-octet, du fait de parcours répétés du texte entré pour identifier les sous-chaînes dont les positions et longueurs étaient calculées en caractères et non en octets. Correction par la recherche dans le code source des positions par pointeur de caractère et et par comptage de caractères. Suppression d'opération spalloc inutiles. text_to_array() était la cause de fuite mémoire par omission de pfree sur les chaînes temporaires. D'après Tatsuo Ishii ;
-
la correction du bogue #2694 qui concerne une construction ARRAY[] dont les entrées sont composées de sous-tableaux vides. Après discussion, si toutes les entrées sont composées de tableaux vides, le résultat doit être un tableau vide, tandis qu'un mélange de tableaux vides et pleins doit (ce qui est le cas) retourner une erreur. Dans la branche arrière, la construction est stricte : toute entrée NULL conduit immédiatement à une sortie NULL. Du coup, j'ai laissé ce comportement. HEAD ignorait tout simplement les sous-tableaux NULL, ce qui ne se voyait pas vraiment. Devant l'absence de meilleure idée, il traite maintenant les sous-tableaux NULL comme les vides ;
-
la suppression du code de débogage spécifique à Windows ; il semble que le problème avec fopen() qui n'utilise pas FILE_SHARE_DELETE était en fait le bogue que nous cherchions&nbp;;
-
la mise à jour des notes de version en préparation pour la RC1 ;
-
la retour à la méthode pre-8.2 method de test de libm, à savoir toujours l'inclure si le lien est correct. Il semble trop risqué d'assumer que les fonctions standard telles que pow() ne sont pas reconnues comme particulière par le compilateur. D'après le rapport de Andreas Lange dont la construction a échoué avec le comilateur Solaris cc avec l'option -fast. Même si nous ne la considérons pas comme une option supportée, je crains que de tels problèmes ne surviennent avec d'autres comilateurs ;
-
la suppression de certaines dépendances inutiles de DataDir : quand cela est possible, le backend doit plutôt se servir du paramétrage de répertoire de travail. Quelques travaux sur le style des messages dans contrib/adminpack ;
-
un correctif arrière de la récupération des PITR dans 8.1. Cela devrait être corrigé également dans la version 8.0, mais cela demande un travail de codage trop conséquent, parce que la 8.0 n'a pas de parcours aisé de pg_database sur lequel se baser. Une solution manuelle au problème est possible dans 8.0 (suppression des fichiers pg_internal.init avant de rejouer les WAL), ce qui peut représenter une réponse suffisante ;
-
la correction du problème récemment découvert de récupération des PITR : la sauvegarde peut contenir des fichiers d'initialisation (pg_internal.init) relcache bloqués, et il n'y a pas de mécanismes pour les actualiser pendant que les WAL sont rejoués. La solution la plus simple est de supprimer les fichiers d'initialisation après le démarrage, et de laisser le premier backend démarré de chaque base reconstruire le fichier d'initialisation. Simon Riggs et Tom Lane ;
-
la correction des problèmes récemment compris de gestion des XID gelés, en particulier dans les scénarios PITR. Dans les journaux WAL est maintenant tracé le remplacement des vieux XIDs par FrozenTransactionId, de sorte que ce remplacement est assurément propagé aux bases esclaces PITR. De plus, plutôt que de penser que les mises à jour sont préservées, pg_clog n'est pas tronqué tant que toutes les instances d'un XID doivent être remplacées par FrozenTransactionId. Ajout de nouvelles variables GUC et de colonnes pg_autovacuum pour permettre la gestion de la politique de gel, de telle sorte que les utilisateurs puissent modifier la taille de pg_clog en fonction de la taille du travail de gel effectué. Révision du code existant qui impose l'autovacuum des tables qui s'approchent du point de bouclage pour le sécuriser ; révision de la logique d'autovacuum pour que le vacuum anti-bouclage intervienne par table et non par base. initdb est forcé du fait de modifications dans les catalogues pg_class, pg_database et pg_autovacuum. Heikki Linnakangas, Simon Riggs et Tom Lane.
Neil Conway a commité :
-
la correction dans le code GIN de plusieurs typos dans les commentaires ;
-
la relecture active du chapitre sur les systèmes de catalogues. Capitalisation du contenu de la colonne "Description", mais suppression du 'point' terminal, d'après la convention en vigueur dans le reste de la documentation. Suppression de la colonne "References" des catalogues qui ne sont pas référencés. Correctifs grammaticaux et de SGML ;
-
de petites améliorations dans la description d'archive_timeout ;
-
de petits nettoyages du code de pgcrypto : puisque les UDF sont déclarés strict, la vérification de la nullité des arguments de la fonction représente du code perdu ;
-
la correction de deux typos dans le README de tsearch2 ;
-
la correction d'une fuite mémoire dans psql : nous perdons quelques gestionnaires PGresult si une erreur de connexion survient lors de l'exécution d'une des requêtes de "\d table". Pas grave, mais intéressant à corriger. Correctif de Brendan Jurd ;
-
la suppression d'un vieux commentaire (15 ans) concernant le fonctionnement maintenant bien connu : référencer un paramètre indéfini doit résulter en une erreur, pas NULL ;
-
de petits correctifs à l'authentification LDAP : si une erreur survient, il faut relâcher le gestionnaire LDAP manuellement à l'aide de ldap_unbind(). Ce n'est pas un réel problème dans la pratique, parce qu'une erreur aboutit généralement à la quitter le processus, mais cela peut être corrigé sans trop d'efforts. Au passage, correction d'une erreur dans l'utilisation de snprintf() : le paramètre "size" de snprintf() est la taille du buffer de destination, incluant l'espace du terminateur NUL. De plus, en fonction de la valeur de NAMEDATALEN, l'ancien code pouvait permettre un dépassement de tampon (buffer overflow).
Michael Meskes a commité :
-
l'application, dans ecpg, d'un correctif de Peter Harris qui libère la structure auto_mem structure à la connexion.
Peter Sigaev a commité :
-
un nouveau README pour tsearch2.
Correctifs rejetés (à ce jour)
Pas de déception cette semaine :-)
Correctifs en attente
-
Andrew Dunstan a soumis un correctif d'un problème potentiel lorsque des modules chargés par PL/PerlU sont visibles dans le code PL/Perl ;
-
Brendan Jurd a envoyé un correctif qui permet de différencier les déclencheurs actifs de ceux qui sont désactivés avec le \d de psql ;
-
Heikki Linnakangas a envoyé un correctif pour la 8.3 d'optimisation des accès en lecture des tables en CLUSTER contenant de petites colonnes ;
-
Brendan Jurd a envoyé un correctif modifiant le correctif de Guillaume Lelarge pour utiliser IYYY et IDDD pour le formattage ISO des années et semaines ;
-
Magnus Hagander a envoyé un correctif de mise à jour de la FAQ mingw FAQ.