IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

E.148. Sortie 7.4

[Note]

Date de sortie

2003-11-17

E.148.1. Aperçu

Modifications majeures dans cette version :

Les sous-requêtes IN/NOT IN sont maintenant bien plus efficaces

Dans les versions précédentes, les sous-requêtes IN/NOT IN ont été jointes par la requête supérieure en parcourant séquentiellement la sous-requête pour trouver une correspondance. Le code de la 7.4 utilise les mêmes techniques sophistiquées utilisées par les jointures ordinaires et est donc bien plus rapide. Un IN sera maintenant aussi rapide ou plus rapide que la sous-requête EXISTS équivalente ; ceci inverse l'information conventionnelle qui s'appliquait aux versions précédentes.

Amélioration du traitement du GROUP BY en utilisant les « hash buckets »

Dans les précédentes versions, les lignes à grouper étaient d'abord triées. Le code de la 7.4 traite le GROUP BY sans tri en accumulant les résultats dans une table de découpage avec une entrée par groupe. Néanmoins, il utilisera toujours la technique du tri si la table de découpage est estimée trop importante pour être contenue dans sort_mem.

Nouvelle fonctionnalité de jointure par découpage sur des clés multiples

Dans les précédentes versions, les jointures par découpage pouvaient uniquement survenir sur des clés uniques. Cette version ajoute les jointures par découpage sur plusieurs colonnes.

Les requêtes utilisant la syntaxe JOIN explicite sont maintenant mieux optimisées

Les précédentes versions évaluaient les requêtes en utilisant uniquement la syntaxe JOIN explicite dans l'ordre fournie par la syntaxe. La version 7.4 autorise l'optimisation complète de ces requêtes, ce qui signifie que l'optimiseur considère tous les ordres possibles de jointure et choisit le plus efficace. Néanmoins, les jointures externes doivent toujours suivre l'ordre déclaré.

Code des expressions rationnelles plus rapide et plus puissant

Le module entier des expressions rationnelles a été remplacé avec une nouvelle version de Henry Spencer, écrit originellement pour Tcl. Le code améliore énormément les performances et supporte plusieurs types d'expressions rationnelles.

Fonctions en ligne pour les fonctions SQL simples

Les fonctions SQL simples peuvent maintenant être en ligne en incluant le SQL dans la requête principale. Ceci améliore les performances en éliminant la surcharge par appel. Ceci signifie que les fonctions SQL simples se comportent maintenant comme des macros.

Support complet des connexions IPv6 et des données de type adresse IPv6

Les versions précédentes autorisaient seulement les connexions IPv4 et les types de données IP supportaient seulement les adresses IPv4. Cette version ajoute le support complet de IPv6 dans ces deux domaines.

Amélioration majeure dans les performances et la fiabilité de SSL

Plusieurs personnes très au courant de l'API SSL ont revu notre code SSL pour améliorer la négotiation de clé SSL et la récupération en cas d'erreur.

Le « free space map » réutilise efficacement les pages d'index, et quelques autres améliorations des espaces libres

Dans les précédentes versions, les pages d'index B-tree qui étaient laissées vides à cause de lignes supprimées pouvaient seulement être ré-utilisées par les lignes de valeurs d'index similaires aux lignes originellement indexées sur cette page. Avec la version 7.4, VACUUM enregistre les pages d'index vide et permet leur ré-utilisation pour toute ligne d'index future.

Schéma d'information au standard SQL

Le schéma d'information fournit une façon standardisée et stable d'accéder aux informations sur les objets du schéma définis dans une base de données.

Les curseurs se conforment mieux au standard SQL

Les commandes FETCH et MOVE ont été revues pour mieux se conformer au standard SQL.

Les curseurs peuvent exister en dehors des transactions

Ces curseurs sont aussi appelés des curseurs détenables.

Nouveau protocole client/serveur

Le nouveau protocole ajoute des codes d'erreur, plus d'informations sur le statut, un démarrage plus rapide, un meilleur support des transmissions de données binaires, des valeurs de paramètres séparées à partir des commandes SQL, des instructions préparées disponibles au niveau du protocole et une récupération plus propre pour les échecs lors d'un COPY. L'ancien protocole est toujours supporté par le serveur et les clients.

Les applications libpq et ECPG sont maintenant totalement compatibles avec les threads

Alors que les précédentes versions de libpq supportaient déjà les threads, cette version améliore la compatibilité en corrigeant certains codes, non compatibles, utilisés lors du lancement de la connexion à la base de données. L'option --enable-thread-safety de configure doit être utilisé pour activer cette fonctionnalité.

Nouvelle version de l'indexage complet de texte

Une nouvelle suite d'indexage complet de texte est disponible dans contrib/tsearch2.

Nouvel outil autovacuum

Le nouvel outil autovacuum dans contrib/autovacuum surveille les tables de statistiques de la base de données sur les activités INSERT/UPDATE/DELETE et lance automatiquement un VACUUM quand cela est nécessaire.

La gestion des tableaux a été améliorée et déplacée dans le cœur du serveur

Beaucoup de limitations des tableaux ont été supprimées et les tableaux se comportent beaucoup plus comme des types de données complètement supportés.

E.148.2. Migration vers la version 7.4

Une sauvegarde/restauration grâce à pg_dump est requise pour ceux souhaitant migrer leurs données d'une version précédente.

