PostgreSQLLa base de données la plus sophistiquée au monde.

E.161. Sortie 7.2

[Note]

Date de sortie

2002-02-04

E.161.1. Aperçu

Cette version améliore PostgreSQL™ pour une utilisation avec des applications gèrant de gros volumes.

Modifications majeures dans cette version :

VACUUM

L'opération VACUUM ne verrouille plus les tables, permettant du coup un accès à l'utilisateur normal pendant le vacuum. Une nouvelle commande VACUUM FULL fait le vacuum ancien style en verrouillant la table et en diminuant la copie disque de la table.

Transactions

Il n'y a plus de problèmes avec les installations dépassant quatre milliards de transactions.

OID

Les OID sont maintenant optionnelles. Les utilisateurs peuvent maintenant créer des tables sans OID dans le cas où l'utilisation d'OID est excessif.

Optimiseur

Le système calcule maintenant des statistiques de colonnes lors d'ANALYZE, permettant de meilleurs choix pour l'optimiseur.

Sécurité

Une nouvelle option de cryptage MD5 permet un stockage plus sécurisé et le transfert des mots de passe. Une nouvelle option d'authentification par socket de domaine Unix est disponible sur les systèmes Linux et BSD.

Statistiques

Les administrateurs peuvent utiliser le nouveau module de statistiques d'accès aux tables pour obtenir des informations détaillées sur l'utilisation des tables et index.

Internationalisation

Les messages des programmes et des bibliothèques peuvent maintenant être affichés dans plusieurs langues.

E.161.2. Migration vers la version 7.2

Une sauvegarde/restauration avec pg_dump est requis pour ceux qui souhaitent migrer leur données d'une version précédente.

Observez les incompatibilités suivantes :

  • La sémantique de la commande VACUUM a changé dans cette version. Vous devez mettre à jour vos procédures de maintenance en adéquation.

  • Dans cette version, les comparaisons utilisant = NULL retourneront toujours faux (ou NULL, plus précisément). Les anciennes versions transformaient automatiquement cette syntaxe en IS NULL. L'ancien comportement peut être réactivé en utilisant un paramètre de postgresql.conf.

  • Les fichiers de configuration pg_hba.conf et pg_ident.conf sont maintenant rechargés après réception d'un signal SIGHUP, pas avec chaque connexion.

  • La fonction octet_length() renvoie maintenant la taille des données non compressées.

  • La valeur de type date/time 'current' n'est plus disponible. Vous aurez besoin de réécrire vos applications.

  • Les fonctions timestamp(), time() et interval() ne sont plus disponibles. À la place, utilisez timestamp 'string' ou CAST.

La syntaxe SELECT ... LIMIT #,# sera supprimée dans la prochaine version. Vous devez modifier vos requêtes pour utiliser des clauses LIMIT et OFFSET séparées, c'est-à-dire LIMIT 10 OFFSET 20.

E.161.3. Modifications

E.161.3.1. Server Operation

  • Création de fichiers temporaires dans un répertoire séparé (Bruce)

  • Suppression des fichiers temporaires orphelins au lancement de postmaster (Bruce)

  • Ajout d'index uniques à quelques tables système (Tom)

  • Réorganisation des opérateurs de tables système (Oleg Bartunov, Teodor Sigaev, Tom)

  • Renommage de pg_log en pg_clog (Tom)

  • Activation de SIGTERM, SIGQUIT pour tuer les serveurs (Jan)

  • Suppression de la limite du nombre de serveurs au moment de la compilation (Tom)

  • Meilleure nettoyage pour les échecs de ressources sémaphores (Tatsuo, Tom)

  • Permet un meilleur retour au début des ID de transaction (Tom)

  • Suppression des OID pour certaines tables système (Tom)

  • Suppression de la vérification d'erreur "violation de la modification des données ayant lancé le déclencheur" (Tom)

  • Création du portail SPI des plans préparés/sauvegardés (Jan)

  • Les fonctions de colonnes SPI fonctionnent avec les colonnes systèmes (Tom)

  • Amélioration de la compression des grandes valeurs (Tom)

  • Collecteur de statistiques pour les accès aux tables et index (Jan)

  • Tronque les noms de séquences très longs en une valeur raisonnable (Tom)

  • Mesure les temps de transaction en millisecondes (Thomas)

  • Correction des parcours séquentiels de TID (Hiroshi)

  • L'ID du superutilisateur est maintenant fixé à 1 (Peter E)

  • Nouvelle option "reload" de pg_ctl (Tom)

