diff --git a/doc/FAQ_french b/doc/FAQ_french new file mode 100644 index 0000000000000000000000000000000000000000..9e00870214e3f2ea6e6c390ac6e411563ad62a45 --- /dev/null +++ b/doc/FAQ_french @@ -0,0 +1,1322 @@ + + Foire Aux Questions (FAQ) pour PostgreSQL + + Dernière mise à jour : vendredi 11 juillet 2004 23:58:24 + + Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us) + + La plus récente version de ce document est disponible sur + http://www.PostgreSQL.org/docs/faqs/FAQ.html. + + Les questions spécifiques à la plateforme sont répondues sur + http://www.PostgreSQL.org/docs/index.html. + _________________________________________________________________ + + Questions générales + + 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? + 1.2) Quelle est la licence de PostgreSQL ? + 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? + 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ? + 1.5) Où puis-je me procurer PostgreSQL ? + 1.6) Où puis-je obtenir du support ? + 1.7) Quelle est la dernière version ? + 1.8) Quelle documentation est disponible ? + 1.9) Comment savoir quels sont les bogues connus ou les + fonctionnalités manquantes ? + 1.10) Comment puis-je apprendre le SQL ? + 1.11) PostgreSQL est-il compatible an 2000 ? + 1.12) Comment puis-je rejoindre l'équipe de développement ? + 1.13) Comment dois-je soumettre un rapport de bogue ? + 1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ? + 1.15) Comment puis-je aider financièrement PostgreSQL ? + + Questions sur le client utilisateur + + 2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ? + 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des + pages Web ? + 2.3) PostgreSQL a-t-il une interface graphique ? + 2.4) Quels langages sont disponibles pour communiquer avec + PostgreSQL ? + + Questions administratives + + 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? + 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un + message core dumped. Pourquoi ? + 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. + Pourquoi ? + 3.4) Quand je lance postmaster, j'obtiens des erreurs + IpcSemaphoreCreate. Pourquoi ? + 3.5) Comment contrôler les connexions d'autres machines ? + 3.6) Comment règler le moteur de la base de données pour de meilleures + performances ? + 3.7) Quelles fonctionalités de déboguage sont disponibles ? + 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many + clients quand je me connecte ? + 3.9) Que contient le répertoire pgsql_tmp ? + 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de + restaurer pour mettre a jour les versions de PostgreSQL ? + 3.11) Quels matériels dois-je utiliser ? + + Questions fonctionnelles + + 4.1) Quelle est la différence entre curseur binaire et curseur + normal ? + 4.2) Comment faire un SELECT seulement sur les premières lignes d'une + requête ? Sur une ligne aléatoire ? + 4.3) Comment obtenir une liste des tables ou d'autres choses que je + vois dans psql ? + 4.4) Comment supprime-t-on une colonne d'une table, ou comment + change-t-on son type de données ? + 4.5) Quelle est la taille maximale pour une ligne, une table et une + base de données ? + 4.6) Combien d'espace disque faut-il pour stocker les données d'un + fichier texte typique ? + 4.7) Comment puis-je savoir quels index, tables, bases de données et + utilisateurs sont définis ? + 4.8) Mes requêtes sont lentes ou ne font pas usage des index. + Pourquoi ? + 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ? + 4.10) Qu'est-ce qu'un index R-tree ? + 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ? + 4.12) Comment puis-je réaliser des recherches par des expressions + rationnelles ainsi que des recherches non sensibles à la casse ? + Comment puis-je utiliser un index lors de recherches non sensibles à + la casse ? + 4.13) Comment puis-je détecter si un champ est NULL dans une requête ? + 4.14) Quelle sont les différences entre les nombreux types de + caractères ? + 4.15.1) Comment puis-je créer un champ série, c'est-à-dire + s'incrémentant automatiquement ? + 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une + insertion ? + 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes + lorsque plusieurs utilisateurs les lancent en même temps ? + 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors + d'une annulation de transaction ? Pourquoi existe-t'il des trous dans + la numérotation de ma colonne séquentielle (SERIAL) ? + 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ? + 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ? + 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in + AllocSetAlloc() ? + 4.19) Comment puis-je connaître la version de PostgreSQL que + j'utilise ? + 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations + avec des gros objets ? + 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure + actuelle comme valeur ? + 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ? + 4.23) Comment puis-je réaliser une jointure externe ? + 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de + données ?? + 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir + d'une fonction ? + 4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL + functions? + 4.27) Quelles options de replication sont disponibles ? + 4.28) Quelles options de cryptage sont disponibles ? + + Etendre PostgreSQL + + 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec + psql, pourquoi cela finit-il avec un "dump core" ? + 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions + pour PostgreSQL ? + 5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ? + 5.4) J'ai modifié un fichier source. Pourquoi la modification + n'est-elle pas visible après la recompilation ? + _________________________________________________________________ + + Questions générales + + 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? + + PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible + sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant + entendre la prononciation. + + PostgreSQL est une amélioration du système de gestion de bases de + données POSTGRES (et est toujours quelque fois appelé "Postgres"), un + prototype de recherche de SGBD de prochaine génération. PostgreSQL + garde le puissant modèle de données et les types de données riches de + POSTGRES, mais remplace le langage de requêtes PostQuel par un + sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources + complets sont disponibles. + + PostgreSQL est écrit par une équipe de développeurs qui sont tous + inscrits à la liste de diffusion de développement de PostgreSQL. Le + coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et + voir la section 1.6 pour contacter les développeurs). Cette équipe est + responsable de tout le développement de PostgreSQL. C'est un projet + soutenu par une communauté sans être contrôlé par une société. Pour y + contribuer, voir la FAQ des développeurs sur + http://www.postgresql.org/docs/faqs/FAQ_DEV.html. + + Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen. + Beaucoup d'autres personnes ont contribué au portage, aux tests, au + déboguage et à l'amélioration du code. Le code de Postgres original, + duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux + étudiants diplômés et non diplômés, et de programmeurs travaillant + sous la direction du Professeur Michael Stonebraker à l'université de + Californie, Berkeley. + + Le nom original du logiciel à Berkeley était Postgres. Quand le SQL + fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996, + le nom fut changé en PostgreSQL. + + 1.2) Quelle est la licence de PostgreSQL ? + + PostgreSQL est distribué sous la licence suivante : + + PostgreSQL Data Base Management System + + Portions copyright (c) 1996-2004, PostgreSQL Global Development Group + Portions Copyright (c) 1994-6 Regents of the University of California + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written + agreement is hereby granted, provided that the above copyright notice + and this paragraph and the following two paragraphs appear in all + copies. + + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY + FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND + ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, + UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + + La licence ci-dessus est la licence BSD, une licence open-source + classique. + + 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? + + En général, tout environnement compatible Unix moderne devrait pouvoir + faire fonctionner PostgreSQL. Les environnements qui ont été testés + explicitement sont listés dans les instructions d'installation. + + 1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ? + + Client + + Il est possible de compiler la bibliothèque C libpq, psql et d'autres + interfaces et applications clientes pour qu'elles tournent sous des + environnements MS Windows. Dans ce cas, le client tourne sous MS + Windows et communique par TCP/IP avec un serveur tournant sous un + environnement Unix supporté. Un fichier win32.mak est inclus dans la + distribution pour construire une bibliothèque libpq psql Win32. + PostgreSQL communique aussi avec des clients ODBC. + + Serveur + + Le serveur de base de données peut tourner sous Windows NT et Windows + 2000 en utilisant Cygwin, la bibliothèque de portage Unix/NT de + Cygnus. Voir pgsql/doc/FAQ_MSWIN dans la distribution ou la FAQ MS + Windows sur http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN. + + Un port natif sur MS Windows NT/2000/XP est en court. Pour plus de + détails sur le statut actuel de PostgreSQL sur Windows, voir + http://techdocs.postgresql.org/guides/Windows et + http://momjian.postgresql.org/main/writings/pgsql/win32.html. + + Il existe aussi un port sur Novell Netware sur + http://forge.novell.com. + + 1.5) Où puis-je me procurer PostgreSQL ? + + Le site FTP anonyme principal de PostgreSQL est + ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site + web principal. + + 1.6) Où puis-je obtenir du support ? + + La liste de diffusion principale est pgsql-general@PostgreSQL.org. + Elle est disponible pour discuter de sujets en rapport avec + PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les + lignes suivantes dans le corps du message (pas dans la ligne du + sujet) : + subscribe + end + + à pgsql-general-request@PostgreSQL.org. + + Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un + courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le + corps : + subscribe + end + + Les recueils sont envoyés aux membres de cette liste dès que la liste + principale a reçu 30 Ko de messages. + + Une liste de diffusion de bogues est disponible. Pour s'y inscrire, + envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le + corps : + subscribe + end + + Une liste de diffusion pour les développeurs est aussi disponible. + Pour s'y inscrire, envoyez un courriel à + pgsql-hackers-request@PostgreSQL.org avec dans le corps : + subscribe + end + + Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur + le site web de PostgreSQL : + + http://www.PostgreSQL.org + + Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL. + Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER" + irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net. + + Une liste de sociétés pouvant fournir un support commercial est + disponible sur http://techdocs.postgresql.org/companies.php. + + 1.7) Quelle est la dernière version ? + + La dernière version de PostgreSQL est la version 7.4.3. + + Nous projetons de sortir une version majeure tous les six à huit mois. + + 1.8) Quelle documentation est disponible ? + + Plusieurs manuels, pages de manuel ainsi que des petits exemples de + test sont inclus dans la distribution. Voir le répertoire /doc. Vous + pouvez aussi accéder aux manuels en ligne sur + http://www.PostgreSQL.org/docs. + + Deux livres sur PostgreSQL sont disponibles en ligne sur + http://www.PostgreSQL.org/docs/awbook.html et + http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur + PostgreSQL pouvant être achetés sur + http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi + une collection d'articles techniques sur PostgreSQL sur + http://techdocs.PostgreSQL.org/. + + psql possède des commandes \d pratiques montrant des informations sur + les types, opérateurs, fonctions, aggrégats, etc. + + Notre site web contient encore plus de documentations. + + 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités + manquantes ? + + PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre + liste TODO pour les bogues connus, les fonctionnalités manquantes et + les plans pour le futur. + + 1.10) Comment puis-je apprendre le SQL ? + + Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html + enseigne le SQL. Il existe un autre livre PostgreSQL sur + http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur + http://www.intermedia.net/support/sql/sqltut.shtm, + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM + et http://sqlcourse.com. + + Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, + Second Edition" se trouve sur + http://members.tripod.com/er4ebus/sql/index.htm + + Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman, + Judith S., et al., Addison-Wesley. D'autres aiment The Complete + Reference SQL, Groff et al., McGraw-Hill. + + 1.11) PostgreSQL est-il compatible an 2000 ? + + Oui, nous manipulons facilement les dates après et avant l'an 2000. + + 1.12) Comment puis-je rejoindre l'équipe de développement ? + + Tout d'abord, téléchargez les derniers sources et lisez la + documentation pour les développeurs sur notre site web ou bien dans la + distribution. Ensuite, inscrivez-vous aux listes de diffusion + pgsql-hackers et pgsql-patches. Et pour finir, soumettez des + correctifs de grande qualité sur pgsql-patches. + + Environ une douzaine de personnes ont des droits de modification sur + l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de + correctifs de qualité qu'il était devenu impossible aux développeurs + de tenir la cadence et nous avions confiance dans le qualité des + correctifs qu'ils soumettaient. + + 1.13) Comment dois-je soumettre un rapport de bogue ? + + Merci de visiter la page PostgreSQL BugTool sur + http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur + la façon de soumettre un rapport de bogue. + + De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour + voir s'il existe une version PostgreSQL plus récente ou des + correctifs. + + 1.14) Comment PostgreSQL se compare-til à d'autres SGBD ? + + Il y a plusieurs manières de mesurer un logiciel : les + fonctionnalités, les performances, la fiabilité, le support, et le + prix. + + Fonctionnalités + PostgreSQL possède la plupart des fonctionnalités présentes + dans les SGBD commerciaux, comme les transactions, les requêtes + imbriquées, les déclencheurs, les vues, l'intégrité + référentielle par clés étrangères, et le verrouillage + sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas, + comme les types définis par l'utilisateur, l'héritage, les + règles, et le contrôle de concurrence par multi-versionnage + pour réduire les contentions de verrouillage. + + Performances + PostgreSQL a des performances similaires aux autres bases de + données commerciales et open source. Il est plus rapide pour + certaines opérations, plus lent pour d'autres. Par rapport à + MySQL ou d'autres SGBD plus léger, nous sommes plus rapides + pour de nombreux utilisateurs, des requêtes complexes et une + charge pour les requêtes de lecture/écriture. MySQL est plus + rapide pour des requêtes SELECT simples effectuées par quelques + utilisateurs. Bien sûr, MySQL ne possède aucune des + fonctionnalités de la section Fonctionnalités ci-dessus. + PostgreSQL est construit pour la fiabilité et les + fonctionnalités et nous continuons à améliorer les performances + à chaque version. Il y a une page web intéressante qui compare + PostgreSQL à MySQL sur + http://openacs.org/philosophy/why-not-mysql.html. De plus, + MySQL est une société qui distribue son produit via l'open + source et requiert une licence commerciale pour les logiciels + propriétaires, donc pas une communauté de développement open + source comme PostgreSQL. + + Fiabilité + Nous somme conscients qu'un SGBD doit être fiable ou bien il + est inutile. Nous faisons le maximum pour sortir des versions + bien testées, du code stable ne contenant qu'un minimum de + bogues. Chaque version a au moins un mois de tests, et notre + historique de versions montre que nous pouvons fournir des + versions stables et robustes, prêtes pour une utilisation en + environnement de production. Nous pensons que nous nous + comparons favorablement aux autres bases de données dans ce + domaine. + + Support + Nos listes de diffusion offrent un contact avec un large groupe + de développeurs et d'utilisateurs afin d'aider à la résolution + des problèmes rencontrés. Nous ne pouvons garantir un correctif + mais les SGBD commerciaux ne le garantissent pas toujours non + plus. L'accès direct aux développeurs, à la communauté + d'utilisateurs, aux manuels, et au code source, fait du support + pour PostgreSQL un support supérieur aux autres SGBD. Un + support commercial par incident est disponible pour ceux qui en + ont le besoin (voir la section 1.6 de la FAQ). + + Prix + Nous sommes gratuits pour tous les usages, commerciaux et non + commerciaux. Vous pouvez inclure notre code dans vos produits + sans limitation, exceptées celles citées dans notre licence de + type BSD donnée plus haut. + + 1.15) Comment puis-je aider financièrement PostgreSQL ? + + PostgreSQL possède une infrastructure de première classe depuis le + début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette + infrastructure des années durant. + + Une infrastructure de qualité est importante pour un projet + open-source. Cela permet d'empêcher l'éparpillement qui ralentirait + beaucoup l'avancement du projet. + + Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un + certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre + société peut donner de l'argent pour soutenir cet effort, merci de + consulter la page web http://store.pgsql.com/shopping/ et de faire une + donation. + + Bien que la page web mentionne PostgreSQL, Inc, les contributions sont + exclusivement utilisées pour soutenir le projet PostgreSQL et ne + soutiennent aucune société que ce soit. Si vous le préférez, vous + pouvez aussi envoyer un chèque à l'adresse de contact. + _________________________________________________________________ + + De plus, si vous avez une histoire de succès avec PostgreSQL, merci de + la soumettre à notre site d'évangélisation sur + http://advocacy.postgresql.org. + + Questions sur le client utilisateur + + 2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ? + + Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC. + + Vous pouvez télécharger PsqlOBDC depuis + http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. + + OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il + fonctionne avec leur logiciel client ODBC standard, vous aurez donc + PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent + (Win, Mac, Unix, VMS). + + Ils vendront probablement ce produit aux gens qui recherchent une + qualité de support professionnelle mais une version freeware sera + toujours disponible. Merci d'envoyer vos questions à + postgres95@openlink.co.uk. + + 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages + Web ? + + Une bonne introduction aux pages Web adossés à une base de données se + trouve à http://www.webreview.com + + Pour l'intégration Web, PHP est une excellente interface. Elle se + trouve à http://www.php.net. + + Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm + ou mod_perl. + + 2.3) PostgreSQL a-t-il une interface graphique ? + + Oui, il y a plusieurs interfaces graphiques disponibles pour + PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III + (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/ + et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire). + Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une + interface Web pour PostgreSQL. + + Voir http://techdocs.postgresql.org/guides/GUITools pour une liste + plus détaillée. + + 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ? + + La plupart des langages de programmation couramment utilisés ont une + interface pour PostgreSQL. Vérifiez la liste des modules de votre + langage. + + Les interfaces ci-dessous sont incluses dans la distribution : + * C (libpq) + * Embedded C (ecpg) + * Java (jdbc) + * Python (PyGreSQL) + * TCL (libpgtcl) + + Interfaces supplémentaires disponibles sur http://gborg.postgresql.org + dans la section Drivers/Interfaces + _________________________________________________________________ + + Questions Administratives + + 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? + + Il faut spécifier l'option --prefix lors du lancement de configure. + + 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message + core dumped . Pourquoi ? + + Cela peut être dû à une variété de problèmes mais vérifiez d'abord que + vous avez les extensions System V installées pour votre noyau. + PostgreSQL nécessite le support noyau pour la mémoire partagée et les + sémaphores. + + 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. + Pourquoi ? + + Soit vous n'avez pas configuré correctement la mémoire partagée dans + votre noyau, soit vous devez augmenter la mémoire partagée disponible + dans le noyau. Le montant exact dont vous avez besoin dépend de votre + architecture et du nombre de tampons et de processus que vous avez + configuré pour postmaster. Pour la plupart des systèmes avec un nombre + par défaut de tampons et de processus, vous aurez besoin d'un minimum + d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL + pour des informations plus détaillées sur la mémoire partagée et les + sémaphores. + + 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate. + Pourquoi ? + + Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space + left on device) alors votre noyau n'est pas configuré avec + suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par + processus serveur potentiel. Une solution provisoire est de lancer + postmaster avec une plus petite limite sur le nombre de processus + serveur. Utilisez l'option -N avec un paramètre inférieur au choix par + défaut de 32. Une solution permanente est d'augmenter les paramètres + SEMMNS et SEMMNI de votre noyau. + + Des sémaphores inopérantes peuvent aussi provoquer des plantages + pendant de gros accès à la base de données. + + Si le message d'erreur est autre chose, vous n'avez peut-être pas du + tout le support des sémaphores dans votre noyau. Voir le chapitre + Administration du manuel PostgreSQL pour des informations plus + détaillées sur la mémoire partagée et les sémaphores. + + 3.5) Comment contrôler les connexions d'autres machines ? + + Par défaut, PostgreSQL n'autorise que les connexions de la machine + locale utilisant les sockets de domaine Unix. D'autres machines ne + seront pas capables de se connecter sauf si vous configurez + tcpip_sockets dans postgresql.conf et activez l'authentification basée + sur l'hôte en modifiant le fichier $PGDATA/pg_hba.conf en conséquence. + Ceci autorisera les connexions TCP/IP. + + 3.6) Comment régler le moteur de la base de données pour de meilleures + performances ? + + Des index accéléreront les requêtes. La commande EXPLAIN ANALYZE vous + permet de voir comment PostgreSQL traite votre requête et quels index + sont utilisés. + + Si vous faites beaucoup d'insertions (instruction INSERT), envisagez + de les faire en une fois en utilisant la commande COPY. Ceci est plus + rapide que des commandes INSERTS individuelles. Deuxièment, les + requêtes qui ne sont pas dans des blocs de transaction BEGIN + WORK/COMMIT sont considérés comme étant dans leur propre transaction. + Envisagez de faire plusieurs instructions dans un seul bloc de + transaction. Ceci réduira la surcharge apportée par les transactions. + Aussi, envisagez d'abandonner et de recréer des index lors de grosses + modifications de données. + + Il y a plusieurs options d'optimisations. Vous pouvez désactiver + fsync() en lançant postmaster avec l'option -o -F. Ceci empêchera les + fsync()s d'écrire sur disque après toute transaction. + + Vous pouvez utiliser l'option -B de postmaster pour augmenter le + nombre de tampons de mémoire partagée utilisés par les processus + serveurs. Si vous fixez ce paramètre trop haut, postmaster ne se + lancera pas car vous avez dépassé la limite de votre noyau sur la + quantité de mémoire partagée. Chaque tampon fait 8 Ko et le choix par + défaut est de 64 tampons. + + Vous pouvez utiliser l'option serveur -S pour augmenter la quantité + maximale de mémoire utilisée par les processus serveurs pour des tris + temporaires. La valeur de -S est mesuré en kilooctets et le choix par + défaut est de 512 (c'est-à-dire 512 Ko). + + Vous pouvez utiliser la commande CLUSTER pour regrouper vos données en + tables pour correspondre à un index. Voir la page de manual CLUSTER + pour plus de détails. + + 3.7) Quelles fonctionalités de déboguage sont disponibles ? + + PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des + informations de statut qui peuvent être utile pour des intentions de + déboguage. + + D'abord, en lançant configure avec l'option --enable-cassert, beaucoup + d'assert()s surveillent le serveur et arrêtent le programme quand + quelque chose d'inattendu arrive. + + Postmaster et postgres ont tous deux plusieurs options de déboguage de + disponible. D'abord, quand vous lancez postmaster, vérifiez que vous + envoyez les sorties standard et d'erreur dans un fichier de traces + comme : + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & + + Ceci va créer un fichier server.log dans le répertoire racine de + PostgreSQL. Ce fichier contient des informations utiles sur les + problèmes ou erreurs rencontrés par le serveur. Postmaster dispose + d'une option -d qui permet de rapporter des informations encore plus + détaillées d'être rapportées. L'option -d prend un numéro qui spécifie + le niveau de déboguage. Faites attention au fait que des valeurs + élévées de niveau de déboguage génerent des fichiers de traces + volumineux. + + Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de + la ligne de commande et taper votre requête SQL directement. Ceci est + recommandé seulement pour des fonctions de déboguage. Notez qu'un + retour chariot termine la requête, pas un point-virgule. Si vous + compilez avec les symboles de déboguage, vous pouvez utiliser un + débogueur pour voir ce qui se passe. Parce que le serveur n'a pas été + lancé par postmaster, il ne tourne pas dans un environnement identique + et les problèmes d'interaction de verrouillage/serveur ne peuvent être + dupliqués. + + Si postmaster est en train de tourner, lancez psql dans une fenêtre + puis trouvez le PID du processus postgres utilisé par psql. Utilisez + un débogueur pour l'attacher au PID postgres. Vous pouvez mettre un + point d'arrêt dans le débogueur et envoyez des requêtes de psql. Si + vous déboguez le démarrage de postgres, vous pouvez mettre + PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le démarrage de n + secondes pour que vous puissiez attacher un débogueur au processus, + fixer des points d'arrêt et continuer la séquence de démarrage. + + Le programme postgres a les options -s, -A et -t qui peuvent être + utile pour des mesures de déboguage et de performance. + + Vous pouvez compiler avec les options de performance pour voir quelles + fonctions prennent du temps d'exécution. Les fichiers de gestion du + serveur seront déposés dans le répertoire pgsql/data/base/nom_db. Les + fichiers de gestion clients seront mis dans le répertoire actuel du + client. Linux requiert une compilation avec -DLINUX_PROFILE pour une + meilleure gestion. + + 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients + quand je me connecte ? + + Vous pouvez augmenter la limite de postmaster sur le nombre de + processus serveur concurrents qu'il peut lancer. + + La limite par défaut est de 32 processus. Vous pouvez l'augmenter en + relançant postmaster avec une valeur -N appropriée ou en modifiant + postgresql.conf. + + Tenez compte du fait que si vous fixez -N plus grand que 32, vous + devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; -B doit + valoir au moins deux fois -N et probablement plus pour une meilleure + performance. Pour de grand nombres de processus serveurs vous aurez + probablement aussi augmenter plusieurs parametres de configuration du + noyau Unix. Les choses a vérifier incluent la taille maximale des + blocs de mémoire partagée, SHMMAX ; le nombre maximal de sémaphores, + SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre + maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal + de fichiers ouverts, NFILE et NINODE. La raison pour laquelle + PostgreSQL a une limite sur le nombre de processus serveurs autorisés + est pour que votre système ne tombe pas à court de ressources. + + 3.9) Que contient le répertoire pgsql_tmp ? + + Ce répertoire contient des fichiers temporaires générés par le moteur + de requête. Par exemple, si un tri doit être fait pour satisfaire un + ORDER BY et que ce tri requiert plus de place que le paramètre -S du + serveur n'autorise, alors des fichiers temporaires seront créés pour + contenir les données nécessaires. + + Les fichiers temporaires sont d'habitude effacés automatiquement mais + peuvent rester si un serveur s'arrête brutalement pendant un tri. Un + arrêt et un redémarrage de postmaster effacera les fichiers dans ces + répertoires. + + 3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et + de restaurer pour mettre a jour les versions de PostgreSQL ? + + L'équipe PostgreSQL ne fait que des changements mineurs entre des + versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera + pas de sauvegarde et de restauration. Par contre, les sorties majeures + (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des + tables systèmes et des fichiers de données. Ces modifications sont + souvent complexes alors nous ne gardons pas de compatibilité + descendante pour les fichiers de données. Une sauvegarde exportera les + données dans un format générique qui peut ensuite être chargé dans le + nouveau format interne. + + Dans les sorties où le format sur disque ne change pas, le script + pg_upgrade peut être utilisé pour mettre à jour sans + sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade + est disponible pour la sortie. + + 3.11) Quels matériels dois-je utiliser ? + + Comme le matériel PC est compatible en grosse partie, les gens ont + tendance à croire que tous les matériels PC sont de même qualité. Ce + n'est pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité + sont plus fiables et ont de meilleurs performances qu'un matériel + moins coûteux. PostgreSQL fonctionnera sur à peu près tout matériel + mais si la fiabilité et la performance sont importantes pour vous, il + est rusé de bien considérer les options matérielles. Nos listes de + diffusion peuvent être utilisées pour discuter des options matériels. + _________________________________________________________________ + + Questions fonctionnelles + + 4.1) Quelle est la différence entre curseur binaire et curseur normal ? + + Voir la page DECLARE du manuel pour une description. + + 4.2) Comment faire un SELECT seulement sur les premières lignes d'une + requête ? Sur une ligne aléatoire ? + + Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT.... + + Il se peut que l'intégralité de la requête doive être évaluée, même si + vous voulez seulement les premières lignes. Envisagez d'utiliser une + requête avec une clause ORDER BY. S'il existe un index correspondant à + l'ORDER BY, PostgreSQL peut n'évaluer que les premières lignes, sinon + l'intégralité de la requête peut être évaluée, jusqu'à générer les + lignes désirées. + + Pour faire un SELECT sur une ligne aléatoire : + SELECT colonne + FROM table + ORDER BY random() + LIMIT 1; + + 4.3) Comment obtenir une liste des tables ou d'autres objets que je vois + dans psql ? + + Utilisez la commande \dt pour voir les tables dans psql. Pour une + liste complète de commandes à l'intérieur de psql, vous pouvez + utiliser \?. Autrement, vous pouvez lire le code source de psql dans + le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes + SQL qui génèrent le contenu des commandes anti-slash de psql. Vous + pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les + requêtes qu'il utilise pour exécuter les commandes que vous lui + passez. PostgreSQL fournit aussi une interface d'informations sur le + schéma compatible avec SQLi que vous pouvez interroger des + informations sur la base de données. + + 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on + son type de données ? + + La fonction DROP COLUMN a été ajoutée dans la version 7.3 avec ALTER + TABLE DROP COLUMN. Pour les versions précédentes, vous pouvez faire : + BEGIN; + LOCK TABLE ancienne_table; + SELECT ... -- sélectionnez toutes les colonnes sauf celle à supprimer + INTO TABLE nouvelle_table + FROM ancienne_table; + DROP TABLE ancienne_table; + ALTER TABLE nouvelle_table RENAME TO ancienne_table; + COMMIT; + + Pour changer le type de données d'une colonne, faites : + BEGIN; + ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees; + UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_d +e_donnees); + ALTER TABLE table DROP COLUMN ancienne_colonne; + COMMIT; + + Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace + disque utilisé par les lignes expirées. + + 4.5) Quelle est la taille maximale pour une ligne, une table, une base de + données ? + + Les limites sont : + Taille maximum pour une base de données illimitée (il existe des bases +de 32 To) + Taille maximum pour une table 32 To + Taille maximum pour une ligne 1,6 To + Taille maximum pour un champ 1 Go + Nombre maximum de lignes dans une table illimité + Nombre maximum de colonnes dans une table 250-1600, selon le type de colo +nnes + Nombre maximum d'index sur une table illimité + + Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont + limitées par l'espace disque disponible, ainsi que par l'espace de + mémoire et de swap. Les performances peuvent se dégrader si ces + valeurs sont inhabituellement grandes. + + La taille maximum des tables (32 To) ne nécessite pas que le système + d'exploitation supporte les grands fichiers. Les grandes tables sont + stockées sous forme de fichiers multiples de 1 Go, donc les limites de + taille du système de fichier ne sont pas importantes. + + La taille maximum des tables et le nombre maximum de colonnes peuvent + être quadriplés, si la taille des blocs par défaut est augmentée à + 32 Ko. + + 4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier + texte typique ? + + Une base de données PostgreSQL peut utiliser jusqu'à cinq fois + l'espace nécessaire pour stocker les données d'un fichier texte. + + A titre d'exemple, considérez un fichier de 100 000 lignes, comportant + un entier et une chaîne de description sur chaque ligne. Supposons que + la chaîne soit longue en moyenne de 20 octets. Le fichier texte serait + de 2,8 Mo. La taille du fichier d'une base de données PostgreSQL peut + être estimée à 6,4 Mo : + 36 octets: chaque ligne (approximation) + 24 octets: un champ 'entier' et un champ 'texte' + + 4 octets: pointeur vers le tuple sur la page + ---------------------------------------- + 64 octets par ligne + + La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), do +nc : + + 8192 octets par page + ---------------------- = 128 lignes par page de base de données (arrondi à + l'entier inférieur) + 64 octets par ligne + + 100000 lignes de données + ------------------------- = 782 pages de base de données (arrondi à l'enti +er supérieur) + 128 lignes par page + +782 pages de base de données * 8192 octets par page = 6 406 144 octets (6,4 M +o) + + Les index utilisent moins d'espace, mais ils contiennent les données + indexées, ils peuvent donc également être grands. + + Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très + peu d'espace. + + 4.7) Comment puis-je savoir quels index, tables, bases de données et + utilisateurs sont définis ? + + psql dispose de plusieurs commandes commençant par un anti-slash pour + retrouver ces informations. Utilisez \? pour les connaître. Il existe + aussi des tables systèmes, qui commencent par pg_ et qui les décrivent + également. Aussi, psql -l liste toutes les bases de données. + + Essayez également le fichier pgsql/src/tutorial/syscat.source. Il + illustre un grand nombre de commandes SELECT nécessaires pour + récupérer l'information des tables système de la base de données. + + 4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ? + + Les index ne sont pas automatiquement utilisés par chaque requête. Ils + sont utilisés uniquement si la table est plus grande qu'une certaine + taille, et si la requête sélectionne seulement un faible pourcentage + des lignes de la table. Ceci est dû au fait qu'un accès disque + aléatoire causé par un parcours d'index peut être plus lent qu'une + simple lecture de la table, ou parcours séquentiel + + Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin + des statistiques de la table. Ces statistiques sont collectées en + lançant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques, + l'optimiseur sait combien de lignes se trouvent dans la table et peut + mieux déterminer s'il faut utiliser l'index. Les statistiques sont + également utiles pour déterminer l'ordre optimal des opérations de + jointure. La collecte des statistiques devrait être effectuée + régulièrement lorsque le contenu de la table change. + + Les index ne sont normalement pas utilisés pour les clauses ORDER BY + ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite + est habituellement plus rapide qu'un parcours d'index pour une table + importante. Toutefois, LIMIT combiné avec ORDER BY utilisera souvent + un index parce que seulement une petite partie de la table est + renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index, + il est possible de retrouver ces valeurs en utilisant un index avec + ORDER BY et LIMIT : + SELECT colonne + FROM table + ORDER BY colonne [ DESC ] + LIMIT 1; + + Si vous pensez que l'optimiseur choisit par erreur un parcours + sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests + pour voir si le parcours d'index est effectivement plus rapide. + + Lorsque vous utilisez des caractères joker tels que LIKE ou ~, les + index peuvent seulement être utilisés dans certaines circonstances : + * Le début de la chaîne de recherche doit être ancré au départ de la + chaîne, c'est-à-dire + + Les modèles pour LIKE ne doivent pas commencer par %. + + Les modèles d'expression régulière pour ~ doivent commencer + par ^. + * La chaîne de recherche ne peut pas commencer par une classe de + caractères, c'est-à-dire [a-e]. + * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les + index. Utilisez plutôt les index fonctionnels, décrit dans la + section 4.12. + * La locale C par défaut doit être utilisée lors de initdb. + + 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ? + + Voir la page EXPLAIN du manuel. + + 4.10) Qu'est-ce qu'un index R-tree ? + + Un index R-tree est utilisé pour l'indexation des données spatiales. + Un index de hachage ne permet pas les recherches par plage. Un index + B-tree peut seulement faire des recherches sur une dimension. Les + index R-tree peuvent traiter des données multi-dimensionnelles. Par + exemple, si un index R-tree peut être construit sur un attribut de + type point, le système peut plus efficacement gérer les requêtes du + type "Sélection de tous les points d'un rectangle". + + L'article de référence qui décrit le système R-tree original est : + + Guttman, A. "R-trees: A Dynamic Index Structure for Spatial + Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of + Data, 45-57. + + Vous pouvez également trouver ce papier dans le livre de Stonebraker + "Readings in Database Systems". + + Les index R-tree intégrés peuvent prendre en charge les polygônes et + les boîtes. En théorie, les R-trees peuvent être étendus à un plus + grand nombre de dimensions. En pratique, l'extension des R-trees + requiert pas mal de travail et nous n'avons pour le moment aucune + documentation sur la façon de procéder. + + 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ? + + Le module GEQO (acronyme de GEnetic Query Optimizer) accélère + l'optimisation des requêtes lors de jointures de nombreuses tables par + un algorithme génétique (GA). Il permet la gestion des grosses + requêtes de jointures en utilisant une recherche non exhaustive. + + 4.12) Comment puis-je réaliser des recherches sur des expressions + rationnelles ainsi que des recherches non sensibles à la casse ? Comment + puis-je utiliser un index lors de recherches non sensibles à la casse ? + + L'opérateur ~ réalise des recherches d'expressions rationnelles et ~* + le fait sans tenir compte de la casse. La variante de LIKE non + sensible à la casse est ILIKE. + + Des comparaisons d'égalité non sensibles à la casse sont + habituellement exprimées de cette façon : + SELECT * + FROM table + WHERE lower(colonne) = 'abc'; + + Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un + index fonctionnel, celui-ci sera utilisé : + CREATE INDEX tableindex ON table (lower(colonne)); + + 4.13) Comment puis-je détecter si un champ est NULL dans une requête ? + + Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL. + + 4.14) Quelle sont les différences entre les nombreux types de caractères ? + +Type Nom interne Notes +-------------------------------------------------- +VARCHAR(n) varchar n spécifie la taille maximum, sans remplissage +CHAR(n) bpchar des espaces sont ajoutés pour obtenir la + longueur fixe spécifiée +TEXT text pas de limite supérieure pour la taille +BYTEA bytea tableau d'octets (accepte les octets nuls) +"char" char un caractère + + Vous verrez le nom interne en examinant les catalogues système et dans + quelques messages d'erreur. + + Les quatres premiers types du dessus sont des types "varlena" + (c'est-à-dire que les quatre premiers octets correspondent à la + taille, suivi des données). Donc, l'espace réellement utilisé est + légèrement plus grand que la taille déclarée. Néanmoins, ces types de + données sont aussi sujet à la compression ou à un enregistrement en + dehors de la table avec TOAST, donc l'espace occupé sur disque + pourrait aussi être moindre que ce qu'on pourrait attendre. + + VARCHAR(n) est bien mieux pour enregistrer des chaînes de longueurs + variables tout en limitant la taille de cette chaîne. TEXT est utile + pour les chaînes de longueur illimitée, avec malgré tout un maximum de + 1 Go. + + CHAR(n) est intéressant pour stocker des chaînes de taille identique. + CHAR(n) complète avec des espaces pour arriver à la taille spécifiée + alors que VARCHAR(n) n'enregistre que les caractères donnés. BYTEA + sert à stocker des données binaires, particulièrement les données + incluant des octets NULL. Tous les types décrits ici ont des + performances similaires. + + 4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant + automatiquement ? + + PostgreSQL supporte un type de données SERIAL. Il crée automatiquement + une séquence. Par exemple, ceci : + CREATE TABLE personne ( + id SERIAL, + nom TEXT + ); + + est automatiquement traduit en ceci : + CREATE SEQUENCE personne_id_seq; + CREATE TABLE personne ( + id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), + nom TEXT + ); + + Voir la page man de create_sequence pour plus d'informations sur les + séquences. Vous pouvez aussi utiliser le champ OID de chaque ligne + comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder + puis recharger la base de données, vous devrez utiliser l'option -o ou + l'option COPY WITH OIDS de pg_dump pour conserver les OIDs. + + 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une + insertion ? + + Une approche pour récupérer la prochaine valeur SERIAL à partir de + l'objet séquence est d'utiliser la fonction nextval() avant + l'insertion et de l'insérer ensuite explicitement. En utilisant la + table d'exemple de la section 4.15.1, un exemple dans un + pseudo-langage ressemblerait à ceci : + nouvelle_id = execute("SELECT nextval('personne_id_seq')"); + execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal +')"); + + Vous pourriez ensuite utiliser la nouvelle valeur stockée dans + nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé + étrangère de la table personne). Notez que le nom de la SEQUENCE + automatiquement créée sera <table>_<colonneserial>_seq, où table et + colonneserial sont les noms respectifs de votre table et de votre + colonne SERIAL. + + Autrement, vous pouvez récupérer la valeur SERIAL affectée avec la + fonction currval() après qu'elle ait été insérée par défaut, + c'est-à-dire, + execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')"); + nouvelle_id = execute("SELECT currval('personne_id_seq')"); + + Enfin, vous pouvez utiliser l'OID renvoyé par l'instruction INSERT + pour récupérer la valeur par défaut bien que cela soit l'appoche la + moins portable et la valeur de l'OID se réinitialisera aux environs de + quatre milliards. En Perl, avec DBI et le module DBD:Pg d'Edmund + Mergl, l'ancienne valeur est disponible via $sth->{pg_oid_status} + après un $sth->execute(). + + 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes + lorsque plusieurs utilisateurs les lancent en même temps ? + + Non. currval() renvoie la valeur actuelle affectée par votre + processus, et non pas par tous les utilisateurs. + + 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors + d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la + numérotation de ma colonne séquentielle (SERIAL) ? + + Pour améliorer les accès concurrents, les valeurs de séquences sont + données aux transactions qui en ont besoin et ne sont pas bloquées + jusqu'à la fin de la transaction. Ceci crée des trous dans le + numérotage pour les transactions annulées. + + 4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ? + + Les OID sont la réponse de PostgreSQL aux identifiants de lignes + uniques. Chaque ligne créée dans PostgreSQL obtient un OID unique. + Tous les OID générés pendant initdb sont inférieurs à 16384 (voir + include/access/transam.h). Tous les OID créés par un utilisateur sont + supérieurs ou égaux à ceci. Par défaut, tous ces OID sont uniques non + seulement dans une table ou une base mais unique à l'intérieur d'une + installation PostgreSQL entière. + + PostgreSQL utilise les OID dans ses tables système interne pour lier + les lignes entre tables. Ces OID peuvent être utilisés pour identifier + des lignes utilisateurs spécifiques et utilisés dans des jointures. Il + est recommandé que vous utilisiez le type de colonne OID pour stocker + des valeurs OID. Vous pouvez créer un index sur le champ OID pour un + accès plus rapide. + + Les OID sont attribués pour toute ligne d'un endroit central qui est + utilisé par toutes les bases de données. Si vous voulez changer l'OID + en quelque chose d'autre ou si vous voulez faire une copie de la table + avec les OID originaux, il n'y a pas de raisons pour ne pas le faire : + CREATE TABLE nouvelle_table (macolonne int); + SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_t +able; + COPY table_temporaire FROM '/tmp/tablepg'; + COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg'; + DROP TABLE table_temporaire; + + Les OID sont stockés en tant qu'entiers de quatre octets et + déborderont à quatre milliards. Personne n'a jamais rapporté un tel + cas et nous avons prévu de retirer la limite avant que cela ne se + produise. + + Les TIDs sont utilisés pour identifier des lignes physiques + spécifiques avec des valeurs de bloc et décalage. Les TID changent + après que les lignes aient été modifiés ou rechargés. Ils sont + utilisés par des entrées d'index pour pointer vers des lignes + physiques. + + 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ? + + Une partie du code source et de l'ancienne documentation utilisent des + termes dont l'usage est plus commun. Voici quelques exemples : + * table, relation, classe + * ligne (row), enregistrement (record), tuple + * colonne (column), champ (field), attribut + * récupère, sélectionne (select) + * remplace (replace), met à jour (update) + * ajoute (append), insère (insert) + * OID, valeur séquentielle (serial value) + * portal, curseur + * range variable, table name, table alias + + Une liste des termes généraux pour le domaine des bases de données est + disponible sur : + http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary + /glossary.html + + 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ? + + Vous manquez probablement de mémoire virtuelle sur votre système ou + votre noyau a une limite assez basse pour certaines ressources. + Essayez ceci avant de lancer postmaster : + ulimit -d 262144 + limit datasize 256m + + Suivant votre shell, seul un d'eux pourrait réussir mais cela + configurera d'une façon plus importante la taille du segment de + données de votre processus. Cette commande s'applique au processus + actuel et à tous les processus lancé par celui-ci. Si vous avez des + problèmes avec le client SQL parce que le processus serveur renvoie + trop de données, essayez ça avant de lancer le client. + + 4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ? + + A partir de psql, tapez SELECT version(); + + 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des + gros objects ? + + Vous avez besoin de placer BEGIN WORK et COMMIT autour de chaque + utilisateur de gros objets, c'est-à-dire pour entourer lo_open ... + lo_close. + + Actuellement, PostgreSQL force cette règle en fermant les gros objets + lors de la transaction. Donc, le premier essai d'opérations sur ces + objets, fonctionnant habituellement (au moins la plupart du temps) + aura un invalid large obj descriptor. Donc le code, auparavant + fonctionnel (au moins la plupart du temps), génèrera maintenant un + message d'erreur si vous n'utilisez pas de transaction. + + Si vous utilisez une interface client interface comme ODBC, vous aurez + peut-être besoin de lancer auto-commit off. + + 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure + actuelle comme valeur ? + + Utilisez CURRENT_TIMESTAMP: +CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); + + 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ? + + Dans les versions précédant la 7.4, les sous-requêtes ont été jointes + avec des jointures externes en parcourant séquentiellement le résultat + de la sous-requête pour chaque ligne de la requête externe. Si la + sous-requête renvoit quelques lignes et que la requête externe en + renvoit plein, IN sera plus rapide. Pour accélérer les autres + requêtes, remplacez IN avec EXISTS : + SELECT * + FROM table + WHERE colonne IN (SELECT souscolonne FROM soustable); + + to: + SELECT * + FROM table + WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne +); + + Pour que ceci soit rapide, souscolonne doit être une colonne indexée. + + A partir de la version 7.4, IN utilise actuellement les mêmes + techniques sophistiquées de jointures comme des requêtes normales et + est préféré à l'utilisation de EXISTS. + + 4.23) Comment puis-je réaliser une jointure externe ? + + PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL + standard. Voici deux exemples : + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + + or + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); + + Ces requêtes identiques joignent t1.col à t2.col et renvoient toute + colonne non jointe de t1 (celles sans correspondance dans t2). Une + jointure droite (RIGHT join) ajoutera les lignes non jointes de t2. + Une jointure complète (FULL join) renverra les lignes correspondantes + ainsi que les lignes non jointes de t1 et t2. Le mot clé OUTER est + optionnelle et assumé dans le cas de jointure LEFT, RIGHT et FULL. Les + jointures ordinaires sont appelées des jointures INNER. + + Lors des précédentes versions, les jointures externes peuvent être + simulées en utilisant UNION et NOT IN. Par exemple, lors d'une + jointure de tab1 et tab2, la requête suivante réalise une jointure + externe, outer, des deux tables : + SELECT tab1.col1, tab2.col2 + FROM tab1, tab2 + WHERE tab1.col1 = tab2.col1 + UNION ALL + SELECT tab1.col1, NULL + FROM tab1 + WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) + ORDER BY col1 + + 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de + données ? + + Il n'existe pas de moyens de lancer des requêtes sur une autre base + que la courante. Comme PostgreSQL charge des catalogues systèmes + spécifiques à la base de données, sa réaction aux requêtes inter-base + de données est incertaine. + + contrib/dblink permet les requêtes entre bases de données en utilisant + des fonctions. Bien sûr un client peut réaliser des connexions + simultanées à plusieurs bases de données et joindre les résultats du + côté client. + + 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir d'une + fonction? + + A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes + ou colonnes à partir d'une fonction, + http://techdocs.postgresql.org/guides/SetReturningFunctions. + + 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires dans + les fonctions PL/PgSQL de façon stable ? + + PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux + est que si une fonction PL/PgSQL accède à une table temporaire, que + cette table est ensuite supprimée et recréée, et que la fonction est + appelée de nouveau, la fonction échouera car le contenu de la fonction + cachée pointera toujours vers l'ancienne table temporaire. La solution + revient à utiliser EXECUTE pour l'accès aux tables temporaires avec + PL/PgSQL. Ceci obligera l'analyse de la requête à chaque fois. + + 4.27) Quelles options de réplication sont disponibles ? + + Il existe plusieurs solutions de réplication maître/esclave. Elles + permettent uniquement au maître de réaliser des changements sur la + base de données alors que l'esclave peut seulement faire des lectures + de base de données. Le bas de la page + http://gborg.PostgreSQL.org/genpage?replication_research les liste. + Une solution de réplication multi-maître est en cours de développement + sur http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. + + 4.28) Quelles options de cryptage sont disponibles ? + + * contrib/pgcrypto contient de nombreuses fonctions de cryptage, à + utiliser dans des requêtes SQL. + * Pour crypter une transmission entre le client et le serveur, le + serveur doit avoir positionné l'option ssl à true dans + postgresql.conf, et un enregistrement applicable host ou hostssl + doit exister dans pg_hba.conf, et le sslmode du client ne doit pas + être désactivée. Notez qu'il est aussi possible d'utiliser un + transport crypté d'une troisième partie, tel que stunnel ou ssh, + plutôt que les connexions SSL natives de PostgreSQL. + * Les mots de passe des utilisateurs sont automatiquement cryptés + depuis la version 7.3. Pour les versions précédentes, vous devez + activer l'option PASSWORD_ENCRYPTION dans postgresql.conf. + * Le serveur peut fonctionner avec un système de fichiers cryptés. + _________________________________________________________________ + + Etendre PostgreSQL + + 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec psql, + pourquoi cela finit-il avec un dump core ? + + Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction + utilisateur dans un programme de test. + + 5.2) Comment puis-je ajouter de bons nouveaux types ou fonctions à + PostgreSQL ? + + Envoyez vos extensions à la liste de diffusion pgsql-hackers, elles + atterriront éventuellement dans le sous-répertoire contrib/. + + 5.3) Comment faire pour écrire une fonction C qui renvoie un tuple ? + + Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui + renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL. + Voir le Guide du Programmeur pour plus d'information. Un exemple de + fonction renvoyant une table définie en C se trouve à + contrib/tablefunc. + + 5.4) J'ai modifié un fichier source. Pourquoi ma recompilation ne voit-elle + pas les modifications ? + + Les Makefiles n'ont pas les dépendances adéquates pour les fichiers + d'en-tête. Il vous faut faire make clean puis un autre make. Si vous + utilisez GCC, vous pouvez utiliser l'option --enable-depend de + configure pour que le compilateur calcule les dépendances + automatiquement. diff --git a/doc/src/FAQ/FAQ_french.html b/doc/src/FAQ/FAQ_french.html new file mode 100644 index 0000000000000000000000000000000000000000..f3b9722cebfa0a661a74319e6ced844e44159540 --- /dev/null +++ b/doc/src/FAQ/FAQ_french.html @@ -0,0 +1,1498 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <META name="generator" content="HTML Tidy, see www.w3.org"> + <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <TITLE>PostgreSQL FAQ</TITLE> + </HEAD> + + <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" + alink="#0000ff"> + <H1>Foire Aux Questions (FAQ) pour PostgreSQL</H1> + + <P>Dernière mise à jour : vendredi 11 juillet 2004 23:58:24</P> + + <P>Mainteneur actuel : Bruce Momjian (<A href= + "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> + </P> + + <P>La plus récente version de ce document est disponible sur <A + href= + "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P> + + <P>Les questions spécifiques à la plateforme sont répondues sur <A href= + "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> + <HR> + + <H2 align="center">Questions générales</H2> + <A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment le prononcer ?<BR> + <A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL ?<BR> + <A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?<BR> + <A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?<BR> + <A href="#1.5">1.5</A>) Où puis-je me procurer PostgreSQL ?<BR> + <A href="#1.6">1.6</A>) Où puis-je obtenir du support ?<BR> + <A href="#1.7">1.7</A>) Quelle est la dernière version ?<BR> + <A href="#1.8">1.8</A>) Quelle documentation est disponible ?<BR> + <A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?<BR> + <A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?<BR> + <A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?<BR> + <A href="#1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement ?<BR> + <A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de + bogue ?<BR> + <A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il à d'autres + <SMALL>SGBD</SMALL> ?<BR> + <A href="#1.15">1.15</A>) Comment puis-je aider financièrement PostgreSQL ?<BR> + + + <H2 align="center">Questions sur le client utilisateur</H2> + <A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour + PostgreSQL ?<BR> + <A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser + PostgreSQL avec des pages Web ?<BR> + <A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?<BR> + <A href="#2.4">2.4</A>) Quels langages sont disponibles pour + communiquer avec PostgreSQL ?<BR> + + + <H2 align="center">Questions administratives</H2> + <A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?<BR> + <A href="#3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <I>core dumped</I>. Pourquoi ?<BR> + <A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?<BR> + <A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?<BR> + <A href="#3.5">3.5</A>) Comment contrôler les connexions d'autres machines ?<BR> + <A href="#3.6">3.6</A>) Comment règler le moteur de la base de données pour de meilleures performances ?<BR> + <A href="#3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles ?<BR> + <A href="#3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?<BR> + <A href="#3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I> ?<BR> + <A href="#3.10">3.10</A>) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL ?<BR> + <A href="#3.11">3.11</A>) Quels matériels dois-je utiliser ?<BR> + + + <H2 align="center">Questions fonctionnelles</H2> + <A href="#4.1">4.1</A>) Quelle est la différence entre curseur binaire + et curseur normal ?<BR> + <A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement + sur les premières lignes d'une requête ? Sur une ligne aléatoire ?<BR> + <A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou + d'autres choses que je vois dans <I>psql</I> ?<BR> + <A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, + ou comment change-t-on son type de données ?<BR> + <A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne, + une table et une base de données ?<BR> + <A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker + les données d'un fichier texte typique ?<BR> + <A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables, + bases de données et utilisateurs sont définis ?<BR> + <A href="#4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage + des index. Pourquoi ?<BR> + <A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue + mes requêtes ?<BR> + <A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?<BR> + <A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de + requêtes ?<BR> + <A href="#4.12">4.12</A>) Comment puis-je réaliser des recherches par des + expressions rationnelles ainsi que des recherches non sensibles à la + casse ? Comment puis-je utiliser un index lors de recherches non + sensibles à la casse ?<BR> + <A href="#4.13">4.13</A>) Comment puis-je détecter si un champ est + <SMALL>NULL</SMALL> dans une requête ?<BR> + <A href="#4.14">4.14</A>) Quelle sont les différences entre les nombreux + types de caractères ?<BR> + <A href="#4.15.1">4.15.1</A>) Comment puis-je créer un champ série, + c'est-à-dire s'incrémentant automatiquement ?<BR> + <A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un + <SMALL>SERIAL</SMALL> suite à une insertion ?<BR> + <A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et + <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs + les lancent en même temps ?<BR> + <A href="#4.15.4">4.15.4</A>) Pourquoi mes numéros de séquences ne sont pas + ré-utilisés lors d'une annulation de transaction ? Pourquoi + existe-t'il des trous dans la numérotation de ma colonne séquentielle + (SERIAL) ?<BR> + <A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL> ?<BR> + <A href="#4.17">4.17</A>) A quoi correspond certains termes utilisés avec + PostgreSQL ?<BR> + <A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: + Memory exhausted in AllocSetAlloc()</I> ?<BR> + <A href="#4.19">4.19</A>) Comment puis-je connaître la version de + PostgreSQL que j'utilise ?<BR> + <A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj + descriptor</I> lors d'opérations avec des gros objets ?<BR> + <A href="#4.21">4.21</A>) Comment puis-je créer une colonne qui aura par + défaut l'heure actuelle comme valeur ?<BR> + <A href="#4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant + <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR> + <A href="#4.23">4.23</A>) Comment puis-je réaliser une jointure + externe ?<BR> + <A href="#4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant + plusieurs bases de données ??<BR> + <A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou + colonnes à partir d'une fonction ?<BR> + <A href="#4.26">4.26</A>) Why can't I reliably create/drop + temporary tables in PL/PgSQL functions?<BR> + <A href="#4.27">4.27</A>) Quelles options de replication sont + disponibles ?<BR> + <A href="#4.28">4.28</A>) Quelles options de cryptage sont + disponibles ?<BR> + + <H2 align="center">Etendre PostgreSQL</H2> + <A href="#5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec + <I>psql</I>, pourquoi cela finit-il avec un "dump core" ?<BR> + <A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions + pour PostgreSQL ?<BR> + <A href="#5.3">5.3</A>) Comment puis-je écrire une fonction C pour récupérer une + ligne ?<BR> + <A href="#5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi la modification + n'est-elle pas visible après la recompilation ?<BR> + + <HR> + + <H2 align="center">Questions générales</H2> + + <H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment + le prononcer ?</H4> + + <P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est + disponible sur <A + HREF="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A> + pour ceux souhaitant entendre la prononciation.</P> + + <P>PostgreSQL est une amélioration du système de gestion de bases + de données POSTGRES (et est toujours quelque fois appelé "Postgres"), + un prototype de recherche de + <SMALL>SGBD</SMALL> de prochaine génération. PostgreSQL garde le + puissant modèle de données et les types de données riches de + POSTGRES, mais remplace le langage de requêtes PostQuel par un + sous-ensemble étendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit + et les sources complets sont disponibles.</P> + + <P> PostgreSQL est écrit par une équipe de développeurs qui sont + tous inscrits à la liste de diffusion de développement de + PostgreSQL. Le coordinateur actuel est Marc G. Fournier (<A href= + "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> et voir + la section <a href="#1.6">1.6</a> pour contacter les + développeurs). Cette équipe est responsable de tout le + développement de PostgreSQL. C'est un projet soutenu par une + communauté sans être contrôlé par une société. Pour y contribuer, + voir la FAQ des développeurs sur <A + HREF="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P> + + <P>Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen. + Beaucoup d'autres personnes ont contribué au portage, aux tests, + au déboguage et à l'amélioration du code. Le code de Postgres + original, duquel PostgreSQL est dérivé, était le fruit de + l'effort de nombreux étudiants diplômés et non diplômés, et de + programmeurs travaillant sous la direction du Professeur Michael + Stonebraker à l'université de Californie, Berkeley.</P> + + <P>Le nom original du logiciel à Berkeley était Postgres. Quand le + <SMALL>SQL</SMALL> fut ajouté en 1995, le nom a dû être changé en + Postgres95. Fin 1996, le nom fut changé en PostgreSQL.</P> + + <H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL ?</H4> + + <P>PostgreSQL est distribué sous la licence suivante :</P> + + <P>PostgreSQL Data Base Management System</P> + + <P>Portions copyright (c) 1996-2004, PostgreSQL Global Development + Group Portions Copyright (c) 1994-6 Regents of the University of + California</P> + + <P>Permission to use, copy, modify, and distribute this software + and its documentation for any purpose, without fee, and without a + written agreement is hereby granted, provided that the above + copyright notice and this paragraph and the following two + paragraphs appear in all copies.</P> + + <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P> + + <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE + UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, + SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P> + + <P>La licence ci-dessus est la licence BSD, une licence open-source + classique.</P> + + <H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?</H4> + + <P>En général, tout environnement compatible Unix moderne devrait + pouvoir faire fonctionner PostgreSQL. Les environnements qui ont été + testés explicitement sont listés dans les instructions + d'installation.</P> + + <H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?</H4> + + <P><STRONG>Client</STRONG></P> + + <P>Il est possible de compiler la bibliothèque C <I>libpq</I>, + psql et d'autres interfaces et applications clientes pour + qu'elles tournent sous des environnements MS Windows. Dans ce cas, + le client tourne sous MS Windows et communique par TCP/IP avec un + serveur tournant sous un environnement Unix supporté. Un fichier + <I>win32.mak</I> est inclus dans la distribution pour construire + une bibliothèque <I>libpq</I> <I>psql</I> Win32. PostgreSQL + communique aussi avec des clients <SMALL>ODBC</SMALL>.</P> + + <P><STRONG>Serveur</STRONG></P> + + <P>Le serveur de base de données peut tourner sous Windows NT et + Windows 2000 en utilisant Cygwin, la bibliothèque de portage + Unix/NT de Cygnus. Voir + <I>pgsql/doc/FAQ_MSWIN</I> dans la distribution ou la FAQ MS + Windows sur <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN"> + http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P> + + <p>Un port natif sur MS Windows NT/2000/XP est en court. Pour plus de + détails sur le statut actuel de PostgreSQL sur Windows, voir + <a href="http://techdocs.postgresql.org/guides/Windows"> + http://techdocs.postgresql.org/guides/Windows</a> et + <a href="http://momjian.postgresql.org/main/writings/pgsql/win32.html"> + http://momjian.postgresql.org/main/writings/pgsql/win32.html</a>.</p> + + <p>Il existe aussi un port sur Novell Netware sur + <a href="http://forge.novell.com">http://forge.novell.com</a>.</p> + + <H4><A name="1.5">1.5</A>) Où puis-je me procurer PostgreSQL ?</H4> + + <P>Le site FTP anonyme principal de PostgreSQL est <A href= + "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. + Pour les sites miroirs, voir notre site web principal.</P> + + <H4><A name="1.6">1.6</A>) Où puis-je obtenir du support ?</H4> + + <P>La liste de diffusion principale est <A href= + "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>. + Elle est disponible pour discuter de sujets en rapport avec + PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec + les lignes suivantes dans le corps du message (pas dans la ligne + du sujet) :</P> +<PRE> + subscribe + end +</PRE> + + <P>à <A href= + "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P> + + <P>Il existe aussi un recueil de la liste. Pour s'y inscrire, + envoyez un courriel à <A href= + "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> + avec dans le corps :</P> +<PRE> + subscribe + end +</PRE> + + Les recueils sont envoyés aux membres de cette liste dès que la + liste principale a reçu 30 Ko de messages. + + <P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire, + envoyer un courriel à <A href= + "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> + avec dans le corps :</P> +<PRE> + subscribe + end +</PRE> + + Une liste de diffusion pour les développeurs est aussi disponible. Pour s'y + inscrire, envoyez un courriel à <A href= + "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> + avec dans le corps : +<PRE> + subscribe + end +</PRE> + + <P>Vous pouvez trouver d'autres listes et informations sur + PostgreSQL sur le site web de PostgreSQL :</P> + + <BLOCKQUOTE> + <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> + </BLOCKQUOTE> + + <P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal + <I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix + <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou + <CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P> + + <P>Une liste de sociétés pouvant fournir un support commercial + est disponible sur <A href= + "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> + + <H4><A name="1.7">1.7</A>) Quelle est la dernière version ?</H4> + + <P>La dernière version de PostgreSQL est la version 7.4.3.</P> + + <P>Nous projetons de sortir une version majeure tous les six à huit + mois.</P> + + <H4><A name="1.8">1.8</A>) Quelle documentation est disponible ?</H4> + + <P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de + test sont inclus dans la distribution. Voir le répertoire + <I>/doc</I>. Vous pouvez aussi accéder aux manuels en ligne sur <A href= + "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> + + <P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href= + "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> + et <A href= + "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. + Il y a une liste de livres sur PostgreSQL pouvant être achetés sur <A + href= + "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. + Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A + href= + "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P> + + <P><I>psql</I> possède des commandes \d pratiques montrant des + informations sur les types, opérateurs, fonctions, aggrégats, etc.</P> + + <P>Notre site web contient encore plus de documentations.</P> + + <H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?</H4> + + <P>PostgreSQL supporte un sous-ensemble étendu de <SMALL>SQL</SMALL>-92. + Voir notre liste <A href="http://developer.PostgreSQL.org/todo.php">TODO</A> + pour les bogues connus, les fonctionnalités manquantes et les + plans pour le futur.</P> + + <H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?</H4> + + <P>Le livre PostgreSQL sur <A href= + "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> + enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A + href= + "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A> + Il existe de bons tutoriels sur <A href= + "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> + <A href= + "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A> + et <A href= + "http://sqlcourse.com/">http://sqlcourse.com.</A></P> + + <P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition" + se trouve sur <A href= + "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> + + <P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>, + Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The + Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> + + <H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?</H4> + + <P>Oui, nous manipulons facilement les dates après et avant l'an 2000.</P> + + <H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement ?</H4> + + <P>Tout d'abord, téléchargez les derniers sources et lisez la + documentation pour les développeurs sur notre site web ou bien + dans la distribution. Ensuite, inscrivez-vous aux listes de + diffusion <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir, + soumettez des correctifs de grande qualité sur <i>pgsql-patches</i>.</P> + + <P>Environ une douzaine de personnes ont des droits de modification + sur l'archive <SMALL>CVS</SMALL> de PostgreSQL. Ils ont chacun + soumis tellement de correctifs de qualité qu'il était devenu + impossible aux développeurs de tenir la cadence et nous avions + confiance dans le qualité des correctifs qu'ils soumettaient.</P> + + <H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de + bogue ?</H4> + + <P>Merci de visiter la page PostgreSQL BugTool sur <A href= + "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>, + qui donne des indications sur la façon de soumettre un rapport de bogue.</P> + + <P>De même, vérifiez notre site ftp <A href= + "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour + voir s'il existe une version PostgreSQL plus récente ou des + correctifs.</P> + + <H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til à + d'autres <SMALL>SGBD</SMALL> ?</H4> + + <P>Il y a plusieurs manières de mesurer un logiciel : les fonctionnalités, + les performances, la fiabilité, le support, et le prix.</P> + + <DL> + <DT><B>Fonctionnalités</B></DT> + + <DD>PostgreSQL possède la plupart des fonctionnalités présentes + dans les <SMALL>SGBD</SMALL> commerciaux, comme les + transactions, les requêtes imbriquées, les déclencheurs, + les vues, l'intégrité référentielle par clés étrangères, et le + verrouillage sophistiqué. Nous avons des fonctionnalités qu'ils + n'ont pas, comme les types définis par l'utilisateur, + l'héritage, les règles, et le contrôle de concurrence par + multi-versionnage pour réduire les contentions de verrouillage.<BR> + <BR> + </DD> + + <DT><B>Performances</B></DT> + + <DD>PostgreSQL a des performances similaires aux autres bases de + données commerciales et open source. Il est plus rapide pour + certaines opérations, plus lent pour d'autres. Par rapport à + MySQL ou d'autres <SMALL>SGBD</small> plus léger, nous sommes + plus rapides pour de nombreux utilisateurs, des requêtes complexes et + une charge pour les requêtes de lecture/écriture. MySQL est plus rapide + pour des requêtes SELECT simples effectuées par quelques utilisateurs. + Bien sûr, MySQL ne possède aucune des fonctionnalités de la section + <I>Fonctionnalités</I> ci-dessus. PostgreSQL est construit pour la + fiabilité et les fonctionnalités et nous continuons à améliorer les + performances à chaque version. Il y a une page web intéressante + qui compare PostgreSQL à MySQL sur <A + href="http://openacs.org/philosophy/why-not-mysql.html"> + http://openacs.org/philosophy/why-not-mysql.html</A>. De plus, MySQL + est une société qui distribue son produit via l'open source et requiert + une licence commerciale pour les logiciels propriétaires, donc pas une + communauté de développement open source comme PostgreSQL.<BR> + + <BR> + </DD> + + <DT><B>Fiabilité</B></DT> + + <DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit être + fiable ou bien il est inutile. Nous faisons le maximum pour + sortir des versions bien testées, du code stable ne contenant qu'un + minimum de bogues. Chaque version a au moins un mois de tests, + et notre historique de versions montre que nous pouvons + fournir des versions stables et robustes, prêtes pour une + utilisation en environnement de production. Nous pensons que + nous nous comparons favorablement aux autres bases de données + dans ce domaine.<BR> + <BR> + </DD> + + <DT><B>Support</B></DT> + + <DD>Nos listes de diffusion offrent un contact avec un large + groupe de développeurs et d'utilisateurs afin d'aider à la + résolution des problèmes rencontrés. Nous ne pouvons garantir + un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le + garantissent pas toujours non plus. L'accès direct aux + développeurs, à la communauté d'utilisateurs, aux manuels, et + au code source, fait du support pour PostgreSQL un support + supérieur aux autres <SMALL>SGBD</SMALL>. Un support commercial par + incident est disponible pour ceux qui en ont le besoin (voir + la <A + href="#1.6">section 1.6 de la FAQ</A>).<BR> + <BR> + </DD> + + <DT><B>Prix</B></DT> + + <DD>Nous sommes gratuits pour tous les usages, commerciaux et + non commerciaux. Vous pouvez inclure notre code dans vos + produits sans limitation, exceptées celles citées dans notre + licence de type BSD donnée plus haut.<BR> + <BR> + </DD> + </DL> + + <H4><A name="1.15">1.15</A>) Comment puis-je aider financièrement + PostgreSQL ?</H4> + + <P>PostgreSQL possède une infrastructure de première classe depuis + le début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré + cette infrastructure des années durant.</P> + + <P>Une infrastructure de qualité est importante pour un projet + open-source. Cela permet d'empêcher l'éparpillement qui ralentirait + beaucoup l'avancement du projet.</P> + + <P>Bien sûr, cette infrastructure n'est pas donnée. Elle requiert + un certain nombre de dépenses mensuelles ou ponctuelles. Si vous + ou votre société peut donner de l'argent pour soutenir cet effort, + merci de consulter la page web <A + href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> + et de faire une donation.</P> + + <P>Bien que la page web mentionne PostgreSQL, Inc, les + contributions sont exclusivement utilisées pour soutenir le + projet PostgreSQL et ne soutiennent aucune société que ce soit. Si + vous le préférez, vous pouvez aussi envoyer un chèque à l'adresse + de contact.</P> + <HR> + + <P>De plus, si vous avez une histoire de succès avec PostgreSQL, + merci de la soumettre à notre site d'évangélisation sur <a + href="http://advocacy.postgresql.org"> + http://advocacy.postgresql.org</a>.</P> + + + + <H2 align="center">Questions sur le client utilisateur</H2> + + <H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour + PostgreSQL ?</H4> + + <P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC + et OpenLink <SMALL>ODBC</SMALL>.</P> + + <P>Vous pouvez télécharger PsqlOBDC depuis <A href= + "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> + http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P> + + <P>OpenLink <SMALL>ODBC</SMALL> peut être obtenu depuis <A href= + "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne + avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez + donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes + client qu'ils supportent (Win, Mac, Unix, VMS).</P> + + <P>Ils vendront probablement ce produit aux gens qui recherchent + une qualité de support professionnelle mais une version freeware sera + toujours disponible. Merci d'envoyer vos questions à <A href= + "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> + + <H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser + PostgreSQL avec des pages Web ?</H4> + + <P>Une bonne introduction aux pages Web adossés à une base de données se + trouve à <A href="http://www.webreview.com">http://www.webreview.com</A></P> + + <P>Pour l'intégration Web, PHP est une excellente interface. Elle se trouve à <A + href="http://www.php.net">http://www.php.net</A>.</P> + + <P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P> + + <H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?</H4> + + <P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL, + dont PgAccess <a href="http://www.pgaccess.org"> + http://www.pgaccess.org</a>), PgAdmin III (<a + href="http://www.pgadmin.org">http://www.pgadmin.org</a>), + RHDB Admin (<a + href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/ + </a> et Rekall (<a href="http://www.thekompany.com/products/rekall/"> + http://www.thekompany.com/products/rekall/</a>, propriétaire). Il y a + aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> + http://phppgadmin.sourceforge.net/ </a>), une interface Web pour + PostgreSQL.</P> + + <P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus détaillée.</P> + + <H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour + communiquer avec PostgreSQL ?</H4> + + <P>La plupart des langages de programmation couramment utilisés ont + une interface pour PostgreSQL. Vérifiez la liste des modules de votre + langage.</P> + + <P>Les interfaces ci-dessous sont incluses dans la distribution :</P> + + <UL> + <LI>C (libpq)</LI> + + <LI>Embedded C (ecpg)</LI> + + <LI>Java (jdbc)</LI> + + <LI>Python (PyGreSQL)</LI> + + <LI>TCL (libpgtcl)</LI> + + </UL> + <P>Interfaces supplémentaires disponibles sur + <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> + dans la section <I>Drivers/Interfaces</I> + </P> + <HR> + + <H2 align="center">Questions Administratives</H2> + + <H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?</H4> + + <P>Il faut spécifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P> + + <H4><A name="3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <i>core dumped</i> . Pourquoi ?</H4> + + <P>Cela peut être dû à une variété de problèmes mais vérifiez d'abord que + vous avez les extensions System V installées pour votre noyau. PostgreSQL + nécessite le support noyau pour la mémoire partagée et les sémaphores.</P> + + <H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?</H4> + + <P>Soit vous n'avez pas configuré correctement la mémoire partagée dans + votre noyau, soit vous devez augmenter la mémoire partagée disponible dans + le noyau. Le montant exact dont vous avez besoin dépend de votre + architecture et du nombre de tampons et de processus que vous avez + configuré pour <I>postmaster</I>. Pour la plupart des systèmes avec un + nombre par défaut de tampons et de processus, vous aurez besoin d'un minimum + d'environ 1 Mo. Voir le chapitre <A href= + "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration + du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P> + + <H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?</H4> + + <P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No + space left on device)</I> alors votre noyau n'est pas configuré avec + suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par processus + serveur potentiel. Une solution provisoire est de lancer <I>postmaster</I> + avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option + <I>-N</I> avec un paramètre inférieur au choix par défaut de 32. Une + solution permanente est d'augmenter les paramètres + <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P> + + <P>Des sémaphores inopérantes peuvent aussi provoquer des plantages pendant de gros accès à la base de données.</P> + + <P>Si le message d'erreur est autre chose, vous n'avez peut-être pas du tout le support des + sémaphores dans votre noyau. Voir le + chapitre <A href= + "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration + du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P> + + <H4><A name="3.5">3.5</A>) Comment contrôler les connexions d'autres machines ?</H4> + + <P>Par défaut, PostgreSQL n'autorise que les connexions de la machine locale + utilisant les sockets de domaine Unix. D'autres machines ne seront pas + capables de se connecter sauf si vous configurez tcpip_sockets dans <I>postgresql.conf</I> + <B>et</B> activez l'authentification basée sur l'hôte en modifiant le fichier + <I>$PGDATA/pg_hba.conf</I> en conséquence. Ceci autorisera les connexions TCP/IP.</P> + + <H4><A name="3.6">3.6</A>) Comment régler le moteur de la base de données pour de meilleures performances ?</H4> + + <P>Des index accéléreront les requêtes. La commande + <SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite + votre requête et quels index sont utilisés.</P> + + <P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>), + envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci + est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxièment, + les requêtes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL> + sont considérés comme étant dans leur propre transaction. Envisagez de faire + plusieurs instructions dans un seul bloc de transaction. Ceci réduira la + surcharge apportée par les transactions. Aussi, envisagez d'abandonner et + de recréer des index lors de grosses modifications de données.</P> + + <P>Il y a plusieurs options d'optimisations. Vous pouvez désactiver + <I>fsync()</I> en lançant <I>postmaster</I> avec l'option <I>-o -F</I>. + Ceci empêchera les <I>fsync()</I>s d'écrire sur disque après toute + transaction.</P> + + <P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour + augmenter le nombre de tampons de mémoire partagée utilisés par les + processus serveurs. Si vous fixez ce paramètre trop haut, + <I>postmaster</I> ne se lancera pas car vous avez dépassé la limite de + votre noyau sur la quantité de mémoire partagée. Chaque tampon fait 8 Ko et + le choix par défaut est de 64 tampons.</P> + + <P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la + quantité maximale de mémoire utilisée par les processus serveurs pour des + tris temporaires. La valeur de <I>-S</I> est mesuré en kilooctets et le + choix par défaut est de 512 (c'est-à-dire 512 Ko).</P> + + <P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper + vos données en tables pour correspondre à un index. Voir la page de manual + <SMALL>CLUSTER</SMALL> pour plus de détails.</P> + + <H4><A name="3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles ?</H4> + + <P>PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des + informations de statut qui peuvent être utile pour des intentions de + déboguage.</P> + + <P>D'abord, en lançant <I>configure</I> avec l'option --enable-cassert, + beaucoup d'<I>assert()</I>s surveillent le serveur et arrêtent le programme + quand quelque chose d'inattendu arrive.</P> + + <P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de + déboguage de disponible. D'abord, quand vous lancez <I>postmaster</I>, + vérifiez que vous envoyez les sorties standard et d'erreur dans un fichier + de traces comme :</P> +<PRE> + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & +</PRE> + + <P>Ceci va créer un fichier server.log dans le répertoire racine de + PostgreSQL. Ce fichier contient des informations utiles sur les problèmes + ou erreurs rencontrés par le serveur. <I>Postmaster</I> dispose d'une + option <I>-d</I> qui permet de rapporter des informations encore plus + détaillées d'être rapportées. L'option <I>-d</I> prend un numéro qui + spécifie le niveau de déboguage. Faites attention au fait que des valeurs + élévées de niveau de déboguage génerent des fichiers de traces volumineux.</P> + + <P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur + <I>postgres</I> de la ligne de commande et taper votre requête + <SMALL>SQL</SMALL> directement. Ceci est recommandé <B>seulement</B> pour + des fonctions de déboguage. Notez qu'un retour chariot termine la requête, + pas un point-virgule. Si vous compilez avec les symboles de déboguage, vous + pouvez utiliser un débogueur pour voir ce qui se passe. Parce que le serveur + n'a pas été lancé par <I>postmaster</I>, il ne tourne pas dans un environnement + identique et les problèmes d'interaction de verrouillage/serveur ne peuvent + être dupliqués.</P> + + <P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans + une fenêtre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I> + utilisé par <I>psql</I>. Utilisez un débogueur pour l'attacher au + <SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arrêt + dans le débogueur et envoyez des requêtes de <I>psql</I>. Si vous déboguez + le démarrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis + lancez <I>psql</I>. Ceci va retarder le démarrage de <I>n</I> secondes + pour que vous puissiez attacher un débogueur au processus, fixer des points + d'arrêt et continuer la séquence de démarrage.</P> + + <P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I> + qui peuvent être utile pour des mesures de déboguage et de performance.</P> + + <P>Vous pouvez compiler avec les options de performance pour voir quelles + fonctions prennent du temps d'exécution. Les fichiers de gestion du serveur + seront déposés dans le répertoire <I>pgsql/data/base/nom_db</I>. Les + fichiers de gestion clients seront mis dans le répertoire actuel du client. + Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une + meilleure gestion.</P> + + <H4><A name="3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?</H4> + + <P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de + processus serveur concurrents qu'il peut lancer.</P> + + <P>La limite par défaut est de 32 processus. Vous pouvez l'augmenter en + relançant <I>postmaster</I> avec une valeur <I>-N</I> appropriée ou + en modifiant <I>postgresql.conf</I>.</P> + + <P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous + devez aussi augmenter <I>-B</I> au-dela de sa valeur par défaut 64 ; + <I>-B</I> doit valoir au moins deux fois <I>-N</I> et probablement plus pour + une meilleure performance. Pour de grand nombres de processus serveurs vous + aurez probablement aussi augmenter plusieurs parametres de configuration du + noyau Unix. Les choses a vérifier incluent la taille maximale des blocs de + mémoire partagée, <SMALL>SHMMAX</SMALL> ; le nombre maximal de + sémaphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> ; le + nombre maximal de processus, <SMALL>NPROC</SMALL> ; le nombre maximal + de processus par utilisateur, <SMALL>MAXUPRC</SMALL> ; et le nombre + maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>. + La raison pour laquelle PostgreSQL a une limite sur le nombre de processus + serveurs autorisés est pour que votre système ne tombe pas à court de + ressources.</P> + + <H4><A name="3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I> ?</H4> + + <P>Ce répertoire contient des fichiers temporaires générés par le moteur de + requête. Par exemple, si un tri doit être fait pour satisfaire un + <SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le paramètre + <I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront créés + pour contenir les données nécessaires.</P> + + <P>Les fichiers temporaires sont d'habitude effacés automatiquement mais + peuvent rester si un serveur s'arrête brutalement pendant un tri. Un arrêt + et un redémarrage de <I>postmaster</I> effacera les fichiers dans ces + répertoires.</P> + + <H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une + sauvegarde des bases et de restaurer pour mettre a jour les versions de + PostgreSQL ?</H4> + + <P>L'équipe PostgreSQL ne fait que des changements mineurs entre des + versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera pas + de sauvegarde et de restauration. Par contre, les sorties majeures + (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des tables + systèmes et des fichiers de données. Ces modifications sont souvent + complexes alors nous ne gardons pas de compatibilité descendante pour les + fichiers de données. Une sauvegarde exportera les données dans un format + générique qui peut ensuite être chargé dans le nouveau format interne.</P> + + <P>Dans les sorties où le format sur disque ne change pas, le script + <I>pg_upgrade</I> peut être utilisé pour mettre à jour sans + sauvegarde/restauration. Les notes de sorties précisent si <I>pg_upgrade</I> + est disponible pour la sortie.</P> + + <H4><A name="3.11">3.11</A>) Quels matériels dois-je utiliser ?</H4> + + <P>Comme le matériel PC est compatible en grosse partie, les gens ont + tendance à croire que tous les matériels PC sont de même qualité. Ce n'est + pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité sont plus + fiables et ont de meilleurs performances qu'un matériel moins coûteux. + PostgreSQL fonctionnera sur à peu près tout matériel mais si la fiabilité et + la performance sont importantes pour vous, il est rusé de bien considérer + les options matérielles. Nos listes de diffusion peuvent être utilisées pour + discuter des options matériels.</P> + + <HR> + + <H2 align="center">Questions fonctionnelles</H2> + + <H4><A name="4.1">4.1</A>) Quelle est la différence entre curseur binaire + et curseur normal ?</H4> + + <P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P> + + <H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement + sur les premières lignes d'une requête ? Sur une ligne aléatoire ?</H4> + + <P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser + <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P> + + <P>Il se peut que l'intégralité de la requête doive être évaluée, + même si vous voulez seulement les premières lignes. Envisagez + d'utiliser une requête avec une clause <SMALL>ORDER + BY</SMALL>. S'il existe un index correspondant à l'<SMALL>ORDER + BY</SMALL>, PostgreSQL peut n'évaluer que les premières lignes, sinon + l'intégralité de la requête peut être évaluée, jusqu'à générer les lignes + désirées.</P> + + <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne aléatoire : +<PRE> + SELECT colonne + FROM table + ORDER BY random() + LIMIT 1; +</PRE> + + <H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou + d'autres objets que je vois dans <I>psql</I> ?</H4> + + <P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour + une liste complète de commandes à l'intérieur de psql, vous pouvez utiliser + \?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier + <I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes + <SMALL>SQL</SMALL> qui génèrent le contenu des commandes anti-slash de + psql. Vous pouvez aussi lancer <I>psql</I> avec l'option + <I>-E</I>, afin qu'il imprime les requêtes qu'il utilise pour exécuter + les commandes que vous lui passez. PostgreSQL fournit aussi une interface + d'informations sur le schéma compatible avec <I>SQLi</I> que vous pouvez + interroger des informations sur la base de données.</P> + + <H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, + ou comment change-t-on son type de données ?</H4> + + <P>La fonction <SMALL>DROP COLUMN</SMALL> a été ajoutée dans la version 7.3 + avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions précédentes, + vous pouvez faire :</P> +<PRE> + BEGIN; + LOCK TABLE ancienne_table; + SELECT ... -- sélectionnez toutes les colonnes sauf celle à supprimer + INTO TABLE nouvelle_table + FROM ancienne_table; + DROP TABLE ancienne_table; + ALTER TABLE nouvelle_table RENAME TO ancienne_table; + COMMIT; +</PRE> + + <P>Pour changer le type de données d'une colonne, faites :</P> + +<PRE> + BEGIN; + ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>; + UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>); + ALTER TABLE table DROP COLUMN ancienne_colonne; + COMMIT; +</PRE> + + <P>Après, vous pouvez faire <I>VACUUM FULL tab</I> pour récupérer l'espace + disque utilisé par les lignes expirées.</P> + + <H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne, + une table, une base de données ?</H4> + + <P>Les limites sont :</P> +<PRE> + Taille maximum pour une base de données illimitée (il existe des bases de 32 To) + Taille maximum pour une table 32 To + Taille maximum pour une ligne 1,6 To + Taille maximum pour un champ 1 Go + Nombre maximum de lignes dans une table illimité + Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes + Nombre maximum d'index sur une table illimité +</PRE> + + <P>Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont limitées + par l'espace disque disponible, ainsi que par l'espace de mémoire et de swap. + Les performances peuvent se dégrader si ces valeurs sont inhabituellement + grandes.</P> + + <P>La taille maximum des tables (32 To) ne nécessite pas que le système + d'exploitation supporte les grands fichiers. Les grandes tables sont stockées + sous forme de fichiers multiples de 1 Go, donc les limites de taille du + système de fichier ne sont pas importantes.</P> + + <P>La taille maximum des tables et le nombre maximum de colonnes peuvent + être quadriplés, si la taille des blocs par défaut est augmentée à 32 Ko.</P> + + <H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker + les données d'un fichier texte typique ?</H4> + + <P>Une base de données PostgreSQL peut utiliser jusqu'à cinq fois + l'espace nécessaire pour stocker les données d'un fichier texte.</P> + + <P>A titre d'exemple, considérez un fichier de 100 000 lignes, comportant + un entier et une chaîne de description sur chaque ligne. Supposons que la + chaîne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo. + La taille du fichier d'une base de données PostgreSQL peut être + estimée à 6,4 Mo :</P> +<PRE> + 36 octets: chaque ligne (approximation) + 24 octets: un champ 'entier' et un champ 'texte' + + 4 octets: pointeur vers le tuple sur la page + ---------------------------------------- + 64 octets par ligne + + La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc : + + 8192 octets par page + ---------------------- = 128 lignes par page de base de données (arrondi à l'entier inférieur) + 64 octets par ligne + + 100000 lignes de données + ------------------------- = 782 pages de base de données (arrondi à l'entier supérieur) + 128 lignes par page + +782 pages de base de données * 8192 octets par page = 6 406 144 octets (6,4 Mo) +</PRE> + + <P>Les index utilisent moins d'espace, mais ils contiennent les données indexées, + ils peuvent donc également être grands.</P> + + <P>Les <SMALL>NULL</SMALL> sont stockés sous forme de bitmap, aussi + utilisent-ils très peu d'espace.</P> + + <H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables, + bases de données et utilisateurs sont définis ?</H4> + + <P><I>psql</I> dispose de plusieurs commandes commençant par un anti-slash + pour retrouver ces informations. Utilisez \? pour les connaître. Il existe + aussi des tables systèmes, qui commencent par <I>pg_</I> et qui les + décrivent également. Aussi, <I>psql -l</I> liste toutes les bases de + données.</P> + + <P>Essayez également le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il + illustre un grand nombre de commandes <SMALL>SELECT</SMALL> nécessaires pour + récupérer l'information des tables système de la base de données.</P> + + <H4><A name="4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage + des index. Pourquoi ?</H4> + + <P>Les index ne sont pas automatiquement utilisés par chaque requête. Ils + sont utilisés uniquement si la table est plus grande qu'une certaine taille, + et si la requête sélectionne seulement un faible pourcentage des lignes de la + table. Ceci est dû au fait qu'un accès disque aléatoire causé par un parcours + d'index peut être plus lent qu'une simple lecture de la table, ou parcours + séquentiel</P> + + <P>Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin + des statistiques de la table. Ces statistiques sont collectées en lançant + <SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>. + Avec les statistiques, l'optimiseur sait combien de lignes se trouvent + dans la table et peut mieux déterminer s'il faut utiliser l'index. + Les statistiques sont également utiles pour déterminer l'ordre optimal + des opérations de jointure. La collecte des statistiques devrait être + effectuée régulièrement lorsque le contenu de la table change.</P> + + <P>Les index ne sont normalement pas utilisés pour les clauses <SMALL>ORDER BY</SMALL> + ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite est + habituellement plus rapide qu'un parcours d'index pour une table importante. + Toutefois, <SMALL>LIMIT</SMALL> combiné avec <SMALL>ORDER BY</SMALL> + utilisera souvent un index parce que seulement une petite partie de la table est + renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index, + il est possible de retrouver ces valeurs en utilisant un index avec + ORDER BY et LIMIT :</P> + +<PRE> + SELECT colonne + FROM table + ORDER BY colonne [ DESC ] + LIMIT 1; +</PRE> + + <P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel, + utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et + lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P> + + <P>Lorsque vous utilisez des caractères joker tels que <SMALL>LIKE</SMALL> ou + <I>~</I>, les index peuvent seulement être utilisés dans certaines circonstances :</P> + <UL> + <LI>Le début de la chaîne de recherche doit être ancré au départ de la chaîne, c'est-à-dire + <UL> + <LI>Les modèles pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI> + <LI>Les modèles d'expression régulière pour <I>~</I> doivent commencer par + <I>^</I>.</LI> + </UL></LI> + <LI>La chaîne de recherche ne peut pas commencer par une classe de caractères, c'est-à-dire + [a-e].</LI> + <LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et + <I>~*</I> n'utilisent pas les index. Utilisez plutôt les index fonctionnels, + décrit dans la section <a href="#4.12">4.12</a>.</LI> + <LI>La locale <I>C</I> par défaut doit être utilisée lors de + <i>initdb</i>.</LI> + </UL> + <P> + + <H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue + mes requêtes ?</H4> + + <P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P> + + <H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?</H4> + + <P>Un index R-tree est utilisé pour l'indexation des données spatiales. Un + index de hachage ne permet pas les recherches par plage. Un index B-tree peut + seulement faire des recherches sur une dimension. Les index R-tree + peuvent traiter des données multi-dimensionnelles. Par exemple, si un index + R-tree peut être construit sur un attribut de type <I>point</I>, + le système peut plus efficacement gérer les requêtes du type + "Sélection de tous les points d'un rectangle".</P> + + <P>L'article de référence qui décrit le système R-tree original est :</P> + + <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial + Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt + of Data, 45-57.</P> + + <P>Vous pouvez également trouver ce papier dans le livre de Stonebraker + "Readings in Database Systems".</P> + + <P>Les index R-tree intégrés peuvent prendre en charge les polygônes et les boîtes. + En théorie, les R-trees peuvent être étendus à un plus grand nombre de dimensions. + En pratique, l'extension des R-trees requiert pas mal de travail et nous + n'avons pour le moment aucune documentation sur la façon de procéder.</P> + + <H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de + requêtes ?</H4> + + <P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query + Optimizer</i>) accélère l'optimisation des requêtes lors de jointures de + nombreuses tables par un algorithme génétique (GA). Il permet la + gestion des grosses requêtes de jointures en utilisant une recherche non + exhaustive.</P> + + <H4><A name="4.12">4.12</A>) Comment puis-je réaliser des recherches sur des + expressions rationnelles ainsi que des recherches non sensibles à la + casse ? Comment puis-je utiliser un index lors de recherches non + sensibles à la casse ?</H4> + + <P>L'opérateur <I>~</I> réalise des recherches d'expressions rationnelles + et <I>~*</I> le fait sans tenir compte de la casse. La variante de + <SMALL>LIKE</SMALL> non sensible à la casse est + <SMALL>ILIKE</SMALL>.</P> + + <P>Des comparaisons d'égalité non sensibles à la casse sont habituellement + exprimées de cette façon :</P> +<PRE> + SELECT * + FROM table + WHERE lower(colonne) = 'abc'; +</PRE> + + <P>Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un index + fonctionnel, celui-ci sera utilisé :</P> +<PRE> + CREATE INDEX tableindex ON table (lower(colonne)); +</PRE> + + <H4><A name="4.13">4.13</A>) Comment puis-je détecter si un champ est + <SMALL>NULL</SMALL> dans une requête ?</H4> + + <P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS + NOT NULL</SMALL>.</P> + + <H4><A name="4.14">4.14</A>) Quelle sont les différences entre les nombreux + types de caractères ?</H4> +<PRE> +Type Nom interne Notes +-------------------------------------------------- +VARCHAR(n) varchar n spécifie la taille maximum, sans remplissage +CHAR(n) bpchar des espaces sont ajoutés pour obtenir la + longueur fixe spécifiée +TEXT text pas de limite supérieure pour la taille +BYTEA bytea tableau d'octets (accepte les octets nuls) +"char" char un caractère +</PRE> + + <P>Vous verrez le nom interne en examinant les catalogues système et dans + quelques messages d'erreur.</P> + + <P>Les quatres premiers types du dessus sont des types "varlena" + (c'est-à-dire que les quatre premiers octets correspondent à la taille, + suivi des données). Donc, l'espace réellement utilisé est légèrement plus + grand que la taille déclarée. Néanmoins, ces types de données sont aussi + sujet à la compression ou à un enregistrement en dehors de la table avec + <SMALL>TOAST</SMALL>, donc l'espace occupé sur disque pourrait aussi être + moindre que ce qu'on pourrait attendre.</P> + + <P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des chaînes de + longueurs variables tout en limitant la taille de cette chaîne. + <SMALL>TEXT</SMALL> est utile pour les chaînes de longueur illimitée, avec + malgré tout un maximum de 1 Go.</P> + + <P><SMALL>CHAR(n)</SMALL> est intéressant pour stocker des chaînes de taille + identique. <SMALL>CHAR(n)</SMALL> complète avec des espaces pour arriver à + la taille spécifiée alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les + caractères donnés. <SMALL>BYTEA</SMALL> sert à stocker des données binaires, + particulièrement les données incluant des octets <SMALL>NULL</SMALL>. Tous + les types décrits ici ont des performances similaires.</P> + + <H4><A name="4.15.1">4.15.1</A>) Comment puis-je créer un champ série, + c'est-à-dire s'incrémentant automatiquement ?</H4> + + <P>PostgreSQL supporte un type de données <SMALL>SERIAL</SMALL>. Il crée + automatiquement une séquence. Par exemple, + ceci :</P> +<PRE> + CREATE TABLE personne ( + id SERIAL, + nom TEXT + ); +</PRE> + + est automatiquement traduit en ceci : +<PRE> + CREATE SEQUENCE personne_id_seq; + CREATE TABLE personne ( + id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), + nom TEXT + ); +</PRE> + + Voir la page man de <I>create_sequence</I> pour plus d'informations + sur les séquences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque + ligne comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder + puis recharger la base de données, vous devrez utiliser l'option + <I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de + <I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s. + + <H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un + <SMALL>SERIAL</SMALL> suite à une insertion ?</H4> + + <P>Une approche pour récupérer la prochaine valeur <SMALL>SERIAL</SMALL> à + partir de l'objet séquence est d'utiliser la fonction <I>nextval()</I> + <I>avant</I> l'insertion et de l'insérer ensuite explicitement. En utilisant + la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple + dans un pseudo-langage ressemblerait à ceci :</P> +<PRE> + nouvelle_id = execute("SELECT nextval('personne_id_seq')"); + execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')"); +</PRE> + + Vous pourriez ensuite utiliser la nouvelle valeur stockée dans + <CODE>nouvelle_id</CODE> avec d'autres requêtes (c'est-à-dire en tant que + clé étrangère de la table <CODE>personne</CODE>). Notez que le nom de la + <SMALL>SEQUENCE</SMALL> automatiquement créée sera + <<I>table</I>>_<<I>colonneserial</I>>_<I>seq</I>, où + <I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table + et de votre colonne <SMALL>SERIAL</SMALL>. + + <P>Autrement, vous pouvez récupérer la valeur <SMALL>SERIAL</SMALL> affectée + avec la fonction <I>currval()</I> <I>après</I> qu'elle ait été insérée par + défaut, c'est-à-dire,</P> +<PRE> + execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')"); + nouvelle_id = execute("SELECT currval('personne_id_seq')"); +</PRE> + + Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoyé + par l'instruction <SMALL>INSERT</SMALL> pour récupérer la valeur par défaut + bien que cela soit l'appoche la moins portable et la valeur de l'OID se + réinitialisera aux environs de quatre milliards. En Perl, avec DBI et le + module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via + <I>$sth->{pg_oid_status}</I> après un <I>$sth->execute()</I>. + + <H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et + <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs + les lancent en même temps ?</H4> + + <P>Non. <I>currval()</I> renvoie la valeur actuelle affectée par votre + processus, et non pas par tous les utilisateurs.</P> + + <H4><A name="4.15.4">4.15.4</A>) Pourquoi mes numéros de séquences ne sont pas + ré-utilisés lors d'une annulation de transaction ? Pourquoi + existe-t'il des trous dans la numérotation de ma colonne séquentielle + (SERIAL) ?</H4> + + <P>Pour améliorer les accès concurrents, les valeurs de séquences sont + données aux transactions qui en ont besoin et ne sont pas bloquées jusqu'à + la fin de la transaction. Ceci crée des trous dans le numérotage pour les + transactions annulées.</P> + + <H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL> ? + Qu'est-ce qu'un <SMALL>TID</SMALL> ?</H4> + + <P>Les <SMALL>OID</SMALL> sont la réponse de PostgreSQL aux identifiants de + lignes uniques. Chaque ligne créée dans PostgreSQL obtient un + <SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> générés pendant + <I>initdb</I> sont inférieurs à 16384 (voir <I>include/access/transam.h</I>). + Tous les <SMALL>OID</SMALL> créés par un utilisateur sont supérieurs ou + égaux à ceci. Par défaut, tous ces <SMALL>OID</SMALL> sont uniques non + seulement dans une table ou une base mais unique à l'intérieur d'une + installation PostgreSQL entière.</P> + + <P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables système interne + pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent être + utilisés pour identifier des lignes utilisateurs spécifiques et utilisés dans + des jointures. Il est recommandé que vous utilisiez le type de colonne + <SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>. + Vous pouvez créer un index sur le champ <SMALL>OID</SMALL> pour un accès + plus rapide.</P> + + <P>Les <SMALL>OID</SMALL> sont attribués pour toute ligne d'un endroit + central qui est utilisé par toutes les bases de données. Si vous voulez + changer l'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez + faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il + n'y a pas de raisons pour ne pas le faire :</P> +<PRE> + CREATE TABLE nouvelle_table (macolonne int); + SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table; + COPY table_temporaire FROM '/tmp/tablepg'; + COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg'; + DROP TABLE table_temporaire; +</PRE> + + <P>Les <SMALL>OID</SMALL> sont stockés en tant qu'entiers de quatre octets + et déborderont à quatre milliards. Personne n'a jamais rapporté un tel cas + et nous avons prévu de retirer la limite avant que cela ne se produise.</P> + + <P>Les <SMALL>TID</SMALL>s sont utilisés pour identifier des lignes + physiques spécifiques avec des valeurs de bloc et décalage. Les + <SMALL>TID</SMALL> changent après que les lignes aient été modifiés ou + rechargés. Ils sont utilisés par des entrées d'index pour pointer vers des + lignes physiques.</P> + + <H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilisés avec + PostgreSQL ?</H4> + + <P>Une partie du code source et de l'ancienne documentation utilisent des + termes dont l'usage est plus commun. Voici quelques exemples :</P> + + <UL> + <LI>table, relation, classe</LI> + <LI>ligne (row), enregistrement (record), tuple</LI> + <LI>colonne (column), champ (field), attribut</LI> + <LI>récupère, sélectionne (select)</LI> + <LI>remplace (replace), met à jour (update)</LI> + <LI>ajoute (append), insère (insert)</LI> + <LI><SMALL>OID</SMALL>, valeur séquentielle (serial value)</LI> + <LI>portal, curseur</LI> + <LI>range variable, table name, table alias</LI> + </UL> + + <P>Une liste des termes généraux pour le domaine des bases de données est + disponible sur : <A href= + "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P> + + <H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: + Memory exhausted in AllocSetAlloc()</I> ?</H4> + + <P>Vous manquez probablement de mémoire virtuelle sur votre système ou votre + noyau a une limite assez basse pour certaines ressources. Essayez ceci avant + de lancer <I>postmaster</I> :</P> +<PRE> + ulimit -d 262144 + limit datasize 256m +</PRE> + + Suivant votre shell, seul un d'eux pourrait réussir mais cela configurera + d'une façon plus importante la taille du segment de données de votre + processus. Cette commande s'applique au processus actuel et à tous les + processus lancé par celui-ci. Si vous avez des problèmes avec le client + <SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de données, + essayez ça avant de lancer le client. + + <H4><A name="4.19">4.19</A>) Comment puis-je connaître la version de + PostgreSQL que j'utilise ?</H4> + + <P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P> + + <H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj + descriptor</I> lors d'opérations sur des gros objects ?</H4> + + <P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE> + autour de chaque utilisateur de gros objets, c'est-à-dire pour entourer + <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> + + <P>Actuellement, PostgreSQL force cette règle en fermant les gros objets + lors de la transaction. Donc, le premier essai d'opérations sur ces objets, + fonctionnant habituellement (au moins la plupart du temps) aura un + <I>invalid large obj descriptor</I>. Donc le code, auparavant fonctionnel + (au moins la plupart du temps), génèrera maintenant un message d'erreur si + vous n'utilisez pas de transaction.</P> + + <P>Si vous utilisez une interface client interface comme + <SMALL>ODBC</SMALL>, vous aurez peut-être besoin de lancer + <CODE>auto-commit off.</CODE></P> + + <H4><A name="4.21">4.21</A>) Comment puis-je créer une colonne qui aura par + défaut l'heure actuelle comme valeur ?</H4> + + <P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P> +<PRE> +<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); +</CODE> +</PRE> + + <H4><A name="4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant + <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4> + + <P>Dans les versions précédant la 7.4, les sous-requêtes ont été jointes avec + des jointures externes en parcourant séquentiellement le résultat de la + sous-requête pour chaque ligne de la requête externe. Si la sous-requête + renvoit quelques lignes et que la requête externe en renvoit plein, + <CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour accélérer les autres + requêtes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE> :</P> +<PRE> SELECT * + FROM table + WHERE colonne IN (SELECT souscolonne FROM soustable); +</PRE> + to: +<PRE> SELECT * + FROM table + WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne); +</PRE> + + Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit être une colonne + indexée. + + <P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les mêmes + techniques sophistiquées de jointures comme des requêtes normales et est + préféré à l'utilisation de <CODE>EXISTS</CODE>.</P> + + <H4><A name="4.23">4.23</A>) Comment puis-je réaliser une jointure + externe ?</H4> + + <P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL + standard. Voici deux exemples :</P> +<PRE> + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</PRE> + or +<PRE> + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); +</PRE> + + <P>Ces requêtes identiques joignent t1.col à t2.col et renvoient toute + colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure + droite (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2. + Une jointure complète (<SMALL>FULL join</SMALL>) renverra les lignes + correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot clé + <SMALL>OUTER</SMALL> est optionnelle et assumé dans le cas de jointure + <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les + jointures ordinaires sont appelées des jointures <SMALL>INNER</SMALL>.</P> + + <P>Lors des précédentes versions, les jointures externes peuvent être + simulées en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par + exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requête + suivante réalise une jointure externe, <I>outer</I>, des deux tables :<BR> + <BR> + </P> +<PRE> + SELECT tab1.col1, tab2.col2 + FROM tab1, tab2 + WHERE tab1.col1 = tab2.col1 + UNION ALL + SELECT tab1.col1, NULL + FROM tab1 + WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) + ORDER BY col1 +</PRE> + + <H4><A name="4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant + plusieurs bases de données ?</H4> + + <P>Il n'existe pas de moyens de lancer des requêtes sur une autre base que + la courante. Comme PostgreSQL charge des catalogues systèmes spécifiques à + la base de données, sa réaction aux requêtes inter-base de données est + incertaine.</P> + + <P><I>contrib/dblink</I> permet les requêtes entre bases de données en + utilisant des fonctions. Bien sûr un client peut réaliser des connexions + simultanées à plusieurs bases de données et joindre les résultats du côté + client.</P> + + <H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou + colonnes à partir d'une fonction?</H4> + + <P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou + colonnes à partir d'une fonction, + <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> + http://techdocs.postgresql.org/guides/SetReturningFunctions</a>. + + <H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des + tables temporaires dans les fonctions PL/PgSQL de façon stable ?</H4> + <P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est + que si une fonction PL/PgSQL accède à une table temporaire, que cette table + est ensuite supprimée et recréée, et que la fonction est appelée de nouveau, + la fonction échouera car le contenu de la fonction cachée pointera toujours + vers l'ancienne table temporaire. La solution revient à utiliser + <SMALL>EXECUTE</SMALL> pour l'accès aux tables temporaires avec PL/PgSQL. + Ceci obligera l'analyse de la requête à chaque fois.</P> + + <H4><A name="4.27">4.27</A>) Quelles options de réplication sont + disponibles ?</H4> + <P>Il existe plusieurs solutions de réplication maître/esclave. Elles + permettent uniquement au maître de réaliser des changements sur la base de + données alors que l'esclave peut seulement faire des lectures de base de données. + Le bas de la page <a + href="http://gborg.PostgreSQL.org/genpage?replication_research"> + http://gborg.PostgreSQL.org/genpage?replication_research</a> les liste. + Une solution de réplication multi-maître est en cours de développement sur + <a + href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>.</P> + + <H4><A name="4.28">4.28</A>) Quelles options de cryptage sont + disponibles ? + </H4> + <UL> + <LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, à + utiliser dans des requêtes <SMALL>SQL</SMALL>.</LI> + <LI>Pour crypter une transmission entre le client et le serveur, le serveur + doit avoir positionné l'option <I>ssl</I> à <I>true</I> dans <I>postgresql.conf, + </I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit + exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas + être <I>désactivée</I>. Notez qu'il est aussi possible d'utiliser un + transport crypté d'une troisième partie, tel que stunnel ou ssh, plutôt que + les connexions SSL natives de PostgreSQL. + <LI>Les mots de passe des utilisateurs sont automatiquement cryptés depuis + la version 7.3. Pour les versions précédentes, vous devez activer l'option + <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI> + <LI>Le serveur peut fonctionner avec un système de fichiers cryptés.</LI> + </UL> + + <HR> + + <H2 align="center">Etendre PostgreSQL</H2> + + <H4><A name="5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec + <I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I> ?</H4> + + <P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur + dans un programme de test.</P> + + <H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux + types ou fonctions à PostgreSQL ?</H4> + + <P>Envoyez vos extensions à la liste de diffusion <I>pgsql-hackers</I>, + elles atterriront éventuellement dans le sous-répertoire <I>contrib/</I>.</P> + + <H4><A name="5.3">5.3</A>) Comment faire pour écrire une fonction C + qui renvoie un tuple ?</H4> + + <P>Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui + renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL. Voir + le Guide du Programmeur pour plus d'information. Un exemple de fonction + renvoyant une table définie en C se trouve à + <I>contrib/tablefunc</I>.</P> + + <H4><A name="5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi + ma recompilation ne voit-elle pas les modifications ?</H4> + + <P>Les <I>Makefiles</I> n'ont pas les dépendances adéquates pour les + fichiers d'en-tête. Il vous faut faire <I>make clean</I> puis un autre + <I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser + l'option <I>--enable-depend</I> de <I>configure</I> pour que le + compilateur calcule les dépendances automatiquement.</P> + </BODY> +</HTML> +