2 Foire Aux Questions (FAQ) pour PostgreSQL
4 Dernière mise à jour : vendredi 14 novembre 2004 16:32:47
6 Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
8 La plus récente version de ce document est disponible sur
9 http://www.PostgreSQL.org/docs/faqs/FAQ.html.
11 Les questions spécifiques à la plateforme sont répondues sur
12 http://www.PostgreSQL.org/docs/index.html.
13 _________________________________________________________________
17 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
18 1.2) Quelle est la licence de PostgreSQL ?
19 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
20 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?
21 1.5) Où puis-je me procurer PostgreSQL ?
22 1.6) Où puis-je obtenir du support ?
23 1.7) Quelle est la dernière version ?
24 1.8) Quelle documentation est disponible ?
25 1.9) Comment savoir quels sont les bogues connus ou les
26 fonctionnalités manquantes ?
27 1.10) Comment puis-je apprendre le SQL ?
28 1.11) PostgreSQL est-il compatible an 2000 ?
29 1.12) Comment puis-je rejoindre l'équipe de développement ?
30 1.13) Comment dois-je soumettre un rapport de bogue ?
31 1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ?
32 1.15) Comment puis-je aider financièrement PostgreSQL ?
34 Questions sur le client utilisateur
36 2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ?
37 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des
39 2.3) PostgreSQL a-t-il une interface graphique ?
40 2.4) Quels langages sont disponibles pour communiquer avec
43 Questions administratives
45 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
46 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un
47 message core dumped. Pourquoi ?
48 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
50 3.4) Quand je lance postmaster, j'obtiens des erreurs
51 IpcSemaphoreCreate. Pourquoi ?
52 3.5) Comment contrôler les connexions d'autres machines ?
53 3.6) Comment règler le moteur de la base de données pour de meilleures
55 3.7) Quelles fonctionalités de déboguage sont disponibles ?
56 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many
57 clients quand je me connecte ?
58 3.9) Que contient le répertoire pgsql_tmp ?
59 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de
60 restaurer pour mettre a jour les versions de PostgreSQL ?
61 3.11) Quels matériels dois-je utiliser ?
63 Questions fonctionnelles
65 4.1) Quelle est la différence entre curseur binaire et curseur
67 4.2) Comment faire un SELECT seulement sur les premières lignes d'une
68 requête ? Sur une ligne aléatoire ?
69 4.3) Comment obtenir une liste des tables ou d'autres choses que je
71 4.4) Comment supprime-t-on une colonne d'une table, ou comment
72 change-t-on son type de données ?
73 4.5) Quelle est la taille maximale pour une ligne, une table et une
75 4.6) Combien d'espace disque faut-il pour stocker les données d'un
76 fichier texte typique ?
77 4.7) Comment puis-je savoir quels index, tables, bases de données et
78 utilisateurs sont définis ?
79 4.8) Mes requêtes sont lentes ou ne font pas usage des index.
81 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
82 4.10) Qu'est-ce qu'un index R-tree ?
83 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
84 4.12) Comment puis-je réaliser des recherches par des expressions
85 rationnelles ainsi que des recherches non sensibles à la casse ?
86 Comment puis-je utiliser un index lors de recherches non sensibles à
88 4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
89 4.14) Quelle sont les différences entre les nombreux types de
91 4.15.1) Comment puis-je créer un champ série, c'est-à-dire
92 s'incrémentant automatiquement ?
93 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
95 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
96 lorsque plusieurs utilisateurs les lancent en même temps ?
97 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
98 d'une annulation de transaction ? Pourquoi existe-t'il des trous dans
99 la numérotation de ma colonne séquentielle (SERIAL) ?
100 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ?
101 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
102 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in
104 4.19) Comment puis-je connaître la version de PostgreSQL que
106 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations
107 avec des gros objets ?
108 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
109 actuelle comme valeur ?
110 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
111 4.23) Comment puis-je réaliser une jointure externe ?
112 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
114 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir
116 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires
117 dans les fonctions PL/PgSQL de façon stable ?
118 4.27) Quelles options de cryptage sont disponibles ?
122 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
123 psql, pourquoi cela finit-il avec un "dump core" ?
124 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions
126 5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ?
127 5.4) J'ai modifié un fichier source. Pourquoi la modification
128 n'est-elle pas visible après la recompilation ?
129 _________________________________________________________________
133 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
135 PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible
136 sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant
137 entendre la prononciation.
139 PostgreSQL est une amélioration du système de gestion de bases de
140 données POSTGRES (et est toujours quelque fois appelé "Postgres"), un
141 prototype de recherche de SGBD de prochaine génération. PostgreSQL
142 garde le puissant modèle de données et les types de données riches de
143 POSTGRES, mais remplace le langage de requêtes PostQuel par un
144 sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources
145 complets sont disponibles.
147 PostgreSQL est écrit par une équipe de développeurs qui sont tous
148 inscrits à la liste de diffusion de développement de PostgreSQL. Le
149 coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et
150 voir la section 1.6 pour contacter les développeurs). Cette équipe est
151 responsable de tout le développement de PostgreSQL. C'est un projet
152 soutenu par une communauté sans être contrôlé par une société. Pour y
153 contribuer, voir la FAQ des développeurs sur
154 http://www.postgresql.org/docs/faqs/FAQ_DEV.html.
156 Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
157 Beaucoup d'autres personnes ont contribué au portage, aux tests, au
158 déboguage et à l'amélioration du code. Le code de Postgres original,
159 duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux
160 étudiants diplômés et non diplômés, et de programmeurs travaillant
161 sous la direction du Professeur Michael Stonebraker à l'université de
162 Californie, Berkeley.
164 Le nom original du logiciel à Berkeley était Postgres. Quand le SQL
165 fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996,
166 le nom fut changé en PostgreSQL.
168 1.2) Quelle est la licence de PostgreSQL ?
170 PostgreSQL est distribué sous la licence suivante :
172 PostgreSQL Data Base Management System
174 Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
175 Portions Copyright (c) 1994-6 Regents of the University of California
177 Permission to use, copy, modify, and distribute this software and its
178 documentation for any purpose, without fee, and without a written
179 agreement is hereby granted, provided that the above copyright notice
180 and this paragraph and the following two paragraphs appear in all
183 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
184 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
185 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
186 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
187 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
189 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
190 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
191 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
192 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
193 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
194 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
196 La licence ci-dessus est la licence BSD, une licence open-source
199 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
201 En général, tout environnement compatible Unix moderne devrait pouvoir
202 faire fonctionner PostgreSQL. Les environnements qui ont été testés
203 explicitement sont listés dans les instructions d'installation.
205 1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?
207 À partir de la version 8.0, PostgreSQL fonctionne nativement sur les
208 systèmes d'exploitation Microsoft Windows à base NT comme Win2000,
209 WinXP et Win2003. Un installeur est disponible sur
210 http://pgfoundry.org/projects/pginstaller.
212 Il existe aussi un port sur Novell Netware sur
213 http://forge.novell.com.
215 1.5) Où puis-je me procurer PostgreSQL ?
217 Le site FTP anonyme principal de PostgreSQL est
218 ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site
221 1.6) Où puis-je obtenir du support ?
223 La liste de diffusion principale est pgsql-general@PostgreSQL.org.
224 Elle est disponible pour discuter de sujets en rapport avec
225 PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les
226 lignes suivantes dans le corps du message (pas dans la ligne du
231 à pgsql-general-request@PostgreSQL.org.
233 Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un
234 courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le
239 Les recueils sont envoyés aux membres de cette liste dès que la liste
240 principale a reçu 30 Ko de messages.
242 Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
243 envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le
248 Une liste de diffusion pour les développeurs est aussi disponible.
249 Pour s'y inscrire, envoyez un courriel à
250 pgsql-hackers-request@PostgreSQL.org avec dans le corps :
254 Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur
255 le site web de PostgreSQL :
257 http://www.PostgreSQL.org
259 Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL.
260 Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER"
261 irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net.
263 Une liste de sociétés pouvant fournir un support commercial est
264 disponible sur http://techdocs.postgresql.org/companies.php.
266 1.7) Quelle est la dernière version ?
268 La dernière version de PostgreSQL est la version 7.4.5.
270 Nous projetons de sortir une version majeure tous les six à huit mois.
272 1.8) Quelle documentation est disponible ?
274 Plusieurs manuels, pages de manuel ainsi que des petits exemples de
275 test sont inclus dans la distribution. Voir le répertoire /doc. Vous
276 pouvez aussi accéder aux manuels en ligne sur
277 http://www.PostgreSQL.org/docs.
279 Deux livres sur PostgreSQL sont disponibles en ligne sur
280 http://www.PostgreSQL.org/docs/awbook.html et
281 http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur
282 PostgreSQL pouvant être achetés sur
283 http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi
284 une collection d'articles techniques sur PostgreSQL sur
285 http://techdocs.PostgreSQL.org/.
287 psql possède des commandes \d pratiques montrant des informations sur
288 les types, opérateurs, fonctions, aggrégats, etc.
290 Notre site web contient encore plus de documentations.
292 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités
295 PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre
296 liste TODO pour les bogues connus, les fonctionnalités manquantes et
297 les plans pour le futur.
299 1.10) Comment puis-je apprendre le SQL ?
301 Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html
302 enseigne le SQL. Il existe un autre livre PostgreSQL sur
303 http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur
304 http://www.intermedia.net/support/sql/sqltut.shtm,
305 http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
306 et http://sqlcourse.com.
308 Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days,
309 Second Edition" se trouve sur
310 http://members.tripod.com/er4ebus/sql/index.htm
312 Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman,
313 Judith S., et al., Addison-Wesley. D'autres aiment The Complete
314 Reference SQL, Groff et al., McGraw-Hill.
316 1.11) PostgreSQL est-il compatible an 2000 ?
318 Oui, nous manipulons facilement les dates après et avant l'an 2000.
320 1.12) Comment puis-je rejoindre l'équipe de développement ?
322 Tout d'abord, téléchargez les derniers sources et lisez la
323 documentation pour les développeurs sur notre site web ou bien dans la
324 distribution. Ensuite, inscrivez-vous aux listes de diffusion
325 pgsql-hackers et pgsql-patches. Et pour finir, soumettez des
326 correctifs de grande qualité sur pgsql-patches.
328 Environ une douzaine de personnes ont des droits de modification sur
329 l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de
330 correctifs de qualité qu'il était devenu impossible aux développeurs
331 de tenir la cadence et nous avions confiance dans le qualité des
332 correctifs qu'ils soumettaient.
334 1.13) Comment dois-je soumettre un rapport de bogue ?
336 Merci de visiter la page PostgreSQL BugTool sur
337 http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur
338 la façon de soumettre un rapport de bogue.
340 De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour
341 voir s'il existe une version PostgreSQL plus récente ou des
344 1.14) Comment PostgreSQL se compare-til à d'autres SGBD ?
346 Il y a plusieurs manières de mesurer un logiciel : les
347 fonctionnalités, les performances, la fiabilité, le support, et le
351 PostgreSQL possède la plupart des fonctionnalités présentes
352 dans les SGBD commerciaux, comme les transactions, les requêtes
353 imbriquées, les déclencheurs, les vues, l'intégrité
354 référentielle par clés étrangères, et le verrouillage
355 sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas,
356 comme les types définis par l'utilisateur, l'héritage, les
357 règles, et le contrôle de concurrence par multi-versionnage
358 pour réduire les contentions de verrouillage.
361 PostgreSQL a des performances similaires aux autres bases de
362 données commerciales et open source. Il est plus rapide pour
363 certaines opérations, plus lent pour d'autres. Par rapport à
364 MySQL ou d'autres SGBD plus léger, nous sommes plus rapides
365 pour de nombreux utilisateurs, des requêtes complexes et une
366 charge pour les requêtes de lecture/écriture. MySQL est plus
367 rapide pour des requêtes SELECT simples effectuées par quelques
368 utilisateurs. Bien sûr, MySQL ne possède aucune des
369 fonctionnalités de la section Fonctionnalités ci-dessus.
370 PostgreSQL est construit pour la fiabilité et les
371 fonctionnalités et nous continuons à améliorer les performances
372 à chaque version. Il y a une page web intéressante qui compare
373 PostgreSQL à MySQL sur
374 http://openacs.org/philosophy/why-not-mysql.html. De plus,
375 MySQL est une société qui distribue son produit via l'open
376 source et requiert une licence commerciale pour les logiciels
377 propriétaires, donc pas une communauté de développement open
378 source comme PostgreSQL.
381 Nous somme conscients qu'un SGBD doit être fiable ou bien il
382 est inutile. Nous faisons le maximum pour sortir des versions
383 bien testées, du code stable ne contenant qu'un minimum de
384 bogues. Chaque version a au moins un mois de tests, et notre
385 historique de versions montre que nous pouvons fournir des
386 versions stables et robustes, prêtes pour une utilisation en
387 environnement de production. Nous pensons que nous nous
388 comparons favorablement aux autres bases de données dans ce
392 Nos listes de diffusion offrent un contact avec un large groupe
393 de développeurs et d'utilisateurs afin d'aider à la résolution
394 des problèmes rencontrés. Nous ne pouvons garantir un correctif
395 mais les SGBD commerciaux ne le garantissent pas toujours non
396 plus. L'accès direct aux développeurs, à la communauté
397 d'utilisateurs, aux manuels, et au code source, fait du support
398 pour PostgreSQL un support supérieur aux autres SGBD. Un
399 support commercial par incident est disponible pour ceux qui en
400 ont le besoin (voir la section 1.6 de la FAQ).
403 Nous sommes gratuits pour tous les usages, commerciaux et non
404 commerciaux. Vous pouvez inclure notre code dans vos produits
405 sans limitation, exceptées celles citées dans notre licence de
406 type BSD donnée plus haut.
408 1.15) Comment puis-je aider financièrement PostgreSQL ?
410 PostgreSQL possède une infrastructure de première classe depuis le
411 début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette
412 infrastructure des années durant.
414 Une infrastructure de qualité est importante pour un projet
415 open-source. Cela permet d'empêcher l'éparpillement qui ralentirait
416 beaucoup l'avancement du projet.
418 Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un
419 certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre
420 société peut donner de l'argent pour soutenir cet effort, merci de
421 consulter la page web http://store.pgsql.com/shopping/ et de faire une
424 Bien que la page web mentionne PostgreSQL, Inc, les contributions sont
425 exclusivement utilisées pour soutenir le projet PostgreSQL et ne
426 soutiennent aucune société que ce soit. Si vous le préférez, vous
427 pouvez aussi envoyer un chèque à l'adresse de contact.
428 _________________________________________________________________
430 De plus, si vous avez une histoire de succès avec PostgreSQL, merci de
431 la soumettre à notre site d'évangélisation sur
432 http://advocacy.postgresql.org.
434 Questions sur le client utilisateur
436 2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ?
438 Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC.
440 Vous pouvez télécharger PsqlOBDC depuis
441 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
443 OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il
444 fonctionne avec leur logiciel client ODBC standard, vous aurez donc
445 PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent
446 (Win, Mac, Unix, VMS).
448 Ils vendront probablement ce produit aux gens qui recherchent une
449 qualité de support professionnelle mais une version freeware sera
450 toujours disponible. Merci d'envoyer vos questions à
451 postgres95@openlink.co.uk.
453 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages
456 Une bonne introduction aux pages Web adossés à une base de données se
457 trouve à http://www.webreview.com
459 Pour l'intégration Web, PHP est une excellente interface. Elle se
460 trouve à http://www.php.net.
462 Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm
465 2.3) PostgreSQL a-t-il une interface graphique ?
467 Oui, il y a plusieurs interfaces graphiques disponibles pour
468 PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III
469 (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
470 et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire).
471 Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une
472 interface Web pour PostgreSQL.
474 Voir http://techdocs.postgresql.org/guides/GUITools pour une liste
477 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ?
479 La plupart des langages de programmation couramment utilisés ont une
480 interface pour PostgreSQL. Vérifiez la liste des modules de votre
483 Les interfaces ci-dessous sont incluses dans la distribution :
490 Interfaces supplémentaires disponibles sur http://gborg.postgresql.org
491 dans la section Drivers/Interfaces
492 _________________________________________________________________
494 Questions Administratives
496 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
498 Il faut spécifier l'option --prefix lors du lancement de configure.
500 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message
501 core dumped . Pourquoi ?
503 Cela peut être dû à une variété de problèmes mais vérifiez d'abord que
504 vous avez les extensions System V installées pour votre noyau.
505 PostgreSQL nécessite le support noyau pour la mémoire partagée et les
508 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
511 Soit vous n'avez pas configuré correctement la mémoire partagée dans
512 votre noyau, soit vous devez augmenter la mémoire partagée disponible
513 dans le noyau. Le montant exact dont vous avez besoin dépend de votre
514 architecture et du nombre de tampons et de processus que vous avez
515 configuré pour postmaster. Pour la plupart des systèmes avec un nombre
516 par défaut de tampons et de processus, vous aurez besoin d'un minimum
517 d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL
518 pour des informations plus détaillées sur la mémoire partagée et les
521 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate.
524 Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space
525 left on device) alors votre noyau n'est pas configuré avec
526 suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par
527 processus serveur potentiel. Une solution provisoire est de lancer
528 postmaster avec une plus petite limite sur le nombre de processus
529 serveur. Utilisez l'option -N avec un paramètre inférieur au choix par
530 défaut de 32. Une solution permanente est d'augmenter les paramètres
531 SEMMNS et SEMMNI de votre noyau.
533 Des sémaphores inopérantes peuvent aussi provoquer des plantages
534 pendant de gros accès à la base de données.
536 Si le message d'erreur est autre chose, vous n'avez peut-être pas du
537 tout le support des sémaphores dans votre noyau. Voir le chapitre
538 Administration du manuel PostgreSQL pour des informations plus
539 détaillées sur la mémoire partagée et les sémaphores.
541 3.5) Comment contrôler les connexions d'autres machines ?
543 Par défaut, PostgreSQL autorise seulement les connexions de la machine
544 locale en utilisant les sockets de domaine Unix ou les connexions
545 TCP/IP. D'autres machines ne seront pas capables de se connecter sauf
546 si vous modifiez listen_addresses dans postgresql.conf et activez une
547 authentification basée sur l'hôte en modifiant le fichier
548 $PGDATA/pg_hba.conf en accord.
550 3.6) Comment régler le moteur de la base de données pour de meilleures
553 Des index accéléreront les requêtes. La commande EXPLAIN ANALYZE vous
554 permet de voir comment PostgreSQL traite votre requête et quels index
557 Si vous faites beaucoup d'insertions (instruction INSERT), envisagez
558 de les faire en une fois en utilisant la commande COPY. Ceci est plus
559 rapide que des commandes INSERTS individuelles. Deuxièment, les
560 requêtes qui ne sont pas dans des blocs de transaction BEGIN
561 WORK/COMMIT sont considérés comme étant dans leur propre transaction.
562 Envisagez de faire plusieurs instructions dans un seul bloc de
563 transaction. Ceci réduira la surcharge apportée par les transactions.
564 Aussi, envisagez d'abandonner et de recréer des index lors de grosses
565 modifications de données.
567 Il y a plusieurs options d'optimisations. Vous pouvez désactiver
568 fsync() en lançant postmaster avec l'option -o -F. Ceci empêchera les
569 fsync()s d'écrire sur disque après toute transaction.
571 Vous pouvez utiliser l'option -B de postmaster pour augmenter le
572 nombre de tampons de mémoire partagée utilisés par les processus
573 serveurs. Si vous fixez ce paramètre trop haut, postmaster ne se
574 lancera pas car vous avez dépassé la limite de votre noyau sur la
575 quantité de mémoire partagée. Chaque tampon fait 8 Ko et le choix par
576 défaut est de 64 tampons.
578 Vous pouvez utiliser l'option serveur -S pour augmenter la quantité
579 maximale de mémoire utilisée par les processus serveurs pour des tris
580 temporaires. La valeur de -S est mesuré en kilooctets et le choix par
581 défaut est de 512 (c'est-à-dire 512 Ko).
583 Vous pouvez utiliser la commande CLUSTER pour regrouper vos données en
584 tables pour correspondre à un index. Voir la page de manual CLUSTER
585 pour plus de détails.
587 3.7) Quelles fonctionalités de déboguage sont disponibles ?
589 PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des
590 informations de statut qui peuvent être utile pour des intentions de
593 D'abord, en lançant configure avec l'option --enable-cassert, beaucoup
594 d'assert()s surveillent le serveur et arrêtent le programme quand
595 quelque chose d'inattendu arrive.
597 Postmaster et postgres ont tous deux plusieurs options de déboguage de
598 disponible. D'abord, quand vous lancez postmaster, vérifiez que vous
599 envoyez les sorties standard et d'erreur dans un fichier de traces
602 ./bin/postmaster >server.log 2>&1 &
604 Ceci va créer un fichier server.log dans le répertoire racine de
605 PostgreSQL. Ce fichier contient des informations utiles sur les
606 problèmes ou erreurs rencontrés par le serveur. Postmaster dispose
607 d'une option -d qui permet de rapporter des informations encore plus
608 détaillées d'être rapportées. L'option -d prend un numéro qui spécifie
609 le niveau de déboguage. Faites attention au fait que des valeurs
610 élévées de niveau de déboguage génerent des fichiers de traces
613 Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de
614 la ligne de commande et taper votre requête SQL directement. Ceci est
615 recommandé seulement pour des fonctions de déboguage. Notez qu'un
616 retour chariot termine la requête, pas un point-virgule. Si vous
617 compilez avec les symboles de déboguage, vous pouvez utiliser un
618 débogueur pour voir ce qui se passe. Parce que le serveur n'a pas été
619 lancé par postmaster, il ne tourne pas dans un environnement identique
620 et les problèmes d'interaction de verrouillage/serveur ne peuvent être
623 Si postmaster est en train de tourner, lancez psql dans une fenêtre
624 puis trouvez le PID du processus postgres utilisé par psql. Utilisez
625 un débogueur pour l'attacher au PID postgres. Vous pouvez mettre un
626 point d'arrêt dans le débogueur et envoyez des requêtes de psql. Si
627 vous déboguez le démarrage de postgres, vous pouvez mettre
628 PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le démarrage de n
629 secondes pour que vous puissiez attacher un débogueur au processus,
630 fixer des points d'arrêt et continuer la séquence de démarrage.
632 Le programme postgres a les options -s, -A et -t qui peuvent être
633 utile pour des mesures de déboguage et de performance.
635 Vous pouvez compiler avec les options de performance pour voir quelles
636 fonctions prennent du temps d'exécution. Les fichiers de gestion du
637 serveur seront déposés dans le répertoire pgsql/data/base/nom_db. Les
638 fichiers de gestion clients seront mis dans le répertoire actuel du
639 client. Linux requiert une compilation avec -DLINUX_PROFILE pour une
642 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients
643 quand je me connecte ?
645 Vous pouvez augmenter la limite de postmaster sur le nombre de
646 processus serveur concurrents qu'il peut lancer.
648 La limite par défaut est de 32 processus. Vous pouvez l'augmenter en
649 relançant postmaster avec une valeur -N appropriée ou en modifiant
652 Tenez compte du fait que si vous fixez -N plus grand que 32, vous
653 devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; -B doit
654 valoir au moins deux fois -N et probablement plus pour une meilleure
655 performance. Pour de grand nombres de processus serveurs vous aurez
656 probablement aussi augmenter plusieurs parametres de configuration du
657 noyau Unix. Les choses a vérifier incluent la taille maximale des
658 blocs de mémoire partagée, SHMMAX ; le nombre maximal de sémaphores,
659 SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre
660 maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal
661 de fichiers ouverts, NFILE et NINODE. La raison pour laquelle
662 PostgreSQL a une limite sur le nombre de processus serveurs autorisés
663 est pour que votre système ne tombe pas à court de ressources.
665 3.9) Que contient le répertoire pgsql_tmp ?
667 Ce répertoire contient des fichiers temporaires générés par le moteur
668 de requête. Par exemple, si un tri doit être fait pour satisfaire un
669 ORDER BY et que ce tri requiert plus de place que le paramètre -S du
670 serveur n'autorise, alors des fichiers temporaires seront créés pour
671 contenir les données nécessaires.
673 Les fichiers temporaires sont d'habitude effacés automatiquement mais
674 peuvent rester si un serveur s'arrête brutalement pendant un tri. Un
675 arrêt et un redémarrage de postmaster effacera les fichiers dans ces
678 3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et
679 de restaurer pour mettre a jour les versions de PostgreSQL ?
681 L'équipe PostgreSQL ne fait que des changements mineurs entre des
682 versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera
683 pas de sauvegarde et de restauration. Par contre, les sorties majeures
684 (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des
685 tables systèmes et des fichiers de données. Ces modifications sont
686 souvent complexes alors nous ne gardons pas de compatibilité
687 descendante pour les fichiers de données. Une sauvegarde exportera les
688 données dans un format générique qui peut ensuite être chargé dans le
689 nouveau format interne.
691 Dans les sorties où le format sur disque ne change pas, le script
692 pg_upgrade peut être utilisé pour mettre à jour sans
693 sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade
694 est disponible pour la sortie.
696 3.11) Quels matériels dois-je utiliser ?
698 Comme le matériel PC est compatible en grosse partie, les gens ont
699 tendance à croire que tous les matériels PC sont de même qualité. Ce
700 n'est pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité
701 sont plus fiables et ont de meilleurs performances qu'un matériel
702 moins coûteux. PostgreSQL fonctionnera sur à peu près tout matériel
703 mais si la fiabilité et la performance sont importantes pour vous, il
704 est rusé de bien considérer les options matérielles. Nos listes de
705 diffusion peuvent être utilisées pour discuter des options matériels.
706 _________________________________________________________________
708 Questions fonctionnelles
710 4.1) Quelle est la différence entre curseur binaire et curseur normal ?
712 Voir la page DECLARE du manuel pour une description.
714 4.2) Comment faire un SELECT seulement sur les premières lignes d'une
715 requête ? Sur une ligne aléatoire ?
717 Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT....
719 Il se peut que l'intégralité de la requête doive être évaluée, même si
720 vous voulez seulement les premières lignes. Envisagez d'utiliser une
721 requête avec une clause ORDER BY. S'il existe un index correspondant à
722 l'ORDER BY, PostgreSQL peut n'évaluer que les premières lignes, sinon
723 l'intégralité de la requête peut être évaluée, jusqu'à générer les
726 Pour faire un SELECT sur une ligne aléatoire :
732 4.3) Comment obtenir une liste des tables ou d'autres objets que je vois
735 Utilisez la commande \dt pour voir les tables dans psql. Pour une
736 liste complète de commandes à l'intérieur de psql, vous pouvez
737 utiliser \?. Autrement, vous pouvez lire le code source de psql dans
738 le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes
739 SQL qui génèrent le contenu des commandes anti-slash de psql. Vous
740 pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les
741 requêtes qu'il utilise pour exécuter les commandes que vous lui
742 passez. PostgreSQL fournit aussi une interface d'informations sur le
743 schéma compatible avec SQLi que vous pouvez interroger des
744 informations sur la base de données.
746 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on
747 son type de données ?
749 La fonction DROP COLUMN a été ajoutée dans la version 7.3 avec ALTER
750 TABLE DROP COLUMN. Pour les versions précédentes, vous pouvez faire :
752 LOCK TABLE ancienne_table;
753 SELECT ... -- sélectionnez toutes les colonnes sauf celle à supprimer
754 INTO TABLE nouvelle_table
756 DROP TABLE ancienne_table;
757 ALTER TABLE nouvelle_table RENAME TO ancienne_table;
760 Pour changer le type de données d'une colonne, faites :
762 ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees;
763 UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees);
764 ALTER TABLE table DROP COLUMN ancienne_colonne;
767 Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace
768 disque utilisé par les lignes expirées.
770 4.5) Quelle est la taille maximale pour une ligne, une table, une base de
774 Taille maximum pour une base de données illimitée (il existe des basesde 32 To)
775 Taille maximum pour une table 32 To
776 Taille maximum pour une ligne 1,6 To
777 Taille maximum pour un champ 1 Go
778 Nombre maximum de lignes dans une table illimité
779 Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
780 Nombre maximum d'index sur une table illimité
782 Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont
783 limitées par l'espace disque disponible, ainsi que par l'espace de
784 mémoire et de swap. Les performances peuvent se dégrader si ces
785 valeurs sont inhabituellement grandes.
787 La taille maximum des tables (32 To) ne nécessite pas que le système
788 d'exploitation supporte les grands fichiers. Les grandes tables sont
789 stockées sous forme de fichiers multiples de 1 Go, donc les limites de
790 taille du système de fichier ne sont pas importantes.
792 La taille maximum des tables et le nombre maximum de colonnes peuvent
793 être quadriplés, si la taille des blocs par défaut est augmentée à
796 4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier
799 Une base de données PostgreSQL peut utiliser jusqu'à cinq fois
800 l'espace nécessaire pour stocker les données d'un fichier texte.
802 A titre d'exemple, considérez un fichier de 100 000 lignes, comportant
803 un entier et une chaîne de description sur chaque ligne. Supposons que
804 la chaîne soit longue en moyenne de 20 octets. Le fichier texte serait
805 de 2,8 Mo. La taille du fichier d'une base de données PostgreSQL peut
806 être estimée à 6,4 Mo :
807 32 octets: chaque ligne (approximation)
808 24 octets: un champ 'entier' et un champ 'texte'
809 + 4 octets: pointeur vers le tuple sur la page
810 ----------------------------------------
813 La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
816 ---------------------- = 136 lignes par page de base de données (arrondi à l'entier inférieur)
819 100000 lignes de données
820 ------------------------- = 735 pages de base de données (arrondi à l'entier supérieur)
823 735 pages de base de données * 8192 octets par page = 6 021 120 octets (6,4 Mo)
825 Les index utilisent moins d'espace, mais ils contiennent les données
826 indexées, ils peuvent donc également être grands.
828 Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très
831 4.7) Comment puis-je savoir quels index, tables, bases de données et
832 utilisateurs sont définis ?
834 psql dispose de plusieurs commandes commençant par un anti-slash pour
835 retrouver ces informations. Utilisez \? pour les connaître. Il existe
836 aussi des tables systèmes, qui commencent par pg_ et qui les décrivent
837 également. Aussi, psql -l liste toutes les bases de données.
839 Essayez également le fichier pgsql/src/tutorial/syscat.source. Il
840 illustre un grand nombre de commandes SELECT nécessaires pour
841 récupérer l'information des tables système de la base de données.
843 4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ?
845 Les index ne sont pas automatiquement utilisés par chaque requête. Ils
846 sont utilisés uniquement si la table est plus grande qu'une certaine
847 taille, et si la requête sélectionne seulement un faible pourcentage
848 des lignes de la table. Ceci est dû au fait qu'un accès disque
849 aléatoire causé par un parcours d'index peut être plus lent qu'une
850 simple lecture de la table, ou parcours séquentiel
852 Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin
853 des statistiques de la table. Ces statistiques sont collectées en
854 lançant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques,
855 l'optimiseur sait combien de lignes se trouvent dans la table et peut
856 mieux déterminer s'il faut utiliser l'index. Les statistiques sont
857 également utiles pour déterminer l'ordre optimal des opérations de
858 jointure. La collecte des statistiques devrait être effectuée
859 régulièrement lorsque le contenu de la table change.
861 Les index ne sont normalement pas utilisés pour les clauses ORDER BY
862 ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite
863 est habituellement plus rapide qu'un parcours d'index pour une table
864 importante. Toutefois, LIMIT combiné avec ORDER BY utilisera souvent
865 un index parce que seulement une petite partie de la table est
866 renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index,
867 il est possible de retrouver ces valeurs en utilisant un index avec
871 ORDER BY colonne [ DESC ]
874 Si vous pensez que l'optimiseur choisit par erreur un parcours
875 sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests
876 pour voir si le parcours d'index est effectivement plus rapide.
878 Lorsque vous utilisez des caractères joker tels que LIKE ou ~, les
879 index peuvent seulement être utilisés dans certaines circonstances :
880 * Le début de la chaîne de recherche doit être ancré au départ de la
882 + Les modèles pour LIKE ne doivent pas commencer par %.
883 + Les modèles d'expression régulière pour ~ doivent commencer
885 * La chaîne de recherche ne peut pas commencer par une classe de
886 caractères, c'est-à-dire [a-e].
887 * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les
888 index. Utilisez plutôt les index fonctionnels, décrit dans la
890 * La locale C par défaut doit être utilisée lors de initdb.
892 Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent
893 pas être utilisés sauf si les types de données correspondent
894 exactement au type de la colonne de l'index. Ceci est particulièrement
895 vrai pour les index de colonnes de type int2, int8 et numeric.
897 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
899 Voir la page EXPLAIN du manuel.
901 4.10) Qu'est-ce qu'un index R-tree ?
903 Un index R-tree est utilisé pour l'indexation des données spatiales.
904 Un index de hachage ne permet pas les recherches par plage. Un index
905 B-tree peut seulement faire des recherches sur une dimension. Les
906 index R-tree peuvent traiter des données multi-dimensionnelles. Par
907 exemple, si un index R-tree peut être construit sur un attribut de
908 type point, le système peut plus efficacement gérer les requêtes du
909 type "Sélection de tous les points d'un rectangle".
911 L'article de référence qui décrit le système R-tree original est :
913 Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
914 Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
917 Vous pouvez également trouver ce papier dans le livre de Stonebraker
918 "Readings in Database Systems".
920 Les index R-tree intégrés peuvent prendre en charge les polygônes et
921 les boîtes. En théorie, les R-trees peuvent être étendus à un plus
922 grand nombre de dimensions. En pratique, l'extension des R-trees
923 requiert pas mal de travail et nous n'avons pour le moment aucune
924 documentation sur la façon de procéder.
926 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
928 Le module GEQO (acronyme de GEnetic Query Optimizer) accélère
929 l'optimisation des requêtes lors de jointures de nombreuses tables par
930 un algorithme génétique (GA). Il permet la gestion des grosses
931 requêtes de jointures en utilisant une recherche non exhaustive.
933 4.12) Comment puis-je réaliser des recherches sur des expressions
934 rationnelles ainsi que des recherches non sensibles à la casse ? Comment
935 puis-je utiliser un index lors de recherches non sensibles à la casse ?
937 L'opérateur ~ réalise des recherches d'expressions rationnelles et ~*
938 le fait sans tenir compte de la casse. La variante de LIKE non
939 sensible à la casse est ILIKE.
941 Des comparaisons d'égalité non sensibles à la casse sont
942 habituellement exprimées de cette façon :
945 WHERE lower(colonne) = 'abc';
947 Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un
948 index fonctionnel, celui-ci sera utilisé :
949 CREATE INDEX tableindex ON table (lower(colonne));
951 4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
953 Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL.
955 4.14) Quelle sont les différences entre les nombreux types de caractères ?
957 Type Nom interne Notes
958 --------------------------------------------------
959 VARCHAR(n) varchar n spécifie la taille maximum, sans remplissage
960 CHAR(n) bpchar des espaces sont ajoutés pour obtenir la
961 longueur fixe spécifiée
962 TEXT text pas de limite supérieure pour la taille
963 BYTEA bytea tableau d'octets (accepte les octets nuls)
964 "char" char un caractère
966 Vous verrez le nom interne en examinant les catalogues système et dans
967 quelques messages d'erreur.
969 Les quatres premiers types du dessus sont des types "varlena"
970 (c'est-à-dire que les quatre premiers octets correspondent à la
971 taille, suivi des données). Donc, l'espace réellement utilisé est
972 légèrement plus grand que la taille déclarée. Néanmoins, ces types de
973 données sont aussi sujet à la compression ou à un enregistrement en
974 dehors de la table avec TOAST, donc l'espace occupé sur disque
975 pourrait aussi être moindre que ce qu'on pourrait attendre.
977 VARCHAR(n) est bien mieux pour enregistrer des chaînes de longueurs
978 variables tout en limitant la taille de cette chaîne. TEXT est utile
979 pour les chaînes de longueur illimitée, avec malgré tout un maximum de
982 CHAR(n) est intéressant pour stocker des chaînes de taille identique.
983 CHAR(n) complète avec des espaces pour arriver à la taille spécifiée
984 alors que VARCHAR(n) n'enregistre que les caractères donnés. BYTEA
985 sert à stocker des données binaires, particulièrement les données
986 incluant des octets NULL. Tous les types décrits ici ont des
987 performances similaires.
989 4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant
992 PostgreSQL supporte un type de données SERIAL. Il crée automatiquement
993 une séquence. Par exemple, ceci :
994 CREATE TABLE personne (
999 est automatiquement traduit en ceci :
1000 CREATE SEQUENCE personne_id_seq;
1001 CREATE TABLE personne (
1002 id INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
1006 Voir la page man de create_sequence pour plus d'informations sur les
1007 séquences. Vous pouvez aussi utiliser le champ OID de chaque ligne
1008 comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder
1009 puis recharger la base de données, vous devrez utiliser l'option -o ou
1010 l'option COPY WITH OIDS de pg_dump pour conserver les OIDs.
1012 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
1015 Une approche pour récupérer la prochaine valeur SERIAL à partir de
1016 l'objet séquence est d'utiliser la fonction nextval() avant
1017 l'insertion et de l'insérer ensuite explicitement. En utilisant la
1018 table d'exemple de la section 4.15.1, un exemple dans un
1019 pseudo-langage ressemblerait à ceci :
1020 nouvelle_id = execute("SELECT nextval('personne_id_seq')");
1021 execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
1023 Vous pourriez ensuite utiliser la nouvelle valeur stockée dans
1024 nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé
1025 étrangère de la table personne). Notez que le nom de la SEQUENCE
1026 automatiquement créée sera <table>_<colonneserial>_seq, où table et
1027 colonneserial sont les noms respectifs de votre table et de votre
1030 Autrement, vous pouvez récupérer la valeur SERIAL affectée avec la
1031 fonction currval() après qu'elle ait été insérée par défaut,
1033 execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
1034 nouvelle_id = execute("SELECT currval('personne_id_seq')");
1036 Enfin, vous pouvez utiliser l'OID renvoyé par l'instruction INSERT
1037 pour récupérer la valeur par défaut bien que cela soit l'appoche la
1038 moins portable et la valeur de l'OID se réinitialisera aux environs de
1039 quatre milliards. En Perl, avec DBI et le module DBD:Pg d'Edmund
1040 Mergl, l'ancienne valeur est disponible via $sth->{pg_oid_status}
1041 après un $sth->execute().
1043 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
1044 lorsque plusieurs utilisateurs les lancent en même temps ?
1046 Non. currval() renvoie la valeur actuelle affectée par votre
1047 processus, et non pas par tous les utilisateurs.
1049 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
1050 d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la
1051 numérotation de ma colonne séquentielle (SERIAL) ?
1053 Pour améliorer les accès concurrents, les valeurs de séquences sont
1054 données aux transactions qui en ont besoin et ne sont pas bloquées
1055 jusqu'à la fin de la transaction. Ceci crée des trous dans le
1056 numérotage pour les transactions annulées.
1058 4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ?
1060 Les OID sont la réponse de PostgreSQL aux identifiants de lignes
1061 uniques. Chaque ligne créée dans PostgreSQL obtient un OID unique.
1062 Tous les OID générés pendant initdb sont inférieurs à 16384 (voir
1063 include/access/transam.h). Tous les OID créés par un utilisateur sont
1064 supérieurs ou égaux à ceci. Par défaut, tous ces OID sont uniques non
1065 seulement dans une table ou une base mais unique à l'intérieur d'une
1066 installation PostgreSQL entière.
1068 PostgreSQL utilise les OID dans ses tables système interne pour lier
1069 les lignes entre tables. Ces OID peuvent être utilisés pour identifier
1070 des lignes utilisateurs spécifiques et utilisés dans des jointures. Il
1071 est recommandé que vous utilisiez le type de colonne OID pour stocker
1072 des valeurs OID. Vous pouvez créer un index sur le champ OID pour un
1075 Les OID sont attribués pour toute ligne d'un endroit central qui est
1076 utilisé par toutes les bases de données. Si vous voulez changer l'OID
1077 en quelque chose d'autre ou si vous voulez faire une copie de la table
1078 avec les OID originaux, il n'y a pas de raisons pour ne pas le faire :
1079 CREATE TABLE nouvelle_table (macolonne int);
1080 SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
1081 COPY table_temporaire FROM '/tmp/tablepg';
1082 COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
1083 DROP TABLE table_temporaire;
1085 Les OID sont stockés en tant qu'entiers de quatre octets et
1086 déborderont à quatre milliards. Personne n'a jamais rapporté un tel
1087 cas et nous avons prévu de retirer la limite avant que cela ne se
1090 Les TIDs sont utilisés pour identifier des lignes physiques
1091 spécifiques avec des valeurs de bloc et décalage. Les TID changent
1092 après que les lignes aient été modifiés ou rechargés. Ils sont
1093 utilisés par des entrées d'index pour pointer vers des lignes
1096 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
1098 Une partie du code source et de l'ancienne documentation utilisent des
1099 termes dont l'usage est plus commun. Voici quelques exemples :
1100 * table, relation, classe
1101 * ligne (row), enregistrement (record), tuple
1102 * colonne (column), champ (field), attribut
1103 * récupère, sélectionne (select)
1104 * remplace (replace), met à jour (update)
1105 * ajoute (append), insère (insert)
1106 * OID, valeur séquentielle (serial value)
1108 * range variable, table name, table alias
1110 Une liste des termes généraux pour le domaine des bases de données est
1112 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1115 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ?
1117 Vous manquez probablement de mémoire virtuelle sur votre système ou
1118 votre noyau a une limite assez basse pour certaines ressources.
1119 Essayez ceci avant de lancer postmaster :
1123 Suivant votre shell, seul un d'eux pourrait réussir mais cela
1124 configurera d'une façon plus importante la taille du segment de
1125 données de votre processus. Cette commande s'applique au processus
1126 actuel et à tous les processus lancé par celui-ci. Si vous avez des
1127 problèmes avec le client SQL parce que le processus serveur renvoie
1128 trop de données, essayez ça avant de lancer le client.
1130 4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ?
1132 A partir de psql, tapez SELECT version();
1134 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des
1137 Vous avez besoin de placer BEGIN WORK et COMMIT autour de chaque
1138 utilisateur de gros objets, c'est-à-dire pour entourer lo_open ...
1141 Actuellement, PostgreSQL force cette règle en fermant les gros objets
1142 lors de la transaction. Donc, le premier essai d'opérations sur ces
1143 objets, fonctionnant habituellement (au moins la plupart du temps)
1144 aura un invalid large obj descriptor. Donc le code, auparavant
1145 fonctionnel (au moins la plupart du temps), génèrera maintenant un
1146 message d'erreur si vous n'utilisez pas de transaction.
1148 Si vous utilisez une interface client interface comme ODBC, vous aurez
1149 peut-être besoin de lancer auto-commit off.
1151 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
1152 actuelle comme valeur ?
1154 Utilisez CURRENT_TIMESTAMP:
1155 CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
1157 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
1159 Dans les versions précédant la 7.4, les sous-requêtes ont été jointes
1160 avec des jointures externes en parcourant séquentiellement le résultat
1161 de la sous-requête pour chaque ligne de la requête externe. Si la
1162 sous-requête renvoit quelques lignes et que la requête externe en
1163 renvoit plein, IN sera plus rapide. Pour accélérer les autres
1164 requêtes, remplacez IN avec EXISTS :
1167 WHERE colonne IN (SELECT souscolonne FROM soustable);
1172 WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
1174 Pour que ceci soit rapide, souscolonne doit être une colonne indexée.
1176 A partir de la version 7.4, IN utilise actuellement les mêmes
1177 techniques sophistiquées de jointures comme des requêtes normales et
1178 est préféré à l'utilisation de EXISTS.
1180 4.23) Comment puis-je réaliser une jointure externe ?
1182 PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
1183 standard. Voici deux exemples :
1185 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1189 FROM t1 LEFT OUTER JOIN t2 USING (col);
1191 Ces requêtes identiques joignent t1.col à t2.col et renvoient toute
1192 colonne non jointe de t1 (celles sans correspondance dans t2). Une
1193 jointure droite (RIGHT join) ajoutera les lignes non jointes de t2.
1194 Une jointure complète (FULL join) renverra les lignes correspondantes
1195 ainsi que les lignes non jointes de t1 et t2. Le mot clé OUTER est
1196 optionnelle et assumé dans le cas de jointure LEFT, RIGHT et FULL. Les
1197 jointures ordinaires sont appelées des jointures INNER.
1199 Lors des précédentes versions, les jointures externes peuvent être
1200 simulées en utilisant UNION et NOT IN. Par exemple, lors d'une
1201 jointure de tab1 et tab2, la requête suivante réalise une jointure
1202 externe, outer, des deux tables :
1203 SELECT tab1.col1, tab2.col2
1205 WHERE tab1.col1 = tab2.col1
1207 SELECT tab1.col1, NULL
1209 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1212 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
1215 Il n'existe pas de moyens de lancer des requêtes sur une autre base
1216 que la courante. Comme PostgreSQL charge des catalogues systèmes
1217 spécifiques à la base de données, sa réaction aux requêtes inter-base
1218 de données est incertaine.
1220 contrib/dblink permet les requêtes entre bases de données en utilisant
1221 des fonctions. Bien sûr un client peut réaliser des connexions
1222 simultanées à plusieurs bases de données et joindre les résultats du
1225 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir d'une
1228 A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes
1229 ou colonnes à partir d'une fonction,
1230 http://techdocs.postgresql.org/guides/SetReturningFunctions.
1232 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires dans
1233 les fonctions PL/PgSQL de façon stable ?
1235 PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux
1236 est que si une fonction PL/PgSQL accède à une table temporaire, que
1237 cette table est ensuite supprimée et recréée, et que la fonction est
1238 appelée de nouveau, la fonction échouera car le contenu de la fonction
1239 cachée pointera toujours vers l'ancienne table temporaire. La solution
1240 revient à utiliser EXECUTE pour l'accès aux tables temporaires avec
1241 PL/PgSQL. Ceci obligera l'analyse de la requête à chaque fois.
1243 4.27) Quelles options de cryptage sont disponibles ?
1245 * contrib/pgcrypto contient de nombreuses fonctions de cryptage, à
1246 utiliser dans des requêtes SQL.
1247 * Pour crypter une transmission entre le client et le serveur, le
1248 serveur doit avoir positionné l'option ssl à true dans
1249 postgresql.conf, et un enregistrement applicable host ou hostssl
1250 doit exister dans pg_hba.conf, et le sslmode du client ne doit pas
1251 être désactivée. Notez qu'il est aussi possible d'utiliser un
1252 transport crypté d'une troisième partie, tel que stunnel ou ssh,
1253 plutôt que les connexions SSL natives de PostgreSQL.
1254 * Les mots de passe des utilisateurs sont automatiquement cryptés
1255 depuis la version 7.3. Pour les versions précédentes, vous devez
1256 activer l'option PASSWORD_ENCRYPTION dans postgresql.conf.
1257 * Le serveur peut fonctionner avec un système de fichiers cryptés.
1258 _________________________________________________________________
1262 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec psql,
1263 pourquoi cela finit-il avec un dump core ?
1265 Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction
1266 utilisateur dans un programme de test.
1268 5.2) Comment puis-je ajouter de bons nouveaux types ou fonctions à
1271 Envoyez vos extensions à la liste de diffusion pgsql-hackers, elles
1272 atterriront éventuellement dans le sous-répertoire contrib/.
1274 5.3) Comment faire pour écrire une fonction C qui renvoie un tuple ?
1276 Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui
1277 renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL.
1278 Voir le Guide du Programmeur pour plus d'information. Un exemple de
1279 fonction renvoyant une table définie en C se trouve à
1282 5.4) J'ai modifié un fichier source. Pourquoi ma recompilation ne voit-elle
1283 pas les modifications ?
1285 Les Makefiles n'ont pas les dépendances adéquates pour les fichiers
1286 d'en-tête. Il vous faut faire make clean puis un autre make. Si vous
1287 utilisez GCC, vous pouvez utiliser l'option --enable-depend de
1288 configure pour que le compilateur calcule les dépendances