Observez les incompatibilités suivantes :

  • Le paramétrage autocommit, côté serveur, a été supprimé et réimplémenté dans les applications clients et dans les langages. L'autocommit posait beaucoup trop de problèmes avec les langages et applications qui voulaient contrôler leur propre comportement de validation automatique, donc celui-ci a été supprimé du serveur et ajouté aux API clientes individuelles si appropriées.

  • Le contenu des messages d'erreur a un peu changé dans cette version. Un effort significatif a été fourni pour rendre ces messages plus consistants et plus orientés vers l'utilisateur. Si vos applications essaient de détecter des conditions d'erreur en analysant le message d'erreur, vous êtes fortement encouragé à utiliser le nouveau code d'erreur à la place.

  • Les jointures internes utilisant la syntaxe JOIN explicite pourraient se comporter différemment parce qu'elles sont mieux optimisées.

  • Un certain nombre de paramètres de configuration serveur ont été renommés pour plus de clarté, principalement ceux liés aux traces.

  • FETCH 0 ou MOVE 0 ne font maintenant plus rien. Dans les précédentes versions, FETCH 0 récupérerait toutes les lignes restantes et MOVE 0 se déplacerait à la fin du curseur.

  • FETCH and MOVE renvoient maintenant le nombre réel de lignes récupérées/déplacées ou 0 si au début ou à la fin du curseur. Les versions précédentes renverraient le nombre de lignes passé à la commande, pas le nombre de lignes réellement récupérées ou déplacées.

  • COPY traite maintenant les fichiers processus qui utilisent les séquences retour chariot ou retour chariot/fin de ligne. Les retours chariots ou fin de ligne littérals ne sont plus acceptés dans les données ; utilisez à la place \r et \n.

  • Les espaces suivants sont maintenant supprimés lors de la conversion du type char(n) aux types varchar(n) et text. C'est ce que la plupart des gens s'attendaient à voir arriver.

  • Le type de données float(p) mesure maintenant p en chiffres binaires, et non pas en chiffres décimals. Le nouveau comportement suit le standard SQL.

  • Les valeurs de dates ambigues doivent correspondre à l'ordre spécifié par le paramétrage datestyle. Dans les précédentes versions, la spécification de la date 10/20/03 était interprétée comme une date d'octobre même si datestyle spécifiait la date en premier. La 7.4 envoie une erreur si une spécification de date est invalide pour le paramétrage courant de datestyle.

  • Les fonctions oidrand, oidsrand et userfntest ont été supprimées. Ces fonctions n'étaient plus utiles.

  • Les littéraux de chaîne spécifiant des valeurs date/heure, tels que 'now' ou 'today', ne fonctionneront plus comme attendus dans les expressions par défaut de colonnes ; ils ne ajouteront maintenant par défaut l'heure de création de la table par défaut, pas le moment de l'ajout. À la place, les fonctions now(), current_timestamp ou current_date devraient être utilisées.

    Dans les précédentes versions, il y avait un code spécial pour que les chaînes telles que 'now' soient interprétées au moment de l'INSERT et non pas au moment de la création de la table mais ce contournement ne couvrait pas tous les cas. La version 7.4 requiert maintenant que les valeurs par défaut soient définies proprement en utilisant des fonctions comme now() ou current_timestamp. Elles fonctionneront dans toutes les situations.

  • Le signe dollar ($) n'est plus permis dans les noms d'opérateurs. À la place, cela peut être un caractère dans les identifieurs, à condition qu'il ne soit pas le premier. Ceci a été fait pour améliorer la compatibilité avec les autres systèmes de bases de données et pour éviter les problèmes de syntaxe lorsque des emplacements de paramètres ($n) sont écrits adjacents à ceux des opérateurs.

E.148.3. Modifications

Vous trouverez ci-dessous un détail des modifications entre la version 7.4 et la précédente version majeure.

E.148.3.1. Modifications des opérations du serveur

  • Autorisation des connexions IPv6 au serveur (Nigel Kukard, Johan Jordaan, Bruce, Tom, Kurt Roeckx, Andrew Dunstan)

  • Correction de SSL pour gérer les erreurs proprement (Nathan Mueller)

    Dans les précédentes versions, certains rapports d'erreur de l'API SSL n'étaient pas gérés correctement. Cette version corrige ces problèmes.

  • Amélioration des performances et de la sécurité du protocole SSL (Sean Chittenden)

    La renégotiation de clé SSL arrivait trop fréquemment, impliquant des performances SSL pauvres. De plus, la gestion de la clé initiale a été améliorée.

  • Affiche d'informations sur les verrous lorsqu'un blocage (deadlock) est détecté (Tom)

    Ceci permet un débogage plus facile de ce type de situation.

  • Mise à jour des heures de modification des socket s /tmp pour éviter leur suppression (Tom)

    Ceci devrait aider à empêcher le nettoyage du répertoire /tmp par des scripts d'administration.

  • Activation de PAM pour Mac OS X (Aaron Hillegass)

  • Index B-tree complètement compatibles avec les WAL (Tom)

    Dans les précédentes versions, dans certains cas rares, un arrêt brutal du serveur pouvait causer la corruption d'index B-tree. Cette version supprime ces quelques cas rares.

  • Permet le compactage des index B-tree et la réutilisation des pages vides (Tom)

  • Corrige la recherche incohérente des index lors de la division de la première page racine (Tom)

    Dans les précédentes versions, lorsqu'un index sur une page se divisait en deux pages, il y avait une brève période où une autre session de base de données pouvait ne pas voir une entrée d'index. Cette version corrige ce cas rare d'échecs.

  • Améliore la logique d'allocation de l'espace libre (Tom)

  • Préserve les informations sur l'espace libre entre les différents redémarrages du serveur (Tom)

    Dans les précédentes versions, la carte de l'espace libre n'était pas sauvegardée quand le postmaster était arrêté, donc les serveurs nouvellement démarrés n'avaient pas d'informations sur l'espace libre. Cette version sauvegarde la carte de l'espace libre et la recharge quand le serveur est relancé.

  • Ajoute le temps de lancement dans pg_stat_activity (Neil)

  • Nouveau code pour détecter les pages disque corrompues ; efface avec zero_damaged_pages (Tom)

  • Nouveau protocole client/serveur : plus rapide, plus de limite sur la longueur du nom de l'utilisateur, permet une sortie propre de la commande COPY (Tom)

  • Ajoute un statut de transaction, un ID de table, un ID de colonne au client/serveur protocol (Tom)

  • Ajoute des entrées/sorties binaires au protocole client/serveur (Tom)

  • Supprime le paramétrage serveur autocommit ; déplacez dans les applications clientes (Tom)

  • Changement des messages d'erreurs, codes d'erreurs et trois niveaux de détails d'erreurs (Tom, Joe, Peter)