E.161.3.2. Performance

  • Amélioration de l'optimiseur (Tom)

  • Nouvelle statistique dans la colonne histogramme pour l'optimiseur (Tom)

  • Réutilisation des fichiers de trace en pré-écriture (WAL) plutôt que de les annuler (Tom)

  • Amélioration du cache (Tom)

  • Amélioration de l'optimiseur avec IS NULL, IS NOT NULL (Tom)

  • Amélioration du gestionnaire de verrous pour réduire le temps de conservation d'un verrou (Tom)

  • Conservation des entrées relcache pour les fonctions de support d'accès par index (Tom)

  • Permet une meilleure sélectivité avec NaN et les infinies dans NUMERIC (Tom)

  • Amélioration des performances de R-tree (Kenneth Been)

  • Division des B-tree plus efficace (Tom)

E.161.3.3. Droits

  • Modification des droits UPDATE, DELETE pour qu'ils soient bien distincts (Peter E)

  • Nouveaux droits REFERENCES, TRIGGER (Peter E)

  • Autorise GRANT/REVOKE vers/à partir de plus d'un utilisateur à la fois (Peter E)

  • Nouvelle fonction has_table_privilege() (Joe Conway)

  • Autorise les utilisateurs standards à lancer un vacuum sur la base de données (Tom)

  • Nouvelle commande SET SESSION AUTHORIZATION (Peter E)

  • Correction d'un bogue dans les modifications de droits sur les tables nouvellement créées (Tom)

  • Interdit l'accès de pg_statistic aux utilisateurs normaux, ajout de vues accessibles aux utilisateurs (Tom)

E.161.3.4. Authentification de l'utilisateur

  • Lance un autre postmaster avant de réaliser l'authentification pour empêcher les blocages (Peter E)

  • Ajout de l'authentification ident sur les sockets de domaine Unix pour Linux, *BSD (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)

  • Ajout d'une méthode d'authentification par mot de passe utilisant le cryptage MD5 (Bruce)

  • Autorise le cryptage des mots de passe stockés utilisant MD5 (Bruce)

  • Authentification PAM (Dominic J. Eidson)

  • Chargement de pg_hba.conf et pg_ident.conf uniquement au lancement et après un SIGHUP (Bruce)

E.161.3.5. Configuration du serveur

  • Interprétation de quelques abréviations de fuseaux horaires en tant qu'australien plutôt qu'américain du nord, configurable à l'exécution (Bruce)

  • Nouveau paramètre pour initialiser le niveau d'isolation par défaut d'une transaction (Peter E)

  • Nouveau paramètre pour activer la conversion de "expr = NULL" en "expr IS NULL", désactivé par défaut (Peter E)

  • Nouveau paramètre pour contrôler l'utilisation de la mémoire par VACUUM (Tom)

  • Nouveau paramètre pour initialiser le délai autorisé pour terminer l'authentification du client (Tom)

  • Nouveau paramètre pour configurer le nombre maximum de fichiers ouverts (Tom)

E.161.3.6. Requêtes

  • Les instructions ajoutées par des règles INSERT s'exécutent maintenant après l'INSERT (Jan)

  • Empêche les noms de relation mal formés dans la liste cible (Bruce)

  • Les NULL sont maintenant triés après les valeurs normales dans un ORDER BY (Tom)

  • Nouveaux tests booléens IS UNKNOWN, IS NOT UNKNOWN (Tom)

  • Nouveau mode de verrou SHARE UPDATE EXCLUSIVE (Tom)

  • Nouvelle commande EXPLAIN ANALYZE affichant les temps d'exécution et les nombres de lignes (Martijn van Oosterhout)

  • Correction d'un problème avec LIMIT et les sous-requêtes (Tom)

  • Correction de LIMIT, DISTINCT ON placés dans des sous-requêtes (Tom)

  • Correction d'EXCEPT/INTERSECT imbriqués (Tom)

