Remove long-unused and broken TCL_ARRAYS.
[PostgreSQL.git] / doc / FAQ_french
blob7db7cac408215594d9ee653c9e3179b40569bea4
2                    Foire Aux Questions (FAQ) pour PostgreSQL
3                                        
4    Dernière mise à jour : vendredi 14 novembre 2004 16:32:47
5    
6    Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
7    
8    La plus récente version de ce document est disponible sur
9    http://www.PostgreSQL.org/docs/faqs/FAQ.html.
10    
11    Les questions spécifiques à la plateforme sont répondues sur
12    http://www.PostgreSQL.org/docs/index.html.
13      _________________________________________________________________
14    
15                             Questions générales
16                                       
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 ?
33    
34                     Questions sur le client utilisateur
35                                       
36    2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ?
37    2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des
38    pages Web ?
39    2.3) PostgreSQL a-t-il une interface graphique ?
40    2.4) Quels langages sont disponibles pour communiquer avec
41    PostgreSQL ?
42    
43                          Questions administratives
44                                       
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.
49    Pourquoi ?
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
54    performances ?
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 ?
62    
63                           Questions fonctionnelles
64                                       
65    4.1) Quelle est la différence entre curseur binaire et curseur
66    normal ?
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
70    vois dans psql ?
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
74    base de données ?
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.
80    Pourquoi ?
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 à
87    la casse ?
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
90    caractères ?
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
94    insertion ?
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
103    AllocSetAlloc() ?
104    4.19) Comment puis-je connaître la version de PostgreSQL que
105    j'utilise ?
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
113    données ??
114    4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir
115    d'une fonction ?
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 ?
119    
120                              Etendre PostgreSQL
121                                       
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
125    pour PostgreSQL ?
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      _________________________________________________________________
130    
131                             Questions générales
132                                       
133     1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
134     
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.
138    
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.
146    
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.
155    
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.
163    
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.
167    
168     1.2) Quelle est la licence de PostgreSQL ?
169     
170    PostgreSQL est distribué sous la licence suivante :
171    
172    PostgreSQL Data Base Management System
173    
174    Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
175    Portions Copyright (c) 1994-6 Regents of the University of California
176    
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
181    copies.
182    
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.
188    
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.
195    
196    La licence ci-dessus est la licence BSD, une licence open-source
197    classique.
198    
199     1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
200     
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.
204    
205     1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?
206     
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.
211    
212    Il existe aussi un port sur Novell Netware sur
213    http://forge.novell.com.
214    
215     1.5) Où puis-je me procurer PostgreSQL ?
216     
217    Le site FTP anonyme principal de PostgreSQL est
218    ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site
219    web principal.
220    
221     1.6) Où puis-je obtenir du support ?
222     
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
227    sujet) :
228     subscribe
229     end
231    à pgsql-general-request@PostgreSQL.org.
232    
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
235    corps :
236     subscribe
237     end
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.
241    
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
244    corps :
245     subscribe
246     end
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 :
251     subscribe
252     end
254    Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur
255    le site web de PostgreSQL :
256    
257      http://www.PostgreSQL.org
258      
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.
262    
263    Une liste de sociétés pouvant fournir un support commercial est
264    disponible sur http://techdocs.postgresql.org/companies.php.
265    
266     1.7) Quelle est la dernière version ?
267     
268    La dernière version de PostgreSQL est la version 7.4.5.
269    
270    Nous projetons de sortir une version majeure tous les six à huit mois.
271    
272     1.8) Quelle documentation est disponible ?
273     
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.
278    
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/.
286    
287    psql possède des commandes \d pratiques montrant des informations sur
288    les types, opérateurs, fonctions, aggrégats, etc.
289    
290    Notre site web contient encore plus de documentations.
291    
292     1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités
293     manquantes ?
294     
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.
298    
299     1.10) Comment puis-je apprendre le SQL ?
300     
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.
307    
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
311    
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.
315    
316     1.11) PostgreSQL est-il compatible an 2000 ?
317     
318    Oui, nous manipulons facilement les dates après et avant l'an 2000.
319    
320     1.12) Comment puis-je rejoindre l'équipe de développement ?
321     
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.
327    
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.
333    
334     1.13) Comment dois-je soumettre un rapport de bogue ?
335     
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.
339    
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
342    correctifs.
343    
344     1.14) Comment PostgreSQL se compare-til à d'autres SGBD ?
345     
346    Il y a plusieurs manières de mesurer un logiciel : les
347    fonctionnalités, les performances, la fiabilité, le support, et le
348    prix.
349    
350    Fonctionnalités
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.
359           
360    Performances
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.
379           
380    Fiabilité
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
389           domaine.
390           
391    Support
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).
401           
402    Prix
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.
407           
408     1.15) Comment puis-je aider financièrement PostgreSQL ?
409     
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.
413    
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.
417    
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
422    donation.
423    
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      _________________________________________________________________
429    
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.
433    
434                     Questions sur le client utilisateur
435                                       
436     2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ?
437     
438    Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC.
439    
440    Vous pouvez télécharger PsqlOBDC depuis
441    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
442    
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).
447    
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.
452    
453     2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages
454     Web ?
455     
456    Une bonne introduction aux pages Web adossés à une base de données se
457    trouve à http://www.webreview.com
458    
459    Pour l'intégration Web, PHP est une excellente interface. Elle se
460    trouve à http://www.php.net.
461    
462    Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm
463    ou mod_perl.
464    
465     2.3) PostgreSQL a-t-il une interface graphique ?
466     
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.
473    
474    Voir http://techdocs.postgresql.org/guides/GUITools pour une liste
475    plus détaillée.
476    
477     2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ?
478     
479    La plupart des langages de programmation couramment utilisés ont une
480    interface pour PostgreSQL. Vérifiez la liste des modules de votre
481    langage.
482    
483    Les interfaces ci-dessous sont incluses dans la distribution :
484      * C (libpq)
485      * Embedded C (ecpg)
486      * Java (jdbc)
487      * Python (PyGreSQL)
488      * TCL (libpgtcl)
489        
490    Interfaces supplémentaires disponibles sur http://gborg.postgresql.org
491    dans la section Drivers/Interfaces
492      _________________________________________________________________
493    
494                          Questions Administratives
495                                       
496     3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
497     
498    Il faut spécifier l'option --prefix lors du lancement de configure.
499    
500     3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message
501     core dumped . Pourquoi ?
502     
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
506    sémaphores.
507    
508     3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
509     Pourquoi ?
510     
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
519    sémaphores.
520    
521     3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate.
522     Pourquoi ?
523     
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.
532    
533    Des sémaphores inopérantes peuvent aussi provoquer des plantages
534    pendant de gros accès à la base de données.
535    
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.
540    
541     3.5) Comment contrôler les connexions d'autres machines ?
542     
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.
549    
550     3.6) Comment régler le moteur de la base de données pour de meilleures
551     performances ?
552     
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
555    sont utilisés.
556    
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.
566    
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.
570    
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.
577    
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).
582    
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.
586    
587     3.7) Quelles fonctionalités de déboguage sont disponibles ?
588     
589    PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des
590    informations de statut qui peuvent être utile pour des intentions de
591    déboguage.
592    
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.
596    
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
600    comme :
601     cd /usr/local/pgsql
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
611    volumineux.
612    
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
621    dupliqués.
622    
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.
631    
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.
634    
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
640    meilleure gestion.
641    
642     3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients
643     quand je me connecte ?
644     
645    Vous pouvez augmenter la limite de postmaster sur le nombre de
646    processus serveur concurrents qu'il peut lancer.
647    
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
650    postgresql.conf.
651    
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.
664    
665     3.9) Que contient le répertoire pgsql_tmp ?
666     
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.
672    
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
676    répertoires.
677    
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 ?
680     
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.
690    
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.
695    
696     3.11) Quels matériels dois-je utiliser ?
697     
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      _________________________________________________________________
707    
708                           Questions fonctionnelles
709                                       
710     4.1) Quelle est la différence entre curseur binaire et curseur normal ?
711     
712    Voir la page DECLARE du manuel pour une description.
713    
714     4.2) Comment faire un SELECT seulement sur les premières lignes d'une
715     requête ? Sur une ligne aléatoire ?
716     
717    Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT....
718    
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
724    lignes désirées.
725    
726    Pour faire un SELECT sur une ligne aléatoire :
727     SELECT colonne
728     FROM table
729     ORDER BY random()
730     LIMIT 1;
732     4.3) Comment obtenir une liste des tables ou d'autres objets que je vois
733     dans psql ?
734     
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.
745    
746     4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on
747     son type de données ?
748     
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 :
751     BEGIN;
752     LOCK TABLE ancienne_table;
753     SELECT ...  -- sélectionnez toutes les colonnes sauf celle à supprimer
754     INTO TABLE nouvelle_table
755     FROM ancienne_table;
756     DROP TABLE ancienne_table;
757     ALTER TABLE nouvelle_table RENAME TO ancienne_table;
758     COMMIT;
760    Pour changer le type de données d'une colonne, faites :
761     BEGIN;
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;
765     COMMIT;
767    Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace
768    disque utilisé par les lignes expirées.
769    
770     4.5) Quelle est la taille maximale pour une ligne, une table, une base de
771     données ?
772     
773    Les limites sont :
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.
786    
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.
791    
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 à
794    32 Ko.
795    
796     4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier
797     texte typique ?
798     
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.
801    
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    ----------------------------------------
811     60 octets par ligne
813    La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
815    8192 octets par page
816    ----------------------   = 136 lignes par page de base de données (arrondi à l'entier inférieur)
817      60 octets par ligne
819    100000 lignes de données
820    -------------------------  =  735 pages de base de données (arrondi à l'entier supérieur)
821       128 lignes par page
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.
827    
828    Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très
829    peu d'espace.
830    
831     4.7) Comment puis-je savoir quels index, tables, bases de données et
832     utilisateurs sont définis ?
833     
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.
838    
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.
842    
843     4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ?
844     
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
851    
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.
860    
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
868    ORDER BY et LIMIT :
869     SELECT colonne
870     FROM table
871     ORDER BY colonne [ DESC ]
872     LIMIT 1;
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.
877    
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
881        chaîne, c'est-à-dire
882           + Les modèles pour LIKE ne doivent pas commencer par %.
883           + Les modèles d'expression régulière pour ~ doivent commencer
884             par ^.
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
889        section 4.12.
890      * La locale C par défaut doit être utilisée lors de initdb.
891        
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.
896    
897     4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
898     
899    Voir la page EXPLAIN du manuel.
900    
901     4.10) Qu'est-ce qu'un index R-tree ?
902     
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".
910    
911    L'article de référence qui décrit le système R-tree original est :
912    
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
915    Data, 45-57.
916    
917    Vous pouvez également trouver ce papier dans le livre de Stonebraker
918    "Readings in Database Systems".
919    
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.
925    
926     4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
927     
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.
932    
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 ?
936     
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.
940    
941    Des comparaisons d'égalité non sensibles à la casse sont
942    habituellement exprimées de cette façon :
943     SELECT *
944     FROM table
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 ?
952     
953    Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL.
954    
955     4.14) Quelle sont les différences entre les nombreux types de caractères ?
956     
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.
968    
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.
976    
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
980    1 Go.
981    
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.
988    
989     4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant
990     automatiquement ?
991     
992    PostgreSQL supporte un type de données SERIAL. Il crée automatiquement
993    une séquence. Par exemple, ceci :
994     CREATE TABLE personne (
995         id  SERIAL,
996         nom TEXT
997     );
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'),
1003         nom TEXT
1004     );
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.
1011    
1012     4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
1013     insertion ?
1014     
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
1028    colonne SERIAL.
1029    
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,
1032    c'est-à-dire,
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().
1042    
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 ?
1045     
1046    Non. currval() renvoie la valeur actuelle affectée par votre
1047    processus, et non pas par tous les utilisateurs.
1048    
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) ?
1052     
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.
1057    
1058     4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ?
1059     
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.
1067    
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
1073    accès plus rapide.
1074    
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
1088    produise.
1089    
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
1094    physiques.
1095    
1096     4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
1097     
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)
1107      * portal, curseur
1108      * range variable, table name, table alias
1109        
1110    Une liste des termes généraux pour le domaine des bases de données est
1111    disponible sur :
1112    http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1113    /glossary.html
1114    
1115     4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ?
1116     
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 :
1120     ulimit -d 262144
1121     limit datasize 256m
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.
1129    
1130     4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ?
1131     
1132    A partir de psql, tapez SELECT version();
1133    
1134     4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des
1135     gros objects ?
1136     
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 ...
1139    lo_close.
1140    
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.
1147    
1148    Si vous utilisez une interface client interface comme ODBC, vous aurez
1149    peut-être besoin de lancer auto-commit off.
1150    
1151     4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
1152     actuelle comme valeur ?
1153     
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 ?
1158     
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 :
1165     SELECT *
1166     FROM table
1167     WHERE colonne IN (SELECT souscolonne FROM soustable);
1169    to:
1170     SELECT *
1171     FROM table
1172     WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
1174    Pour que ceci soit rapide, souscolonne doit être une colonne indexée.
1175    
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.
1179    
1180     4.23) Comment puis-je réaliser une jointure externe ?
1181     
1182    PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
1183    standard. Voici deux exemples :
1184     SELECT *
1185     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1187    or
1188     SELECT *
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.
1198    
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
1204     FROM tab1, tab2
1205     WHERE tab1.col1 = tab2.col1
1206     UNION ALL
1207     SELECT tab1.col1, NULL
1208     FROM tab1
1209     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1210     ORDER BY col1
1212     4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
1213     données ?
1214     
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.
1219    
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
1223    côté client.
1224    
1225     4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir d'une
1226     fonction?
1227     
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.
1231    
1232     4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires dans
1233     les fonctions PL/PgSQL de façon stable ?
1234     
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.
1242    
1243     4.27) Quelles options de cryptage sont disponibles ?
1244     
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      _________________________________________________________________
1259    
1260                              Etendre PostgreSQL
1261                                       
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 ?
1264     
1265    Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction
1266    utilisateur dans un programme de test.
1267    
1268     5.2) Comment puis-je ajouter de bons nouveaux types ou fonctions à
1269     PostgreSQL ?
1270     
1271    Envoyez vos extensions à la liste de diffusion pgsql-hackers, elles
1272    atterriront éventuellement dans le sous-répertoire contrib/.
1273    
1274     5.3) Comment faire pour écrire une fonction C qui renvoie un tuple ?
1275     
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 à
1280    contrib/tablefunc.
1281    
1282     5.4) J'ai modifié un fichier source. Pourquoi ma recompilation ne voit-elle
1283     pas les modifications ?
1284     
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
1289    automatiquement.