E.148.3.2. Améliorations des performances

  • Ajout du découpage pour les agrégats GROUP BY (Tom)

  • Jointures à boucles imbriquées plus intelligentes sur les index multicolonnes (Tom)

  • Autorisation des jointures découpées à clés multiples (Tom)

  • Amélioration du « constant folding » (Tom)

  • Ajout de la capacité de mettre en ligne les fonctions SQL simples (Tom)

  • Réduction de l'utilisation de la mémoire pour les requêtes utilisant des fonctions complexes (Tom)

    Dans les précédentes versions, les fonctions renvoyant la mémoire allouée ne la libéraient pas tant que la requête n'était pas terminée. Cette version permet la libréation de la mémoire allouée par les fonctions lorsque l'appel de celle-ci se termine, réduisant la mémoire totale utilisée par les fonctions.

  • Amélioration des performances de l'optimiseur GEQO (Tom)

    Cette version corrige quelques inefficacités dans la façon dont l'optimiseur GEQO gère les chemins de requête potentiels.

  • Autorise la gestion des IN/NOT IN via des tables de découpages (Tom)

  • Amélioration des performances de NOT IN (subquery) (Tom)

  • Permet que la plupart des sous-requêtes IN soient traitées comme des jointures (Tom)

  • Les opérations de correspondance de modèles peuvent utiliser des index quelque soit la locale (Peter)

    Il n'existe aucune méthode pourque des locales non ASCII utilisent les index standards pour des comparaisons LIKE. Cette version ajoute un moyen de créer un index spécial pour LIKE.

  • Permet au postmaster de précharger les bibliothèques en utilisant preload_libraries (Joe)

    Pour les bibliothèques dynamiques requérant un long moment pour se charger, cette option est disponible pour que la bibliothèque soit pré-chargée par postmaster et héritée par toutes les sessions de la base de données.

  • Améliore le calcul des coûts par l'optimiseur, particulièrement pour les sous-requêtes (Tom)

  • Évite le tri lors la sous-requête ORDER BY correspond à la requête de haut niveau (Tom)

  • Déduit que WHERE a.x = b.y AND b.y = 42 signifie aussi que a.x = 42 (Tom)

  • Autorise les jointures de découpage (hash/merge) sur des jointures complexes (Tom)

  • Autorise les jointures de découpage sur un plus grand nombre de types de données (Tom)

  • Autorise l'optimisation des jointures internes explicites, désactivez avec join_collapse_limit (Tom)

  • Ajoute le paramètre from_collapse_limit pour contrôler la conversion des sous-requêtes en jointures (Tom)

  • Utilise le code plus rapide et plus puissant des expressions rationnelles provenant de Tcl (Henry Spencer, Tom)

  • Utilise les ensembles de relation dans l'optimiseur (Tom)

  • Améliore le temps de lancement de la connexion (Tom)

    Le nouveau protocole client/serveur requiert moins de paquets réseau pour commencer une session de la base de données.

  • Améliore les performances des déclencheurs/contraintes (Stephan)

  • Améliore la rapidité de col IN (const, const, const, ...) (Tom)

  • Corrige les index de découpage, qui pourraient être cassés dans de rares cas (Tom)

  • Améliore la concurrence et la rapidité des index de découpage (Tom)

    Les versions précédentes souffraient d'une pauvre performance pour les index de découpage, particulièrement dans les situations avec de nombreux clients. Cette version corrige ceci. Le groupe de développement est intéressé par des rapports de comparaison entre les performances d'un index B-tree et d'un index de découpage.

  • Alignement des tampons partagés sur des limites sur 32 bits pour des amélioration de la rapidité de copie (Manfred Spraul)

    Certains CPU réalisent des copies de données plus rapidement si les adresses sont alignées sur 32 bits.

  • Type de données numeric réimplémenté pour de meilleurs performances (Tom)

    numeric était auparavant stocké en base 100. Le nouveau code utilise la base 10000 pour des performances significativement meilleures.