E.161.3.7. Manipulation de schémas

  • Correction de SERIAL pour les tables temporaires (Bruce)

  • Autorise les séquences temporaires (Bruce)

  • Les séquences utilisent maintenant int8 en interne (Tom)

  • Le nouveau SERIAL8 crée des colonnes int8 avec des séquences, par défaut il s'agit de séquences SERIAL4 (Tom)

  • Rend les OID optionnel en utilisant WITHOUT OIDS (Tom)

  • Ajout de la synatxe %TYPE pour CREATE TYPE (Ian Lance Taylor)

  • Ajout de ALTER TABLE / DROP CONSTRAINT pour les contraintes CHECK (Christopher Kings-Lynne)

  • Nouveau CREATE OR REPLACE FUNCTION pour modifier la fonction existante (préservant la fonction OID) (Gavin Sherry)

  • Ajout d'ALTER TABLE / ADD [ UNIQUE | PRIMARY ] (Christopher Kings-Lynne)

  • Autorise le renommage de colonne dans les vues

  • Fait que ALTER TABLE / RENAME COLUMN met à jour les noms de colonnes des index (Brent Verner)

  • Correction pour ALTER TABLE / ADD CONSTRAINT ... CHECK avec les tables héritées (Stephan Szabo)

  • ALTER TABLE RENAME met à jour correctement les arguments du déclencheurs de clé étrangère (Brent Verner)

  • DROP AGGREGATE et COMMENT ON AGGREGATE acceptent maintenant un aggtype (Tom)

  • Ajout de la conversion automatique du type de données en retour pour les fonctions SQL (Tom)

  • Permet aux index GiST de gérer les NULL et les index à plusieurs clés (Oleg Bartunov, Teodor Sigaev, Tom)

  • Activation des index partiels (Martijn van Oosterhout)

E.161.3.8. Commandes outils

  • Ajout de RESET ALL, SHOW ALL (Marko Kreen)

  • CREATE/ALTER USER/GROUP accepte les options dans n'importe quel ordre (Vince)

  • Ajout de la fonctionnalité LOCK A, B, C (Neil Padgett)

  • Nouvelle option ENCRYPTED/UNENCRYPTED pour CREATE/ALTER USER (Bruce)

  • Le nouveau VACUUM léger ne verrouille pas la table ; l'ancienne sémantique est disponible en tant que VACUUM FULL (Tom)

  • Désactivation de COPY TO/FROM sur les vues (Bruce)

  • La chaîne COPY DELIMITERS doit avoir exactement un caractère (Tom)

  • Le message d'avertissement du VACUUM pour le nombre de lignes d'index plus petit que l'en-tête apparaît maintenant si approprié (Martijn van Oosterhout)

  • Correction des vérifications de droits pour CREATE INDEX (Tom)

  • Interdit l'utilisation inappropriée de CREATE/DROP INDEX/TRIGGER/VIEW (Tom)

