~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-proposed

« back to all changes in this revision

Viewing changes to doc/FAQ_french

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-06 14:11:13 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090906141113-qf5f3hkw7n036jfy
Tags: 8.4.1-1
* Urgency medium due to security fix.
* New upstream security/bug fix release:
  - Disallow "RESET ROLE" and "RESET SESSION AUTHORIZATION" inside
    security-definer functions. This covers a case that was missed in the
    previous patch that disallowed "SET ROLE" and "SET SESSION
    AUTHORIZATION" inside security-definer functions. [CVE-2007-6600]
  - Fix WAL page header initialization at the end of archive recovery.
    This could lead to failure to process the WAL in a subsequent archive
    recovery.
  - Fix "cannot make new WAL entries during recovery" error.
  - Fix problem that could make expired rows visible after a crash.
    This bug involved a page status bit potentially not being set
    correctly after a server crash.
  - Make "LOAD" of an already-loaded loadable module into a no-op.
    Formerly, "LOAD" would attempt to unload and re-load the module,
    but this is unsafe and not all that useful.
  - Make window function PARTITION BY and ORDER BY items always be
    interpreted as simple expressions.
    In 8.4.0 these lists were parsed following the rules used for
    top-level GROUP BY and ORDER BY lists. But this was not correct per
    the SQL standard, and it led to possible circularity.
  - Fix several errors in planning of semi-joins. These led to wrong query
    results in some cases where IN or EXISTS was used together with another
    join.
  - Fix handling of whole-row references to subqueries that are within
    an outer join. An example is SELECT COUNT(ss.-) FROM ... LEFT JOIN
    (SELECT ...) ss ON .... Here, ss.- would be treated as
    ROW(NULL,NULL,...) for null-extended join rows, which is not the same as
    a simple NULL.  Now it is treated as a simple NULL.
  - Fix locale handling with plperl. This bug could cause the server's
    locale setting to change when a plperl function is called, leading to
    data corruption.
  - Fix handling of reloptions to ensure setting one option doesn't
    force default values for others.
  - Ensure that a "fast shutdown" request will forcibly terminate open
    sessions, even if a "smart shutdown" was already in progress.
  - Avoid memory leak for array_agg() in GROUP BY queries.
  - Treat to_char(..., 'TH') as an uppercase ordinal suffix with
    'HH'/'HH12'.  It was previously handled as 'th'.
  - Include the fractional part in the result of EXTRACT(second) and
    EXTRACT(milliseconds) for time and time with time zone inputs.
    This has always worked for floating-point datetime configurations,
    but was broken in the integer datetime code.
  - Fix overflow for INTERVAL 'x ms' when "x" is more than 2 million
    and integer datetimes are in use.
  - Improve performance when processing toasted values in index scans.
    This is particularly useful for PostGIS.
  - Fix a typo that disabled commit_delay.
  - Output early-startup messages to "postmaster.log" if the server is
    started in silent mode. Previously such error messages were discarded,
    leading to difficulty in debugging.
  - Remove translated FAQs. They are now on the wiki. The main FAQ was moved
    to the wiki some time ago.
  - Fix pg_ctl to not go into an infinite loop if "postgresql.conf" is
    empty.
  - Fix several errors in pg_dump's --binary-upgrade mode. pg_dump
    --binary-upgrade is used by pg_migrator.
  - Fix "contrib/xml2"'s xslt_process() to properly handle the maximum
    number of parameters (twenty).
  - Improve robustness of libpq's code to recover from errors during
    "COPY FROM STDIN".
  - Avoid including conflicting readline and editline header files when
    both libraries are installed.
  - Work around gcc bug that causes "floating-point exception" instead
    of "division by zero" on some platforms.
* debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
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-2009, 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
230
 
 
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
238
 
 
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
247
 
 
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
253
 
 
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 &
603
 
 
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;
731
 
 
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;
759
 
 
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;
766
 
 
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�
781
 
 
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
812
 
 
813
 
   La taille des pages de donn�es dans PostgreSQL est de 8192 octets (8 KO), donc :
814
 
 
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
818
 
 
819
 
   100000 lignes de donn�es
820
 
   -------------------------  =  735 pages de base de donn�es (arrondi � l'entier sup�rieur)
821
 
      128 lignes par page
822
 
 
823
 
735 pages de base de donn�es * 8192 octets par page  =  6 021 120 octets (6,4 Mo)
824
 
 
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;
873
 
 
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';
946
 
 
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));
950
 
 
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
965
 
 
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
 
    );
998
 
 
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
 
    );
1005
 
 
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')");
1022
 
 
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')");
1035
 
 
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;
1084
 
 
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
1122
 
 
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 );
1156
 
 
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);
1168
 
 
1169
 
   to:
1170
 
    SELECT *
1171
 
    FROM table
1172
 
    WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
1173
 
 
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);
1186
 
 
1187
 
   or
1188
 
    SELECT *
1189
 
    FROM t1 LEFT OUTER JOIN t2 USING (col);
1190
 
 
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
1211
 
 
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.