E.148.3.3. Modification de la configuration du serveur

  • Renommage du paramètre serveur server_min_messages et log_min_messages (Bruce)

    Ceci a été fait pour que la plupart des paramètres contrôlant les traces serveur commencent avec log_.

  • Renommage de show_*_stats en log_*_stats (Bruce)

  • Renommage de show_source_port en log_source_port (Bruce)

  • Renommage de hostname_lookup en log_hostname (Bruce)

  • Ajout de checkpoint_warning pour avertir en cas de points de vérification trop fréquent (Bruce)

    Dans les versions précédentes, il était difficile de déterminer si un point de vérification arrivait trop fréquemment. Cette fonctionnalité ajoute un avertissement aux traces du serveur lorsqu'un nombre excessif de points de vérification survient.

  • Nouveaux paramètres du serveur en lecture seule con cernant la localisation (Tom)

  • Modifie les messages des traces du serveur en DEBUG plutôt que LOG (Bruce)

  • Empêche les variables de traces du serveur d'être désactivées par des utilisateurs standards (Bruce)

    Ceci est une fonctionnalité de sécurité pour que les utilisateurs standards ne puissent pas désactivés les traces activées par l'administrateur.

  • log_min_messages/client_min_messages contrôle maintenant la sortie debug_* (Bruce)

    Ceci centralise les informations de débogages du client de façon à ce que toutes les sorties de débogages puissent être envoyées soit au client soit aux traces du serveur.

  • Ajoute le support du serveur Rendezvous de Mac OS X (Chris Campbell)

    Ceci permet aux hôtes Mac OS X de chercher les serveurs PostgreSQL™ disponibles sur le réseau.

  • Ajoute la possibilité d'afficher seulement les instructions lentes en utilisant log_min_duration_statement (Christopher)

    Ceci est une fonctionnalité de débogage souvent demandée qui permet aux administrateurs de voir seulement les requêtes lentes dans les traces du serveur.

  • Autorise pg_hba.conf à accepter des masques réseau au format CIDR (Andrew Dunstan)

    Ceci permet aux administrateurs d'assembler l'adresse IP de l'hôte et les champs de masques dans un seul champ CIDR dans pg_hba.conf.

  • Nouveau paramètre is_superuser en lecture seule (Tom)

  • Nouveau paramètre log_error_verbosity pour contrôler le détail des erreurs (Tom)

    Ceci fonctionne avec la nouvelle version des rapports d'erreurs pour fournir des informations supplémentaires comme des astuces, de noms de fichiers et des numéros de lignes.

  • postgres --describe-config affiche maintenant les variables de configuration du serveur (Aizaz Ahmed, Peter)

    Cette option est utile pour les outils d'administration qui ont besoin de connaître les noms des variables de coniguration et leur minimum, maximum, valeur par défaut et descriptionss.

  • Ajoute de nouvelles colonnes dans pg_settings : context, type, source, min_val, max_val (Joe)

  • Par défaut, shared_buffers vaut 1000 et max_connections 100 si possible (Tom)

    Les anciennes versions avaient pour valeur par défaut 64 tampons partagés pour que PostgreSQL™ puisse démarrer même sur de très vieux systèmes. Cette version teste la mémoire partagée autorisée par la plateforme et sélectionne des valeurs par défaut plus raisonnable si possible. Bien sûr, les utilisateurs sont toujours encouragés à évaluer leur charge de ressources en accord avec shared_buffers.

  • Nouveau type d'enregistrement dans pg_hba.conf hostnossl pour empêcher les connexions SSL (Jon Jensen)

    Dans les précédentes versions, il n'existait pas de moyens d'empêcher les connexions SSL si le client et le serveur supportaient SSL. Cette option le permet.

  • Nouveau déplacement du paramètre geqo_random_seed (Tom)

  • Ajout du paramètre serveur regex_flavor pour contrôler le traitement des expressions rationnelles (Tom)

  • Fait que pg_ctl gère mieux les ports non standards (Greg)

E.148.3.4. Modifications sur les requêtes

  • Nouveau schéma d'informations au standard SQL (Peter)

  • Ajoute des transactions en lecture seule (Peter)

  • Affichage du nom de la clé et de la valeur dans les messages de violation de clé étrangère (Dmitry Tkach)

  • Permet aux utilisateurs de voir leur propre requêtes dans pg_stat_activity (Kevin Brown)

    Dans les versions précédentes, seul le superutilisateur pouvait voir les chaînes de requêtes en utilisant pg_stat_activity. Maintenant, les utilisateurs ordinaires peuvent voir leurs propres requêtes.

  • Corrige les agrégats dans les sous-requêtes pour correspondre au standard SQL (Tom)

    Le standard SQL indique qu'une fonction d'agrégat apparaissant dans une sous-requête appartient à la requête externe si son argument contient seulement des variables de la requête externe. Les versions précédentes de PostgreSQL™ ne gèrent pas ce point correctement.

  • Ajout d'une option pour empêcher l'ajout automatique de tables référencées dans la requête (Nigel J. Andrews)

    Par défaut, les tables mentionnées dans la requête sont automatiquement ajoutées dans la clause FROM s'ils n'y sont pas déjà. Ceci est compatible avec le comportement historique de POSTGRES™ mais est contraire au standard SQL. Cette option permet de sélectionner un comportement compatible avec le standard.

  • Autorise UPDATE ... SET col = DEFAULT (Rod)

    Ceci permet à UPDATE d'initialiser une colonne à sa valeur déclarée par défaut.

  • Autorise l'utilisation d'expressions dans LIMIT/OFFSET (Tom)

    Dans les versions précédentes, LIMIT/OFFSET pouvaient seulement être des constantes, pas des expressions.

  • Implémentation de CREATE TABLE AS EXECUTE (Neil, Peter)