E.161.3.9. Types de données et fonctions

  • SUM(), AVG(), COUNT() utilisent maintenant int8 en interne pour des questions de rapidité (Tom)

  • Ajout de convert(), convert2() (Tatsuo)

  • Nouvelle fonction bit_length() (Peter E)

  • Fait que le "n" dans CHAR(n)/VARCHAR(n) représente le nombre de lettres, pas le nombre d'octets (Tatsuo)

  • CHAR(), VARCHAR() rejetent maintenant les chaînes trop longues (Peter E)

  • BIT VARYING rejete maintenant les chaînes de bits trop longues (Peter E)

  • BIT rejete maintenant les chaînes de bits ne correspondant pas à la taille déclarée (Peter E)

  • Fonctions de conversions texte pour INET, CIDR (Alex Pilosov)

  • Opérateurs << et <<= indexables pour INET, CIDR (Alex Pilosov)

  • Bytea \### requiert maintenant un numéro valide à trois chiffres octals

  • Amélioration des comparaisons de Bytea, supporte maintenant =, <>, >, >=, < et <=

  • Bytea supporte maintenant les index B-tree

  • Bytea supporte maintenant LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE

  • Bytea supporte maintenant la concaténation

  • Nouvelles fonctions bytea : position, substring, trim, btrim et length

  • Nouveau mode de fonction pour encode(), "escaped", convertit les bytea échappés de façon minimale vers/à partir du texte

  • Ajout de pg_database_encoding_max_length() (Tatsuo)

  • Ajout de la fonction pg_client_encoding() (Tatsuo)

  • now() renvoie l'heure avec une précision à la milliseconde (Thomas)

  • Nouveau type de données TIMESTAMP WITHOUT TIMEZONE (Thomas)

  • Ajout de la spécification ISO date/time avec "T", yyyy-mm-ddThh:mm:ss (Thomas)

  • Nouvelles fonctions de comparaisons des xid/int (Hiroshi)

  • Ajout de la précision vers les types de données TIME, TIMESTAMP et INTERVAL (Thomas)

  • Modification de la ligique de coercion des types pour tenter en premier lieu les fonctions compatibles binairement (Tom)

  • Nouvelle fonction encode() installée par défaut (Marko Kreen)

  • Amélioration des fonctions de conversion to_*() (Karel Zak)

  • Optimisation de LIKE/ILIKE lors de l'utilisation de codage sur un seul octet (Tatsuo)

  • Nouvelles fonctions dans contrib/pgcrypto : crypt(), hmac(), encrypt(), gen_salt() (Marko Kreen)

  • Bonne description de la fonction translate() (Bruce)

  • Ajout de l'argument INTERVAL pour SET TIME ZONE (Thomas)

  • Ajout de la syntaxe INTERVAL YEAR TO MONTH (etc.) (Thomas)

  • Optimisation des fonctions length lors de l'utilisation de codage sur un seul octet (Tatsuo)

  • Corrections de path_inter, path_distance, path_length, dist_ppath pour gérer les chemins fermés (Curtis Barrett, Tom)

  • octet_length(text) renvoie maintenant une longueur non compressée (Tatsuo, Bruce)

  • Gestion du nom complet "July" dans les littéraux date/time (Greg Sabino Mullane)

  • Quelques appels de fonction datatype() sont maintenant évalués différemment

  • Ajout du support pour les spécifications d'heure julienne et ISO (Thomas)

E.161.3.10. Internationalisation

  • Support de la langue nationale dans psql, pg_dump, libpq et le serveur (Peter E)

  • Traductions des messages en chinois (simplifié, traditionnel), tchèque, français, allemand, hongrois, russe, suèdois (Peter E, Serguei A. Mokhov, Karel Zak, Weiping He, Zhenbang Wei, Kovacs Zoltan)

  • Rend trim, ltrim, rtrim, btrim, lpad, rpad, translate conscient du multi-octets (Tatsuo)

  • Ajout du support de LATIN5,6,7,8,9,10 (Tatsuo)

  • Ajout du support de ISO 8859-5,6,7,8 (Tatsuo)

  • Le bon LATIN5 signifie ISO-8859-9, non pas ISO-8859-5 (Tatsuo)

  • Rend mic2ascii() conscient du non ASCII (Tatsuo)

  • Rejète les séquences de caractères multi-octets invalides (Tatsuo)

E.161.3.11. PL/pgSQL

  • Utilise maintenant les portails pour les boucles SELECT, permettant d'énormes ensembles de résultats (Jan)

  • Support de CURSOR et de REFCURSOR (Jan)

  • Peut maintenant renvoyer des curseurs ouverts (Jan)

  • Ajout de ELSEIF (Klaus Reger)

  • Amélioration des rapports d'erreurs PL/pgSQL, incluant l'emplacement de l'erreur (Tom)

  • Autorisation des mots clés IS ou FOR dans la déclaration de curseurs pour compatibilité (Bruce)

  • Correction de SELECT ... FOR UPDATE (Tom)

  • Correction de PERFORM lorsqu'il renvoie plusieurs lignes (Tom)

  • PL/pgSQL utilise le code de coercion de type du serveur (Tom)

  • Correction d'une perte mémoire (Jan, Tom)

  • Rend optionnel le point virgule en fin (Tom)

E.161.3.12. PL/Perl

  • Nouveau PL/Perl sans confiance du serveur (Alex Pilosov)

  • PL/Perl est maintenant construit sur quelques plateformes même si libperl n'est pas une bibliothèque partagée (Peter E)

E.161.3.13. PL/Tcl

  • Rapporte maintenant errorInfo (Vsevolod Lobko)

  • Ajout de la fonction spi_lastoid (bob@redivi.com)

E.161.3.14. PL/Python

  • ... est nouveau (Andrew Bosma)

E.161.3.15. psql

  • \d affiche les index dans un groupe unique et primaire (Christopher Kings-Lynne)

  • Autorise les points virgules à la fin dans les commandes antislashs (Greg Sabino Mullane)

  • Lecture du mot de passe à partir de /dev/tty si possible

  • Force une nouvelle invite du mot de passe lors d'un changement d'utilisateur et de base de données (Tatsuo, Tom)

  • Formate le bon nombre de colonnes pour Unicode (Patrice)

E.161.3.16. libpq

  • Nouvelle fonction PQescapeString() pour échapper les guillemets dans les chaînes de commande (Florian Weimer)

  • Nouvelle fonction PQescapeBytea() échappe les chaînes binaires à utiliser comme des littéraux de chaînes SQL

E.161.3.17. JDBC

  • Renvoie l'OID d'INSERT (Ken K)

  • Gestion d'un plus grand nombre de types de données (Ken K)

  • Gestion des guillemets simples et des retours chariots dans les chaînes (Ken K)

  • Gestion des variables NULL (Ken K)

  • Correction pour la gestion des fuseaux horaires (Barry Lind)

  • Amélioration du support de Druid

  • Autorisation des caractères à huit bits avec un serveur non compatible avec le multi-octets (Barry Lind)

  • Support des types BIT, BINARY (Ned Wolpert)

  • Réduction de l'utilisation de la mémoire (Michael Stephens, Dave Cramer)

  • Mise à jour de DatabaseMetaData (Peter E)

  • Ajout de DatabaseMetaData.getCatalogs() (Peter E)

  • Corrections du codage (Anders Bengtsson)

  • Méthodes get/setCatalog (Jason Davies)

  • DatabaseMetaData.getColumns() renvoie maintenant les valeurs par défaut des colonnes (Jason Davies)

  • Amélioration de la performance de DatabaseMetaData.getColumns() (Jeroen van Vianen)

  • Rassemblement de JDBC1 et JDBC2 (Anders Bengtsson)

  • Améliorations des performances des transactions (Barry Lind)

  • Corrections sur les tableaux (Greg Zoller)

  • Ajout de la sérialisation

  • Correction du traitement en lots (Rene Pijlman)

  • Réorganisation de la méthode ExecSQL (Anders Bengtsson)

  • Corrections de getColumn() (Jeroen van Vianen)

  • Correction de la fonction isWriteable() (Rene Pijlman)

  • Amélioration du passage des tests de conformance JDBC2 (Rene Pijlman)

  • Ajout du type bytea (Barry Lind)

  • Ajout de isNullable() (Rene Pijlman)

  • Corrections pour la suite de tests JDBC date/time (Liam Stewart)

  • Correction sur SELECT 'id' AS xxx FROM table (Dave Cramer)

  • Correction de DatabaseMetaData pour afficher la bonne précision (Mark Lillywhite)

  • Nouvelles clés getImported/getExported (Jason Davies)

  • Support des mots de passe cryptés MD5 (Jeremy Wohl)

  • Correction pour réellement utiliser le cache des types (Ned Wolpert)

E.161.3.18. ODBC

  • Suppression de la limite sur la taille des requêtes (Hiroshi)

  • Suppression de la limite sur la taille du champ texte (Hiroshi)

  • Correction de SQLPrimaryKeys en mode multi-octets (Hiroshi)

  • Autorisation des appels de procédure ODBC (Hiroshi)

  • Amélioration de la gestion des booléens (Aidan Mountford)

  • La plupart des options de configuration sont maintenant configurables via le DSN (Hiroshi)

  • Corrections des performances du multi-octets (Hiroshi)

  • Autorise l'utilisation du pilote avec iODBC ou unixODBC (Peter E)

  • Support du cryptage des mots de passe MD5 (Bruce)

  • Ajout de plusieurs fonctions de compatibilité dans odbc.sql (Peter E)