E.148.3.5. Object Manipulation Changes

  • Rend la grammaire de CREATE SEQUENCE plus conforme à SQL:2003 (Neil)

  • Ajout des déclencheurs au niveau instruction (Neil)

    Bien que ceci permet à un déclencheur d'être lancé à la fin d'une instruction, il ne permet pas au déclencheur d'accéder à toutes les lignes modifiées par l'instruction. Cette possibilité est planifiée pour une future version.

  • Ajout de contraintes de vérifications pour les domaines (Rod)

    Ceci améliore grandement l'utilité des domaines en les permettant d'utiliser les contraintes de vérification.

  • Ajout d'ALTER DOMAIN (Rod)

    Ceci permet la manipulation de domaines existants.

  • Correction de plusieurs bogues pour les tables comprenant zéro colonne (Tom)

    PostgreSQL™ supporte les tables sans colonne. Ceci corrige plusieurs bogues survenant lors de l'utilisation de telles tables.

  • Fait que ALTER TABLE ... ADD PRIMARY KEY ajoute une contrainte non NULL (Rod)

    Dans les précédentes versions, ALTER TABLE ... ADD PRIMARY aurait ajouter un index unique mais pas de contrainte non NULL. Ceci est corrigé dans cette version.

  • Ajout de ALTER TABLE ... WITHOUT OIDS (Rod)

    Ceci permet de contrôler le fait qu'il y ait ou non une colonne OID pour les nouvelles lignes. Ceci est surtout utile pour sauvegarder de l'espace disque.

  • Ajout de ALTER SEQUENCE pour modifier les valeurs minimum, maximum, l'incrément, le cache et le cycle (Rod)

  • Ajout de ALTER TABLE ... CLUSTER ON (Alvaro Herrera)

    Cette commande est utilisée par pg_dump pour enregistrer la colonne de groupement pour chaque table précédemment groupée. Cette information est utilisée pour regrouper toutes les tables précédemment groupées.

  • Amélioration de la conversion automatique de type pour les domaines (Rod, Tom)

  • Permet les signes dollar dans les identifieurs sauf en premier caractère (Tom)

  • Interdit les signes dollar dans les noms d'opérateur, pour que x=$1 fonctionne (Tom)

  • Autorise la copie du schéma de la table en utilisant LIKE soustable, aussi une fonctionnalité SQL:2003 INCLUDING DEFAULTS (Rod)

  • Ajout de la clause WITH GRANT OPTION pour GRANT (Peter)

    Ceci permet à GRANT de donner aux autres utilisateurs la capacité de données des privilèges sur un objet.

E.148.3.6. Modifications des commandes utilitaires

  • Ajout de la clause ON COMMIT à CREATE TABLE pour les tables temporaires (Gavin)

    Ceci permet à une table d'être supprimée ou d'avoir toutes ces lignes supprimées lors de la validation d'une transaction.

  • Permet aux curseurs d'agir en dehors des transactions en utilisant WITH HOLD (Neil)

    Dans les précédentes versions, les curseurs étaient supprimés à la fin de la transaction qui les avait créé. Les curseurs peuvent maintenant être créés avec l'option WITH HOLD qui leur permet de continuer à être utilisé après que la transaction qui les a créé soit validée.

  • FETCH 0 et MOVE 0 ne font maintenant plus rien (Bruce)

    Dans les précédentes versions, FETCH 0 récupérait toutes les lignes restantes et MOVE 0 se déplaçait à la fin du curseur.

  • Fait que FETCH et MOVE renvoient le nombre de lignes récupérées/déplacées ou zéro si au début ou à la fin du curseur, suivant le standard SQL (Bruce)

    Dans les versions précédentes, le nombre de lignes renvoyé par FETCH et MOVE ne reflétaient pas exactement le nombre de lignes traitées.

  • Gestion propre de SCROLL avec les curseurs ou renvoi d'une erreur (Neil)

    Permettre un accès aléatoire (à la fois en avant et en arrière) aux différents types de requêtes ne peut pas se faire sans quelques travaux supplémentaires. Si SCROLL est spécifié lors de la création du curseur, ce travail supplémentaire a été réalisé. De plus, si le curseur a été créé avec NO SCROLL, aucun accès aléatoire ne sera autorisé.

  • Implémente les options compatibles SQL FIRST, LAST, ABSOLUTE n, RELATIVE n pour FETCH et MOVE (Tom)

  • Autorise EXPLAIN sur DECLARE CURSOR (Tom)

  • Permet à CLUSTER d'utiliser les index marqués comme pré-groupés par défaut (Alvaro Herrera)

  • Permet à CLUSTER de grouper toutes les tables (Alvaro Herrera)

    Ceci permet à toutes les tables précédemment groupées dans une base de données d'être regroupées avec une seule commande.

  • Empêche CLUSTER sur les index partiels (Tom)

  • Autorise les retours à la ligne DOS et Mac dans les fichiers COPY (Bruce)

  • Interdit les retours chariot comme valeur de données, les antislash-retour-chariot et \r sont toujours autorisés (Bruce)

  • Modifications sur COPY (binaire, \.) (Tom)

  • Récupération propre après un échec de COPY (Tom)

  • Empêche les possibles pertes de mémoire de COPY (Tom)

  • Fait que TRUNCATE soit sain lors de transactions (Rod)

    TRUNCATE peut maintenant être utilisé à l'intérieur d'une transaction. Si la transaction est annulée, les modifications faites par TRUNCATE sont automatiquement annulées.

  • Permet la préparation et le lien de commandes utilitaires comme FETCH et EXPLAIN (Tom)

  • Ajout de EXPLAIN EXECUTE (Neil)

  • Amélioration des performances de VACUUM sur les index en réduisant le trafic des WAL (Tom)

  • Les index fonctionnels ont été généralisés en des index sur des expressions (Tom)

    Dans les versions précédentes, les index fonctionnels supportaient seulement une simple fonction appliquée à un ou plusieurs noms de commandes. Cette version accepte tout type d'expression scalaire.

  • Fait que SHOW TRANSACTION ISOLATION corresponde à l'entrée de SET TRANSACTION ISOLATION (Tom)

  • Fait que COMMENT ON DATABASE sur les bases de données non locales génère un message d'avertissement plutôt qu'une erreur (Rod)

    Les commentaires de bases de données sont stockés dans les tables locales de la base de données. Donc, les commentaires sur une base de données doivent être stockés dans chaque base de données.

  • Améliore la fiabilité de LISTEN/NOTIFY (Tom)

  • Permet à REINDEX de réindexer fiablement les index de catalogues système non partagés (Tom)

    Ceci permet aux tables système d'être réindexées sans avoir besoin d'une session en solo, qui était nécessaire dans les versions précédentes. Les seules tables qui requièrent maintenant une session solo sont les tables système global pg_database, pg_shadow et pg_group.