E.161.3.19. ECPG

  • Implémentation de EXECUTE ... INTO (Christof Petig)

  • Support du descripteur de plusieurs lignes (c'est-à-dire CARDINALITY) (Christof Petig)

  • Correction pour les paramètres de GRANT (Lee Kindness)

  • Correction d'un bogue sur INITIALLY DEFERRED

  • Plusieurs corrections de bogues (Michael, Christof Petig)

  • Allocation automatique pour les tableaux de variable (int *ind_p=NULL)

  • Allocation automatique pour les tableaux de chaînes (char **foo_pp=NULL)

  • Correction de ECPGfree_auto_mem

  • Tous les noms de fonction avec un lien externe sont maintenant préfixés par ECPG

  • Corrections pour les tableaux de structures (Michael)

E.161.3.20. Interfaces diverses

  • Correction de fetchone() pour Python (Gerhard Haring)

  • Utilisation d'UTF, Unicode dans Tcl lorsqu'approprié (Vsevolod Lobko, Reinhard Max)

  • Ajout de COPY TO/FROM dans Tcl (ljb)

  • Empêche la sortie des classes d'opérateurs d'index par défaut dans pg_dump (Tom)

  • Correction d'une perte mémoire dans libpgeasy (Bruce)

E.161.3.21. Construction et installation

  • Corrections sur configure, le chargeur dynamique et les bibliothèques partagées (Peter E)

  • Corrections dans le port QNX 4 (Bernd Tegge)

  • Corrections dans les ports Cygwin et Windows (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)

  • Corrections pour les échecs de communication par socket sous Windows (Magnus, Mikhail Terekhov)

  • Correction de compilation pour Hurd (Oliver Elphick)

  • Corrections sur BeOS (Cyril Velter)

  • Suppression de configure --enable-unicode-conversion, activé maintenant par le multi-octets (Tatsuo)

  • Corrections pour AIX (Tatsuo, Andreas)

  • Correction du make parallèle (Peter E)

  • Installation des pages man du langage SQL dans des répertoires spécifiques aux OS (Peter E)

  • Renommage de config.h en pg_config.h (Peter E)

  • Réorganisation de l'emplacement d'installation des fichiers d'en-tête (Peter E)

E.161.3.22. Code source

  • Suppression de SEP_CHAR (Bruce)

  • Nouvelles accroches GUC (Tom)

  • Assemblage de GUC et de la gestion de la ligne de commandes (Marko Kreen)

  • Suppression de EXTEND INDEX (Martijn van Oosterhout, Tom)

  • Nouvel outil pgjindent pour indenter le code java (Bruce)

  • Suppression de la définition de true/false lors d'une compilation sous C++ (Leandro Fanzone, Tom)

  • Corrections à pgindent (Bruce, Tom)

  • Remplacement de strcasecmp() avec strcmp() lorsque cela est approprié (Peter E)

  • Amélioration de la portabilité dynahash (Tom)

  • Ajout de l'utilisation de 'volatile' dans les structures spinlock

  • Amélioration de la logique de gestion des signaux (Tom)

E.161.3.23. Contrib

  • Nouveau contrib/rtree_gist (Oleg Bartunov, Teodor Sigaev)

  • Nouveau contrib/tsearch, indexage de textes complets (Oleg, Teodor Sigaev)

  • Ajout de contrib/dblink pour l'accès distant aux bases de données (Joe Conway)

  • Outil de conversion Oracle contrib/ora2pg (Gilles Darold)

  • Outil de conversion XML contrib/xml (John Gray)

  • Corrections sur contrib/fulltextindex (Christopher Kings-Lynne)

  • Nouveau contrib/fuzzystrmatch avec levenshtein et métaphone, rassemblement de soundex (Joe Conway)

  • Ajout des requêtes booléennes dans contrib/intarray, des recherches binaires, et correctifs (Oleg Bartunov)

  • Nouvel outil pg_upgrade (Bruce)

  • Ajout de nouvelles options à pg_resetxlog (Bruce, Tom)