E.148.3.7. Modifications sur les types de données et sur les fonctions

  • Nouveau paramètre serveur extra_float_digits pour contrôler la précision d'affichage des nombres à virgule glottante (Pedro Ferreira, Tom)

    Ceci contrôle la précision qui causait des problèmes lors des tests de régression.

  • Autorisation de +1300 comme spécificateur numérique de fuseau horaire, pour FJST (Tom)

  • Suppression des fonctions oidrand, oidsrand et userfntest rarement utilisées (Neil)

  • Ajout de la fonction md5() sur le serveur principal, auparavant déjà dans contrib/pgcrypto (Joe)

    Une fonction MD5 était fréquemment demandée. Pour des possibilités plus complexes de cryptage, utilisez contrib/pgcrypto.

  • Augmentation de l'étendue des données de timestamp (John Cochran)

  • Modification de EXTRACT(EPOCH FROM timestamp) pour que timestamp without time zone soit supposé être dans le fuseau local, et non pas en GMT (Tom)

  • Récupération des divisions par zéro au cas où le système d'exploitation ne le permet pas (Tom)

  • Modification du type de données numeric interne en base 10000 (Tom)

  • Nouvelle fonction hostmask() (Greg Wickham)

  • Corrections pour to_char() et to_timestamp() (Karel)

  • Permet aux fonctions de prendre tout type de données en argument et de renvoyer aussi tout type, en utilisant anyelement et anyarray (Joe)

    Ceci permet la création de fonctions qui peuvent fonctionner avec tout type de données.

  • Les tableaux peuvent maintenant être spécifiés comme ARRAY[1,2,3], ARRAY[['a','b'],['c','d']] ou ARRAY[ARRAY[ARRAY[2]]] (Joe)

  • Autorise une comparaison correcte des tableaux, ceci incluant le support de ORDER BY et DISTINCT (Joe)

  • Autorise les index sur les colonnes de type tableau (Joe)

  • Autorise la concaténation de tableaux avec || (Joe)

  • Autorise la qualification WHERE expr op ANY/SOME/ALL (array_expr) (Joe)

    Ceci permet aux tableaux de se comporter comme une liste de valeurs dans des requêtes comme SELECT * FROM tab WHERE col IN (array_val).

  • Nouvelles fonctions de tableaux array_append, array_cat, array_lower, array_prepend, array_to_string, array_upper, string_to_array (Joe)

  • Autorise l'utilisation de fonctions polymorphiques par les agrégats définis par l'utilisateur (Joe)

  • Permet les affectations dans des tableaux vides (Joe)

  • Autorise 60 dans la partie secondes des champs de type time, timestamp et interval (Tom)

    Les valeurs à soixante secondes sont nécesssaires pour les « leap seconds ».

  • Permet au type de données cidr d'être converti en text (Tom)

  • Interdit les noms de fuseaux horaires invalides dans SET TIMEZONE (Tom)

  • Supprime les espaces à la fin lorsque une donnée de type char est convertie en type varchar ou text (Tom)

  • Fait que float(p) mesure la précision p en chiffres binaires, et non pas en chiffres décimaux (Tom)

  • Ajoute le support IPv6 aux types de données inet et cidr (Michael Graff)

  • Ajoute la fonction family() pour rapporter si l'adresse fait partie de la famille IPv4 ou IPv6 (Michael Graff)

  • Fait que SHOW datestyle génère une sortie similaire à celle utilisée par SET datestyle (Tom)

  • Fait que EXTRACT(TIMEZONE) et SET/SHOW TIME ZONE suivent la convention SQL pour le signe des décalages de zones horaires, c'est-à-dire que le positif est l'est à partir d'UTC (Tom)

  • Correction de date_trunc('quarter', ...) (Böjthe Zoltán)

    Les anciennes versions renvoyaient une valeur incorrecte pour cet appel de fonction.

  • Fait que initcap() soit plus compatible avec Oracle (Mike Nolan)

    initcap() met en majuscule toute lettre après un caractère non alphanumérique, plutôt qu'après un espace blanc.

  • Autorise seulement l'ordre du champ datestyle pour les valeurs de données ne faisant pas partie du format ISO-8601 (Greg)

  • Ajout de nouvelles valeurs pour datestyle, MDY, DMY et YMD pour initialiser l'ordre du champ en entrée ; honore US et European pour une compatibilité ascendante (Tom)

  • Les chaînes littérales comme 'now' ou 'today' ne fonctionneront plus comme valeur par défaut d'une colonne. À la place, utilisez des fonctions comme now(), current_timestamp. (modification requise pour les instructions préparées) (Tom)

  • Traitement de NaN comme plus important que tout autre valeur dans min()/max() (Tom)

    NaN était déjà trié après les valeurs numériques ordinaires dans la plupart des cas, mais min() et max() ne le faisaient pas correctement.

  • Empêche l'intervalle de supprimer l'affichage de :00

  • Nouvelles fonctions pg_get_triggerdef(prettyprint) et pg_constraint_is_visible() (Christopher)

  • Permet la spécification de l'heure avec 040506 ou 0405 (Tom)

  • L'ordre de la date en entrée doit être YYYY-MM-DD (avec une année sur quatre chiffres) ou correspondre à datestyle

  • Fait que pg_get_constraintdef supporte les contraintes uniques, de clés primaires et de vérification de contraintes (Christopher)

E.148.3.8. Server-Side Language Changes

  • Empêche PL/pgSQL de s'arrêter brutalement lorsque RETURN NEXT est utilisé avec une variable d'enregistrement ne correspondant à aucune ligne (Tom)

  • Fait que l'interface spi_execute de PL/Python gère les valeurs NULL correctement (Andrew Bosma)

  • Autorise la déclaration des variables de type composé dans PL/pgSQL sans %ROWTYPE (Tom)

  • Corrige la fonction _quote() de PL/Python pour gérer les gros entiers

  • Modification de PL/Python en langage sans confiance, maintenant appelé plpythonu (Kevin Jacobs, Tom)

    Le langage Python ne support plus un environnement d'exécution restreint, donc la version de confiant de PL/Python a été supprimée. Si cette situation évolue, une version de PL/python pouvant être utilisé par des utilisateurs ordinaires sera préparée.

  • Autorise les fonctions polymorphiques dans PL/pgSQL (Joe, Tom)

  • Autorise les fonctions SQL polymorphiques (Joe)

  • Amélioration du mécanisme de cache des fonctions compilées dans PL/pgSQL avec un support complet du polymorphisme (Joe)

  • Ajout du nouveau paramètre $0 dans PL/pgSQL, représentant le type de retour réel de la fonction (Joe)

  • Autorise PL/Tcl et PL/Python à utiliser le même déclencheur sur des tables multiples (Tom)

  • Correction de spi_prepare de PL/Tcl pour qu'il accepte les noms de types qualifiés complètement dans la liste des types des paramètres (Jan)

E.148.3.9. Modifications sur psql

  • Ajout de \pset pager always pour utiliser en permanence le pagineur (Greg)

    Ceci force l'utilisation du pagineur même si le nombre de lignes est plus petit que la hauteur de l'écran. Ceci est valable pour les lignes de données ne tenant pas sur une ligne de l'écran.

  • Amélioration de la complétion par tabulation (Rod, Ross Reedstrom, Ian Barwick)

  • Réordonnancement de l'aide \? en la groupant (Harald Armin Massa, Bruce)

  • Ajout des commandes antislash pour liste les schémas, fonctions de conversions et conversions (Christopher)

  • \encoding est modifié pour se baser sur le paramètre serveur client_encoding (Tom)

    Dans les versions précédentes, \encoding n'était pas tenu au courant des changements de codage fait en utilisant SET client_encoding.

  • Sauvegarde du tampon de l'éditeur dans l'historique de readline (Ross)

    Lorsque \e est utilisé pour éditer une requête, le résultat est sauvegardé dans l'historique de readline pour récupération en utilisant la flèche vers le haut.

  • Amélioration de l'affichage de \d (Christopher)

  • Amélioration du mode HTML pour être plus conforme au standard (Greg)

  • Nouvelle fonction \set AUTOCOMMIT off (Tom)

    Ceci prend la place du paramètre serveur autocommit qui a été supprimé.

  • Nouveau \set VERBOSITY pour contrôler le détail des erreurs (Tom)

    Ceci contrôle le niveau du nouveau détail des rapports.

  • Nouvelle invite de séquence d'échappement %x pour afficher l'état de la transaction (Tom)

  • Les options longues pour psql sont maintenant disponibles sur toutes les plateformes

E.148.3.10. Modifications de pg_dump

  • Multiples corrections de pg_dump, incluant le format tar et les gros objets

  • Autorise la sauvegarde de schémas spécifiques par pg_dump (Neil)

  • Fait que pg_dump préserve les caractéristiques de stockage des colonnes (Christopher)

    Ceci préserve l'information ALTER TABLE ... SET STORAGE.

  • Fait que pg_dump préserve les caractéristiques CLUSTER (Christopher)

  • Fait que pg_dumpall utilise GRANT/REVOKE pour sauvegarder les droits au niveau de la base de données (Tom)

  • Autorise pg_dumpall à supporter les options -a, -s, -x de pg_dump (Tom)

  • Empêche pg_dump de mettre en minuscule les identifieurs spécifiés sur la ligne de commande (Tom)

  • Les options --use-set-session-authorization et --no-reconnect de pg_dump ne font maintenant plus rien, toutes les sauvegardes utilisent SET SESSION AUTHORIZATION

    pg_dump ne se reconnecte plus pour changer d'utilisateurs mais utilise à la place SET SESSION AUTHORIZATION. Ceci réduira le nombre de demandes de mot de passe lors des restaurations.

  • Les options longues pour pg_dump sont maintenant disponibles sur toutes les plateformes

    PostgreSQL™ inclut maintenant ses propres routines de traitement des options longues.

E.148.3.11. Modifications de libpq

  • Ajout de la fonction PQfreemem pour libérer la mémoire de Windows, suggéré pour le NOTIFY (Bruce)

    Windows requiert que la mémoire allouée dans une bibliothèque soit libérée par une fonction de la même bibliothèque, donc free() ne fonctionne pas pour libérer la mémoire allouée par libpq. PQfreemem est la bonne façon de libérer la mémoire libpq, spécialement sur Windows, et est aussi recommandée sur les autres plateformes.

  • Fonctionnalité de service de document, et ajout d'un fichier d'exemple (Bruce)

    Ceci permet aux clients de rechercher une information de connexion dans un ficher central sur la machine client.

  • Fait que PQsetdbLogin a les mêmes valeurs par défaut que PQconnectdb (Tom)

  • Autorise libpq à échouer proprement lorsque les ensembles de résultats sont trop importants (Tom)

  • Amélioration de la performance de la fonction PQunescapeBytea (Ben Lamb)

  • Autorise une libpq totalement compatible avec les threads avec l'option --enable-thread-safety de configure (Lee Kindness, Philip Yarra)

  • Autorise la fonction pqInternalNotice à accepter les chaînes de format et leurs arguments au lieu d'un simple message préformaté (Tom, Sean Chittenden)

  • Contrôle la négotiation SSL avec les valeurs sslmode disable, allow, prefer et require (Jon Jensen)

  • Autorise les nouveaux codes d'erreur et les niveaux de texte (Tom)

  • Autorise l'accès à la table et la colonne sous-jacente du résultat d'une requête (Tom)

    Ceci est utile pour les applications de création de requêtes qui veulent connaître la table sous-jacente et les noms de colonnes spécifiées avec un ensemble de résultats spécifique.

  • Autorise l'accès au statut de la transaction en cours (Tom)

  • Ajoute la capacité de passer des données binaires directement au serveur (Tom)

  • Ajout des fonctions PQexecPrepared et PQsendQueryPrepared réalisant un bind/execute des précédentes instructions préparées (Tom)

E.148.3.12. Modification de JDBC

  • Autorise setNull sur des ensembles de résultats en lecture/écriture

  • Autorise executeBatch sur une instruction préparée (Barry)

  • Support des connexions SSL (Barry)

  • Gestion des noms de schéma dans les ensembles de résultats (Paul Sorenson)

  • Ajout du support de refcursor (Nic Ferrier)

E.148.3.13. Diverses modifications dans l'interface

  • Empêche les possibles pertes de mémoire ou « core dump » lors d'un arrêt de libpgtcl (Tom)

  • Ajout de la compatibilité Informix pour ECPG (Michael)

    Ceci permet à ECPG de traiter des programmes C embarqués qui étaient écrit en utilisant certaines extensions Informix.

  • Ajout du type decimal à ECPG sur une longueur fixe, pour Informix (Michael)

  • Autorise les programmes SQL embarqués en mode compatible avec les threads après utilisation de l'option --enable-thread-safety de configure (Lee Kindness, Bruce)

    Ceci permet à de nombreux threads d'accéder à la base de données en même temps.

  • Déplacement du client Python PyGreSQL sur http://www.pygresql.org (Marc)

E.148.3.14. Modifications du code source

  • Empêche le besoin de fichiers de résultats de régression séparés par plateforme (Tom)

  • Amélioration de la primitive de verrou sur PPC (Reinhard Max)

  • Nouvelle fonction palloc0 pour allouer et effacer la mémoire (Bruce)

  • Correction du code de verrou pour le CPU s390x (64-bit) (Tom)

  • Autorise OpenBSD à utiliser les crédentiels ident locales (William Ahern)

  • Fait que les arbres de plans de requêtes sont en lecture seule pour l'exécuteur (Tom)

  • Ajout du script de démarrage pour Darwin (David Wheeler)

  • Permet à libpq de compiler avec le compilateur C++ de Borland (Lester Godwin, Karl Waclawek)

  • Utilisation de notre propre version de getopt_long() si nécessaire (Peter)

  • Conversion des scripts d'administration en C (Peter)

  • Bison >= 1.85 est maintenant requis pour construire la grammaire PostgreSQL, s'il s'agit d'une construction à partir du CVS

  • Assemblage de la documentation en un seul livre (Peter)

  • Ajout de fonctions compatibles Windows (Bruce)

  • Permet aux interfaces clients d'être compilées sous MinGW (Bruce)

  • Nouvelle fonction ereport() pour les rapports d'erreur (Tom)

  • Support du compilateur Intel sur Linux (Peter)

  • Amélioration des scripts de démarrage Linux (Slawomir Sudnik, Darko Prenosil)

  • Ajout du support pour AMD Opteron et Itanium (Jeffrey W. Baker, Bruce)

  • Suppression de l'option --enable-recode de configure

    Ce n'était plus nécessaire maintenant que nous avons CREATE CONVERSION.

  • Génère une erreur de compilation si le code spinlock n'est pas trouvé (Bruce)

    Les plateformes sans code spinlock échoueront maintenant à la compilation plutôt que silencieusement lors de l'utilisation de sémaphores. Cet échec peut être désactivé avec une nouvelle option configure.

E.148.3.15. Modifications dans contrib

  • Modification de la licence de dbmirror par celle de BSD

  • Amélioration de earthdistance (Bruno Wolff III)

  • Amélioration de la portabilité de pgcrypto (Marko Kreen)

  • Suppression du crash en xml (John Gray, Michael Richards)

  • Mise à jour d'oracle

  • Mise à jour de mysql

  • Mise à jour de cube (Bruno Wolff III)

  • Mise à jour d'earthdistance pour utiliser cube (Bruno Wolff III)

  • Mise à jour de btree_gist (Oleg)

  • Nouveau module de recherche en texte complet tsearch2 (Oleg, Teodor)

  • Ajout d'une fonction inter tableau basé sur le découpage dans tablefuncs (Joe)

  • Ajout d'une colonne serial pour trier les familles connectby() dans tablefuncs (Nabil Sayegh,Joe)

  • Ajout des connexions nommées persistantes dans dblink (Shridhar Daithanka)

  • Le nouveau pg_autovacuum permet des VACUUM automatique (Matthew T. O'Connor)

  • Fait que pgbench honore les variables d'environnement PGHOST, PGPORT, PGUSER (Tatsuo)

  • Amélioration d'intarray (Teodor Sigaev)

  • Amélioration de pgstattuple (Rod)

  • Correction d'un bogue dans metaphone() (contrib fuzzystrmatch)

  • Amélioration d'adddépend (Rod)

  • Mise à jour de spi/timetravel (Böjthe Zoltán)

  • Correction de l'option -s de dbase et amélioration de la gestion des non ASCII (Thomas Behr, Márcio Smiderle)

  • Suppression du module tableau car les fonctionnalités sont maintenant incluent par défaut (Joe)