1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4
<META name="generator" content="HTML Tidy, see www.w3.org">
5
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6
<TITLE>PostgreSQL FAQ</TITLE>
9
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
11
<H1>Foire Aux Questions (FAQ) pour PostgreSQL</H1>
13
<P>Derni�re mise � jour : vendredi 14 novembre 2004 16:32:47</P>
15
<P>Mainteneur actuel : Bruce Momjian (<A href=
16
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
19
<P>La plus r�cente version de ce document est disponible sur <A
21
"http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>
23
<P>Les questions sp�cifiques � la plateforme sont r�pondues sur <A href=
24
"http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
27
<H2 align="center">Questions g�n�rales</H2>
28
<A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment le prononcer ?<BR>
29
<A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL ?<BR>
30
<A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?<BR>
31
<A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?<BR>
32
<A href="#1.5">1.5</A>) O� puis-je me procurer PostgreSQL ?<BR>
33
<A href="#1.6">1.6</A>) O� puis-je obtenir du support ?<BR>
34
<A href="#1.7">1.7</A>) Quelle est la derni�re version ?<BR>
35
<A href="#1.8">1.8</A>) Quelle documentation est disponible ?<BR>
36
<A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit�s manquantes ?<BR>
37
<A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?<BR>
38
<A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?<BR>
39
<A href="#1.12">1.12</A>) Comment puis-je rejoindre l'�quipe de d�veloppement ?<BR>
40
<A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de
42
<A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il � d'autres
43
<SMALL>SGBD</SMALL> ?<BR>
44
<A href="#1.15">1.15</A>) Comment puis-je aider financi�rement PostgreSQL ?<BR>
47
<H2 align="center">Questions sur le client utilisateur</H2>
48
<A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour
50
<A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser
51
PostgreSQL avec des pages Web ?<BR>
52
<A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?<BR>
53
<A href="#2.4">2.4</A>) Quels langages sont disponibles pour
54
communiquer avec PostgreSQL ?<BR>
57
<H2 align="center">Questions administratives</H2>
58
<A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?<BR>
59
<A href="#3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <I>core dumped</I>. Pourquoi ?<BR>
60
<A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?<BR>
61
<A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?<BR>
62
<A href="#3.5">3.5</A>) Comment contr�ler les connexions d'autres machines ?<BR>
63
<A href="#3.6">3.6</A>) Comment r�gler le moteur de la base de donn�es pour de meilleures performances ?<BR>
64
<A href="#3.7">3.7</A>) Quelles fonctionalit�s de d�boguage sont disponibles ?<BR>
65
<A href="#3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?<BR>
66
<A href="#3.9">3.9</A>) Que contient le r�pertoire <I>pgsql_tmp</I> ?<BR>
67
<A href="#3.10">3.10</A>) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL ?<BR>
68
<A href="#3.11">3.11</A>) Quels mat�riels dois-je utiliser ?<BR>
71
<H2 align="center">Questions fonctionnelles</H2>
72
<A href="#4.1">4.1</A>) Quelle est la diff�rence entre curseur binaire
73
et curseur normal ?<BR>
74
<A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
75
sur les premi�res lignes d'une requ�te ? Sur une ligne al�atoire ?<BR>
76
<A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou
77
d'autres choses que je vois dans <I>psql</I> ?<BR>
78
<A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
79
ou comment change-t-on son type de donn�es ?<BR>
80
<A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
81
une table et une base de donn�es ?<BR>
82
<A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
83
les donn�es d'un fichier texte typique ?<BR>
84
<A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables,
85
bases de donn�es et utilisateurs sont d�finis ?<BR>
86
<A href="#4.8">4.8</A>) Mes requ�tes sont lentes ou ne font pas usage
87
des index. Pourquoi ?<BR>
88
<A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur �value
89
mes requ�tes ?<BR>
90
<A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?<BR>
91
<A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur g�n�tique de
93
<A href="#4.12">4.12</A>) Comment puis-je r�aliser des recherches par des
94
expressions rationnelles ainsi que des recherches non sensibles � la
95
casse ? Comment puis-je utiliser un index lors de recherches non
96
sensibles � la casse ?<BR>
97
<A href="#4.13">4.13</A>) Comment puis-je d�tecter si un champ est
98
<SMALL>NULL</SMALL> dans une requ�te ?<BR>
99
<A href="#4.14">4.14</A>) Quelle sont les diff�rences entre les nombreux
100
types de caract�res ?<BR>
101
<A href="#4.15.1">4.15.1</A>) Comment puis-je cr�er un champ s�rie,
102
c'est-�-dire s'incr�mentant automatiquement ?<BR>
103
<A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
104
<SMALL>SERIAL</SMALL> suite � une insertion ?<BR>
105
<A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
106
<I>nextval()</I> n'am�nent pas des probl�mes lorsque plusieurs utilisateurs
107
les lancent en m�me temps ?<BR>
108
<A href="#4.15.4">4.15.4</A>) Pourquoi mes num�ros de s�quences ne sont pas
109
r�-utilis�s lors d'une annulation de transaction ? Pourquoi
110
existe-t'il des trous dans la num�rotation de ma colonne s�quentielle
112
<A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL> ?<BR>
113
<A href="#4.17">4.17</A>) A quoi correspond certains termes utilis�s avec
114
PostgreSQL ?<BR>
115
<A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
116
Memory exhausted in AllocSetAlloc()</I> ?<BR>
117
<A href="#4.19">4.19</A>) Comment puis-je conna�tre la version de
118
PostgreSQL que j'utilise ?<BR>
119
<A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
120
descriptor</I> lors d'op�rations avec des gros objets ?<BR>
121
<A href="#4.21">4.21</A>) Comment puis-je cr�er une colonne qui aura par
122
d�faut l'heure actuelle comme valeur ?<BR>
123
<A href="#4.22">4.22</A>) Pourquoi mes sous-requ�tes utilisant
124
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR>
125
<A href="#4.23">4.23</A>) Comment puis-je r�aliser une jointure
127
<A href="#4.24">4.24</A>) Comment puis-je lancer des requ�tes utilisant
128
plusieurs bases de donn�es ??<BR>
129
<A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
130
colonnes � partir d'une fonction ?<BR>
131
<A href="#4.26">4.26</A>) Pourquoi ne puis-je pas cr�er/supprimer des
132
tables temporaires dans les fonctions PL/PgSQL de fa�on stable ?<BR>
133
<A href="#4.27">4.27</A>) Quelles options de cryptage sont
134
disponibles ?<BR>
136
<H2 align="center">Etendre PostgreSQL</H2>
137
<A href="#5.1">5.1</A>) J'ai �crit une fonction utilisateur. Lorsque je l'ex�cute avec
138
<I>psql</I>, pourquoi cela finit-il avec un "dump core" ?<BR>
139
<A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions
140
pour PostgreSQL ?<BR>
141
<A href="#5.3">5.3</A>) Comment puis-je �crire une fonction C pour r�cup�rer une
143
<A href="#5.4">5.4</A>) J'ai modifi� un fichier source. Pourquoi la modification
144
n'est-elle pas visible apr�s la recompilation ?<BR>
148
<H2 align="center">Questions g�n�rales</H2>
150
<H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment
151
le prononcer ?</H4>
153
<P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est
155
href="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A>
156
pour ceux souhaitant entendre la prononciation.</P>
158
<P>PostgreSQL est une am�lioration du syst�me de gestion de bases
159
de donn�es POSTGRES (et est toujours quelque fois appel� "Postgres"),
160
un prototype de recherche de
161
<SMALL>SGBD</SMALL> de prochaine g�n�ration. PostgreSQL garde le
162
puissant mod�le de donn�es et les types de donn�es riches de
163
POSTGRES, mais remplace le langage de requ�tes PostQuel par un
164
sous-ensemble �tendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit
165
et les sources complets sont disponibles.</P>
167
<P> PostgreSQL est �crit par une �quipe de d�veloppeurs qui sont
168
tous inscrits � la liste de diffusion de d�veloppement de
169
PostgreSQL. Le coordinateur actuel est Marc G. Fournier (<A href=
170
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> et voir
171
la section <a href="#1.6">1.6</a> pour contacter les
172
d�veloppeurs). Cette �quipe est responsable de tout le
173
d�veloppement de PostgreSQL. C'est un projet soutenu par une
174
communaut� sans �tre contr�l� par une soci�t�. Pour y contribuer,
175
voir la FAQ des d�veloppeurs sur <A
176
href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P>
178
<P>Les auteurs de PostgreSQL 1.01 �taient Andrew Yu et Jolly Chen.
179
Beaucoup d'autres personnes ont contribu� au portage, aux tests,
180
au d�boguage et � l'am�lioration du code. Le code de Postgres
181
original, duquel PostgreSQL est d�riv�, �tait le fruit de
182
l'effort de nombreux �tudiants dipl�m�s et non dipl�m�s, et de
183
programmeurs travaillant sous la direction du Professeur Michael
184
Stonebraker � l'universit� de Californie, Berkeley.</P>
186
<P>Le nom original du logiciel � Berkeley �tait Postgres. Quand le
187
<SMALL>SQL</SMALL> fut ajout� en 1995, le nom a d� �tre chang� en
188
Postgres95. Fin 1996, le nom fut chang� en PostgreSQL.</P>
190
<H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL ?</H4>
192
<P>PostgreSQL est distribu� sous la licence suivante :</P>
194
<P>PostgreSQL Data Base Management System</P>
196
<P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
197
Portions Copyright (c) 1994-6 Regents of the University of California</P>
199
<P>Permission to use, copy, modify, and distribute this software
200
and its documentation for any purpose, without fee, and without a
201
written agreement is hereby granted, provided that the above
202
copyright notice and this paragraph and the following two
203
paragraphs appear in all copies.</P>
205
<P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
206
PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
207
DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
208
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
209
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
211
<P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
212
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
213
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
214
SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
215
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
216
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
218
<P>La licence ci-dessus est la licence BSD, une licence open-source
221
<H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?</H4>
223
<P>En g�n�ral, tout environnement compatible Unix moderne devrait
224
pouvoir faire fonctionner PostgreSQL. Les environnements qui ont �t�
225
test�s explicitement sont list�s dans les instructions
228
<H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?</H4>
231
<p>� partir de la version 8.0, PostgreSQL fonctionne nativement sur les
232
syst�mes d'exploitation Microsoft Windows � base NT comme Win2000, WinXP et Win2003.
233
Un installeur est disponible sur
234
<a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>.</p>
236
<p>Il existe aussi un port sur Novell Netware sur
237
<a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
239
<H4><A name="1.5">1.5</A>) O� puis-je me procurer PostgreSQL ?</H4>
241
<P>Le site FTP anonyme principal de PostgreSQL est <A href=
242
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
243
Pour les sites miroirs, voir notre site web principal.</P>
245
<H4><A name="1.6">1.6</A>) O� puis-je obtenir du support ?</H4>
247
<P>La liste de diffusion principale est <A href=
248
"mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
249
Elle est disponible pour discuter de sujets en rapport avec
250
PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec
251
les lignes suivantes dans le corps du message (pas dans la ligne
259
"mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
261
<P>Il existe aussi un recueil de la liste. Pour s'y inscrire,
262
envoyez un courriel � <A href=
263
"mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
264
avec dans le corps :</P>
270
Les recueils sont envoy�s aux membres de cette liste d�s que la
271
liste principale a re�u 30 Ko de messages.
273
<P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
274
envoyer un courriel � <A href=
275
"mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
276
avec dans le corps :</P>
282
Une liste de diffusion pour les d�veloppeurs est aussi disponible. Pour s'y
283
inscrire, envoyez un courriel � <A href=
284
"mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
285
avec dans le corps :
291
<P>Vous pouvez trouver d'autres listes et informations sur
292
PostgreSQL sur le site web de PostgreSQL :</P>
295
<p><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></p>
298
<P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal
299
<I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix
300
<CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou
301
<CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P>
303
<P>Une liste de soci�t�s pouvant fournir un support commercial
304
est disponible sur <A href=
305
"http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
307
<H4><A name="1.7">1.7</A>) Quelle est la derni�re version ?</H4>
309
<P>La derni�re version de PostgreSQL est la version 7.4.5.</P>
311
<P>Nous projetons de sortir une version majeure tous les six � huit
314
<H4><A name="1.8">1.8</A>) Quelle documentation est disponible ?</H4>
316
<P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de
317
test sont inclus dans la distribution. Voir le r�pertoire
318
<I>/doc</I>. Vous pouvez aussi acc�der aux manuels en ligne sur <A href=
319
"http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
321
<P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href=
322
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
324
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
325
Il y a une liste de livres sur PostgreSQL pouvant �tre achet�s sur <A
327
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
328
Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A
330
"http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
332
<P><I>psql</I> poss�de des commandes \d pratiques montrant des
333
informations sur les types, op�rateurs, fonctions, aggr�gats, etc.</P>
335
<P>Notre site web contient encore plus de documentations.</P>
337
<H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit�s manquantes ?</H4>
339
<P>PostgreSQL supporte un sous-ensemble �tendu de <SMALL>SQL</SMALL>-92.
340
Voir notre liste <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
341
pour les bogues connus, les fonctionnalit�s manquantes et les
342
plans pour le futur.</P>
344
<H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?</H4>
346
<P>Le livre PostgreSQL sur <A href=
347
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
348
enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A
350
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
351
Il existe de bons tutoriels sur <A href=
352
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
354
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
355
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A>
357
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
359
<P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition"
360
se trouve sur <A href=
361
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
363
<P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>,
364
Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The
365
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
367
<H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?</H4>
369
<P>Oui, nous manipulons facilement les dates apr�s et avant l'an 2000.</P>
371
<H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'�quipe de d�veloppement ?</H4>
373
<P>Tout d'abord, t�l�chargez les derniers sources et lisez la
374
documentation pour les d�veloppeurs sur notre site web ou bien
375
dans la distribution. Ensuite, inscrivez-vous aux listes de
376
diffusion <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir,
377
soumettez des correctifs de grande qualit� sur <i>pgsql-patches</i>.</P>
379
<P>Environ une douzaine de personnes ont des droits de modification
380
sur l'archive <SMALL>CVS</SMALL> de PostgreSQL. Ils ont chacun
381
soumis tellement de correctifs de qualit� qu'il �tait devenu
382
impossible aux d�veloppeurs de tenir la cadence et nous avions
383
confiance dans le qualit� des correctifs qu'ils soumettaient.</P>
385
<H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de
388
<P>Merci de visiter la page PostgreSQL BugTool sur <A href=
389
"http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
390
qui donne des indications sur la fa�on de soumettre un rapport de bogue.</P>
392
<P>De m�me, v�rifiez notre site ftp <A href=
393
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour
394
voir s'il existe une version PostgreSQL plus r�cente ou des
397
<H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til �
398
d'autres <SMALL>SGBD</SMALL> ?</H4>
400
<P>Il y a plusieurs mani�res de mesurer un logiciel : les fonctionnalit�s,
401
les performances, la fiabilit�, le support, et le prix.</P>
404
<DT><B>Fonctionnalit�s</B></DT>
406
<DD>PostgreSQL poss�de la plupart des fonctionnalit�s pr�sentes
407
dans les <SMALL>SGBD</SMALL> commerciaux, comme les
408
transactions, les requ�tes imbriqu�es, les d�clencheurs,
409
les vues, l'int�grit� r�f�rentielle par cl�s �trang�res, et le
410
verrouillage sophistiqu�. Nous avons des fonctionnalit�s qu'ils
411
n'ont pas, comme les types d�finis par l'utilisateur,
412
l'h�ritage, les r�gles, et le contr�le de concurrence par
413
multi-versionnage pour r�duire les contentions de verrouillage.<BR>
417
<DT><B>Performances</B></DT>
419
<DD>PostgreSQL a des performances similaires aux autres bases de
420
donn�es commerciales et open source. Il est plus rapide pour
421
certaines op�rations, plus lent pour d'autres. Par rapport �
422
MySQL ou d'autres <SMALL>SGBD</small> plus l�ger, nous sommes
423
plus rapides pour de nombreux utilisateurs, des requ�tes complexes et
424
une charge pour les requ�tes de lecture/�criture. MySQL est plus rapide
425
pour des requ�tes SELECT simples effectu�es par quelques utilisateurs.
426
Bien s�r, MySQL ne poss�de aucune des fonctionnalit�s de la section
427
<I>Fonctionnalit�s</I> ci-dessus. PostgreSQL est construit pour la
428
fiabilit� et les fonctionnalit�s et nous continuons � am�liorer les
429
performances � chaque version. Il y a une page web int�ressante
430
qui compare PostgreSQL � MySQL sur <A
431
href="http://openacs.org/philosophy/why-not-mysql.html">
432
http://openacs.org/philosophy/why-not-mysql.html</A>. De plus, MySQL
433
est une soci�t� qui distribue son produit via l'open source et requiert
434
une licence commerciale pour les logiciels propri�taires, donc pas une
435
communaut� de d�veloppement open source comme PostgreSQL.<BR>
440
<DT><B>Fiabilit�</B></DT>
442
<DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit �tre
443
fiable ou bien il est inutile. Nous faisons le maximum pour
444
sortir des versions bien test�es, du code stable ne contenant qu'un
445
minimum de bogues. Chaque version a au moins un mois de tests,
446
et notre historique de versions montre que nous pouvons
447
fournir des versions stables et robustes, pr�tes pour une
448
utilisation en environnement de production. Nous pensons que
449
nous nous comparons favorablement aux autres bases de donn�es
454
<DT><B>Support</B></DT>
456
<DD>Nos listes de diffusion offrent un contact avec un large
457
groupe de d�veloppeurs et d'utilisateurs afin d'aider � la
458
r�solution des probl�mes rencontr�s. Nous ne pouvons garantir
459
un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le
460
garantissent pas toujours non plus. L'acc�s direct aux
461
d�veloppeurs, � la communaut� d'utilisateurs, aux manuels, et
462
au code source, fait du support pour PostgreSQL un support
463
sup�rieur aux autres <SMALL>SGBD</SMALL>. Un support commercial par
464
incident est disponible pour ceux qui en ont le besoin (voir
466
href="#1.6">section 1.6 de la FAQ</A>).<BR>
472
<DD>Nous sommes gratuits pour tous les usages, commerciaux et
473
non commerciaux. Vous pouvez inclure notre code dans vos
474
produits sans limitation, except�es celles cit�es dans notre
475
licence de type BSD donn�e plus haut.<BR>
480
<H4><A name="1.15">1.15</A>) Comment puis-je aider financi�rement
481
PostgreSQL ?</H4>
483
<P>PostgreSQL poss�de une infrastructure de premi�re classe depuis
484
le d�but en 1996. Ceci gr�ce � Marc Fournier, qui a cr�� et g�r�
485
cette infrastructure des ann�es durant.</P>
487
<P>Une infrastructure de qualit� est importante pour un projet
488
open-source. Cela permet d'emp�cher l'�parpillement qui ralentirait
489
beaucoup l'avancement du projet.</P>
491
<P>Bien s�r, cette infrastructure n'est pas donn�e. Elle requiert
492
un certain nombre de d�penses mensuelles ou ponctuelles. Si vous
493
ou votre soci�t� peut donner de l'argent pour soutenir cet effort,
494
merci de consulter la page web <A
495
href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>
496
et de faire une donation.</P>
498
<P>Bien que la page web mentionne PostgreSQL, Inc, les
499
contributions sont exclusivement utilis�es pour soutenir le
500
projet PostgreSQL et ne soutiennent aucune soci�t� que ce soit. Si
501
vous le pr�f�rez, vous pouvez aussi envoyer un ch�que � l'adresse
505
<P>De plus, si vous avez une histoire de succ�s avec PostgreSQL,
506
merci de la soumettre � notre site d'�vang�lisation sur <a
507
href="http://advocacy.postgresql.org">
508
http://advocacy.postgresql.org</a>.</P>
512
<H2 align="center">Questions sur le client utilisateur</H2>
514
<H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour
515
PostgreSQL ?</H4>
517
<P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC
518
et OpenLink <SMALL>ODBC</SMALL>.</P>
520
<P>Vous pouvez t�l�charger PsqlOBDC depuis <A href=
521
"http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
522
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
524
<P>OpenLink <SMALL>ODBC</SMALL> peut �tre obtenu depuis <A href=
525
"http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne
526
avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez
527
donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes
528
client qu'ils supportent (Win, Mac, Unix, VMS).</P>
530
<P>Ils vendront probablement ce produit aux gens qui recherchent
531
une qualit� de support professionnelle mais une version freeware sera
532
toujours disponible. Merci d'envoyer vos questions � <A href=
533
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
535
<H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser
536
PostgreSQL avec des pages Web ?</H4>
538
<P>Une bonne introduction aux pages Web adoss�s � une base de donn�es se
539
trouve � <A href="http://www.webreview.com">http://www.webreview.com</A></P>
541
<P>Pour l'int�gration Web, PHP est une excellente interface. Elle se trouve � <A
542
href="http://www.php.net">http://www.php.net</A>.</P>
544
<P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P>
546
<H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?</H4>
548
<P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL,
549
dont PgAccess <a href="http://www.pgaccess.org">
550
http://www.pgaccess.org</a>), PgAdmin III (<a
551
href="http://www.pgadmin.org">http://www.pgadmin.org</a>),
553
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
554
</a> et Rekall (<a href="http://www.thekompany.com/products/rekall/">
555
http://www.thekompany.com/products/rekall/</a>, propri�taire). Il y a
556
aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
557
http://phppgadmin.sourceforge.net/ </a>), une interface Web pour
560
<P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus d�taill�e.</P>
562
<H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour
563
communiquer avec PostgreSQL ?</H4>
565
<P>La plupart des langages de programmation couramment utilis�s ont
566
une interface pour PostgreSQL. V�rifiez la liste des modules de votre
569
<P>Les interfaces ci-dessous sont incluses dans la distribution :</P>
574
<LI>Embedded C (ecpg)</LI>
578
<LI>Python (PyGreSQL)</LI>
580
<LI>TCL (libpgtcl)</LI>
583
<P>Interfaces suppl�mentaires disponibles sur
584
<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
585
dans la section <I>Drivers/Interfaces</I>
589
<H2 align="center">Questions Administratives</H2>
591
<H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?</H4>
593
<P>Il faut sp�cifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P>
595
<H4><A name="3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <i>core dumped</i> . Pourquoi ?</H4>
597
<P>Cela peut �tre d� � une vari�t� de probl�mes mais v�rifiez d'abord que
598
vous avez les extensions System V install�es pour votre noyau. PostgreSQL
599
n�cessite le support noyau pour la m�moire partag�e et les s�maphores.</P>
601
<H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?</H4>
603
<P>Soit vous n'avez pas configur� correctement la m�moire partag�e dans
604
votre noyau, soit vous devez augmenter la m�moire partag�e disponible dans
605
le noyau. Le montant exact dont vous avez besoin d�pend de votre
606
architecture et du nombre de tampons et de processus que vous avez
607
configur� pour <I>postmaster</I>. Pour la plupart des syst�mes avec un
608
nombre par d�faut de tampons et de processus, vous aurez besoin d'un minimum
609
d'environ 1 Mo. Voir le chapitre <A href=
610
"http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration
611
du manuel PostgreSQL</A> pour des informations plus d�taill�es sur la m�moire partag�e et les s�maphores.</P>
613
<H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?</H4>
615
<P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No
616
space left on device)</I> alors votre noyau n'est pas configur� avec
617
suffisamment de s�maphores. PostgreSQL a besoin d'un s�maphore par processus
618
serveur potentiel. Une solution provisoire est de lancer <I>postmaster</I>
619
avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option
620
<I>-N</I> avec un param�tre inf�rieur au choix par d�faut de 32. Une
621
solution permanente est d'augmenter les param�tres
622
<SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P>
624
<P>Des s�maphores inop�rantes peuvent aussi provoquer des plantages pendant de gros acc�s � la base de donn�es.</P>
626
<P>Si le message d'erreur est autre chose, vous n'avez peut-�tre pas du tout le support des
627
s�maphores dans votre noyau. Voir le
629
"http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration
630
du manuel PostgreSQL</A> pour des informations plus d�taill�es sur la m�moire partag�e et les s�maphores.</P>
632
<H4><A name="3.5">3.5</A>) Comment contr�ler les connexions d'autres machines ?</H4>
634
<p>Par d�faut, PostgreSQL autorise seulement les connexions de la machine
635
locale en utilisant les sockets de domaine Unix ou les connexions TCP/IP.
636
D'autres machines ne seront pas capables de se connecter sauf si vous modifiez
637
listen_addresses dans postgresql.conf et activez une authentification bas�e
638
sur l'h�te en modifiant le fichier <i>$PGDATA/pg_hba.conf</i> en accord.</p>
640
<H4><A name="3.6">3.6</A>) Comment r�gler le moteur de la base de donn�es pour de meilleures performances ?</H4>
642
<P>Des index acc�l�reront les requ�tes. La commande
643
<SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite
644
votre requ�te et quels index sont utilis�s.</P>
646
<P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>),
647
envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci
648
est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxi�ment,
649
les requ�tes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL>
650
sont consid�r�s comme �tant dans leur propre transaction. Envisagez de faire
651
plusieurs instructions dans un seul bloc de transaction. Ceci r�duira la
652
surcharge apport�e par les transactions. Aussi, envisagez d'abandonner et
653
de recr�er des index lors de grosses modifications de donn�es.</P>
655
<P>Il y a plusieurs options d'optimisations. Vous pouvez d�sactiver
656
<I>fsync()</I> en lan�ant <I>postmaster</I> avec l'option <I>-o -F</I>.
657
Ceci emp�chera les <I>fsync()</I>s d'�crire sur disque apr�s toute
660
<P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour
661
augmenter le nombre de tampons de m�moire partag�e utilis�s par les
662
processus serveurs. Si vous fixez ce param�tre trop haut,
663
<I>postmaster</I> ne se lancera pas car vous avez d�pass� la limite de
664
votre noyau sur la quantit� de m�moire partag�e. Chaque tampon fait 8 Ko et
665
le choix par d�faut est de 64 tampons.</P>
667
<P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la
668
quantit� maximale de m�moire utilis�e par les processus serveurs pour des
669
tris temporaires. La valeur de <I>-S</I> est mesur� en kilooctets et le
670
choix par d�faut est de 512 (c'est-�-dire 512 Ko).</P>
672
<P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper
673
vos donn�es en tables pour correspondre � un index. Voir la page de manual
674
<SMALL>CLUSTER</SMALL> pour plus de d�tails.</P>
676
<H4><A name="3.7">3.7</A>) Quelles fonctionalit�s de d�boguage sont disponibles ?</H4>
678
<P>PostgreSQL a plusieurs fonctionalit�s qui permettent de recueillir des
679
informations de statut qui peuvent �tre utile pour des intentions de
682
<P>D'abord, en lan�ant <I>configure</I> avec l'option --enable-cassert,
683
beaucoup d'<I>assert()</I>s surveillent le serveur et arr�tent le programme
684
quand quelque chose d'inattendu arrive.</P>
686
<P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de
687
d�boguage de disponible. D'abord, quand vous lancez <I>postmaster</I>,
688
v�rifiez que vous envoyez les sorties standard et d'erreur dans un fichier
689
de traces comme :</P>
692
./bin/postmaster >server.log 2>&1 &
695
<P>Ceci va cr�er un fichier server.log dans le r�pertoire racine de
696
PostgreSQL. Ce fichier contient des informations utiles sur les probl�mes
697
ou erreurs rencontr�s par le serveur. <I>Postmaster</I> dispose d'une
698
option <I>-d</I> qui permet de rapporter des informations encore plus
699
d�taill�es d'�tre rapport�es. L'option <I>-d</I> prend un num�ro qui
700
sp�cifie le niveau de d�boguage. Faites attention au fait que des valeurs
701
�l�v�es de niveau de d�boguage g�nerent des fichiers de traces volumineux.</P>
703
<P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur
704
<I>postgres</I> de la ligne de commande et taper votre requ�te
705
<SMALL>SQL</SMALL> directement. Ceci est recommand� <B>seulement</B> pour
706
des fonctions de d�boguage. Notez qu'un retour chariot termine la requ�te,
707
pas un point-virgule. Si vous compilez avec les symboles de d�boguage, vous
708
pouvez utiliser un d�bogueur pour voir ce qui se passe. Parce que le serveur
709
n'a pas �t� lanc� par <I>postmaster</I>, il ne tourne pas dans un environnement
710
identique et les probl�mes d'interaction de verrouillage/serveur ne peuvent
713
<P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans
714
une fen�tre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I>
715
utilis� par <I>psql</I>. Utilisez un d�bogueur pour l'attacher au
716
<SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arr�t
717
dans le d�bogueur et envoyez des requ�tes de <I>psql</I>. Si vous d�boguez
718
le d�marrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis
719
lancez <I>psql</I>. Ceci va retarder le d�marrage de <I>n</I> secondes
720
pour que vous puissiez attacher un d�bogueur au processus, fixer des points
721
d'arr�t et continuer la s�quence de d�marrage.</P>
723
<P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I>
724
qui peuvent �tre utile pour des mesures de d�boguage et de performance.</P>
726
<P>Vous pouvez compiler avec les options de performance pour voir quelles
727
fonctions prennent du temps d'ex�cution. Les fichiers de gestion du serveur
728
seront d�pos�s dans le r�pertoire <I>pgsql/data/base/nom_db</I>. Les
729
fichiers de gestion clients seront mis dans le r�pertoire actuel du client.
730
Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une
731
meilleure gestion.</P>
733
<H4><A name="3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?</H4>
735
<P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de
736
processus serveur concurrents qu'il peut lancer.</P>
738
<P>La limite par d�faut est de 32 processus. Vous pouvez l'augmenter en
739
relan�ant <I>postmaster</I> avec une valeur <I>-N</I> appropri�e ou
740
en modifiant <I>postgresql.conf</I>.</P>
742
<P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous
743
devez aussi augmenter <I>-B</I> au-dela de sa valeur par d�faut 64 ;
744
<I>-B</I> doit valoir au moins deux fois <I>-N</I> et probablement plus pour
745
une meilleure performance. Pour de grand nombres de processus serveurs vous
746
aurez probablement aussi augmenter plusieurs parametres de configuration du
747
noyau Unix. Les choses a v�rifier incluent la taille maximale des blocs de
748
m�moire partag�e, <SMALL>SHMMAX</SMALL> ; le nombre maximal de
749
s�maphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> ; le
750
nombre maximal de processus, <SMALL>NPROC</SMALL> ; le nombre maximal
751
de processus par utilisateur, <SMALL>MAXUPRC</SMALL> ; et le nombre
752
maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>.
753
La raison pour laquelle PostgreSQL a une limite sur le nombre de processus
754
serveurs autoris�s est pour que votre syst�me ne tombe pas � court de
757
<H4><A name="3.9">3.9</A>) Que contient le r�pertoire <I>pgsql_tmp</I> ?</H4>
759
<P>Ce r�pertoire contient des fichiers temporaires g�n�r�s par le moteur de
760
requ�te. Par exemple, si un tri doit �tre fait pour satisfaire un
761
<SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le param�tre
762
<I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront cr��s
763
pour contenir les donn�es n�cessaires.</P>
765
<P>Les fichiers temporaires sont d'habitude effac�s automatiquement mais
766
peuvent rester si un serveur s'arr�te brutalement pendant un tri. Un arr�t
767
et un red�marrage de <I>postmaster</I> effacera les fichiers dans ces
770
<H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une
771
sauvegarde des bases et de restaurer pour mettre a jour les versions de
772
PostgreSQL ?</H4>
774
<P>L'�quipe PostgreSQL ne fait que des changements mineurs entre des
775
versions mineurs, donc mettre � jour de 7.2 vers 7.2.1 ne n�cessitera pas
776
de sauvegarde et de restauration. Par contre, les sorties majeures
777
(c'est-�-dire de 7.2 vers 7.3) changent souvent le format interne des tables
778
syst�mes et des fichiers de donn�es. Ces modifications sont souvent
779
complexes alors nous ne gardons pas de compatibilit� descendante pour les
780
fichiers de donn�es. Une sauvegarde exportera les donn�es dans un format
781
g�n�rique qui peut ensuite �tre charg� dans le nouveau format interne.</P>
783
<P>Dans les sorties o� le format sur disque ne change pas, le script
784
<I>pg_upgrade</I> peut �tre utilis� pour mettre � jour sans
785
sauvegarde/restauration. Les notes de sorties pr�cisent si <I>pg_upgrade</I>
786
est disponible pour la sortie.</P>
788
<H4><A name="3.11">3.11</A>) Quels mat�riels dois-je utiliser ?</H4>
790
<P>Comme le mat�riel PC est compatible en grosse partie, les gens ont
791
tendance � croire que tous les mat�riels PC sont de m�me qualit�. Ce n'est
792
pas le cas. La RAM ECC, le SCSI et les cartes-m�re de qualit� sont plus
793
fiables et ont de meilleurs performances qu'un mat�riel moins co�teux.
794
PostgreSQL fonctionnera sur � peu pr�s tout mat�riel mais si la fiabilit� et
795
la performance sont importantes pour vous, il est rus� de bien consid�rer
796
les options mat�rielles. Nos listes de diffusion peuvent �tre utilis�es pour
797
discuter des options mat�riels.</P>
801
<H2 align="center">Questions fonctionnelles</H2>
803
<H4><A name="4.1">4.1</A>) Quelle est la diff�rence entre curseur binaire
804
et curseur normal ?</H4>
806
<P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P>
808
<H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
809
sur les premi�res lignes d'une requ�te ? Sur une ligne al�atoire ?</H4>
811
<P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser
812
<SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
814
<P>Il se peut que l'int�gralit� de la requ�te doive �tre �valu�e,
815
m�me si vous voulez seulement les premi�res lignes. Envisagez
816
d'utiliser une requ�te avec une clause <SMALL>ORDER
817
BY</SMALL>. S'il existe un index correspondant � l'<SMALL>ORDER
818
BY</SMALL>, PostgreSQL peut n'�valuer que les premi�res lignes, sinon
819
l'int�gralit� de la requ�te peut �tre �valu�e, jusqu'� g�n�rer les lignes
822
<P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne al�atoire :</P>
830
<H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou
831
d'autres objets que je vois dans <I>psql</I> ?</H4>
833
<P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour
834
une liste compl�te de commandes � l'int�rieur de psql, vous pouvez utiliser
835
\?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier
836
<I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes
837
<SMALL>SQL</SMALL> qui g�n�rent le contenu des commandes anti-slash de
838
psql. Vous pouvez aussi lancer <I>psql</I> avec l'option
839
<I>-E</I>, afin qu'il imprime les requ�tes qu'il utilise pour ex�cuter
840
les commandes que vous lui passez. PostgreSQL fournit aussi une interface
841
d'informations sur le sch�ma compatible avec <I>SQLi</I> que vous pouvez
842
interroger des informations sur la base de donn�es.</P>
844
<H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
845
ou comment change-t-on son type de donn�es ?</H4>
847
<P>La fonction <SMALL>DROP COLUMN</SMALL> a �t� ajout�e dans la version 7.3
848
avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions pr�c�dentes,
849
vous pouvez faire :</P>
852
LOCK TABLE ancienne_table;
853
SELECT ... -- s�lectionnez toutes les colonnes sauf celle � supprimer
854
INTO TABLE nouvelle_table
856
DROP TABLE ancienne_table;
857
ALTER TABLE nouvelle_table RENAME TO ancienne_table;
861
<P>Pour changer le type de donn�es d'une colonne, faites :</P>
865
ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>;
866
UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>);
867
ALTER TABLE table DROP COLUMN ancienne_colonne;
871
<P>Apr�s, vous pouvez faire <I>VACUUM FULL tab</I> pour r�cup�rer l'espace
872
disque utilis� par les lignes expir�es.</P>
874
<H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
875
une table, une base de donn�es ?</H4>
877
<P>Les limites sont :</P>
879
Taille maximum pour une base de donn�es illimit�e (il existe des bases de 32 To)
880
Taille maximum pour une table 32 To
881
Taille maximum pour une ligne 1,6 To
882
Taille maximum pour un champ 1 Go
883
Nombre maximum de lignes dans une table illimit�
884
Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
885
Nombre maximum d'index sur une table illimit�
888
<P>Bien s�r, ces valeurs ne sont pas vraiment illimit�e, elles sont limit�es
889
par l'espace disque disponible, ainsi que par l'espace de m�moire et de swap.
890
Les performances peuvent se d�grader si ces valeurs sont inhabituellement
893
<P>La taille maximum des tables (32 To) ne n�cessite pas que le syst�me
894
d'exploitation supporte les grands fichiers. Les grandes tables sont stock�es
895
sous forme de fichiers multiples de 1 Go, donc les limites de taille du
896
syst�me de fichier ne sont pas importantes.</P>
898
<P>La taille maximum des tables et le nombre maximum de colonnes peuvent
899
�tre quadripl�s, si la taille des blocs par d�faut est augment�e � 32 Ko.</P>
901
<H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
902
les donn�es d'un fichier texte typique ?</H4>
904
<P>Une base de donn�es PostgreSQL peut utiliser jusqu'� cinq fois
905
l'espace n�cessaire pour stocker les donn�es d'un fichier texte.</P>
907
<P>A titre d'exemple, consid�rez un fichier de 100 000 lignes, comportant
908
un entier et une cha�ne de description sur chaque ligne. Supposons que la
909
cha�ne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo.
910
La taille du fichier d'une base de donn�es PostgreSQL peut �tre
911
estim�e � 6,4 Mo :</P>
913
32 octets: chaque ligne (approximation)
914
24 octets: un champ 'entier' et un champ 'texte'
915
+ 4 octets: pointeur vers le tuple sur la page
916
----------------------------------------
919
La taille des pages de donn�es dans PostgreSQL est de 8192 octets (8 KO), donc :
922
---------------------- = 136 lignes par page de base de donn�es (arrondi � l'entier inf�rieur)
925
100000 lignes de donn�es
926
------------------------- = 735 pages de base de donn�es (arrondi � l'entier sup�rieur)
929
735 pages de base de donn�es * 8192 octets par page = 6 021 120 octets (6,4 Mo)
932
<P>Les index utilisent moins d'espace, mais ils contiennent les donn�es index�es,
933
ils peuvent donc �galement �tre grands.</P>
935
<P>Les <SMALL>NULL</SMALL> sont stock�s sous forme de bitmap, aussi
936
utilisent-ils tr�s peu d'espace.</P>
938
<H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables,
939
bases de donn�es et utilisateurs sont d�finis ?</H4>
941
<P><I>psql</I> dispose de plusieurs commandes commen�ant par un anti-slash
942
pour retrouver ces informations. Utilisez \? pour les conna�tre. Il existe
943
aussi des tables syst�mes, qui commencent par <I>pg_</I> et qui les
944
d�crivent �galement. Aussi, <I>psql -l</I> liste toutes les bases de
947
<P>Essayez �galement le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il
948
illustre un grand nombre de commandes <SMALL>SELECT</SMALL> n�cessaires pour
949
r�cup�rer l'information des tables syst�me de la base de donn�es.</P>
951
<H4><A name="4.8">4.8</A>) Mes requ�tes sont lentes ou ne font pas usage
952
des index. Pourquoi ?</H4>
954
<P>Les index ne sont pas automatiquement utilis�s par chaque requ�te. Ils
955
sont utilis�s uniquement si la table est plus grande qu'une certaine taille,
956
et si la requ�te s�lectionne seulement un faible pourcentage des lignes de la
957
table. Ceci est d� au fait qu'un acc�s disque al�atoire caus� par un parcours
958
d'index peut �tre plus lent qu'une simple lecture de la table, ou parcours
961
<P>Pour d�terminer si un index devrait �tre utilis�, PostgreSQL a besoin
962
des statistiques de la table. Ces statistiques sont collect�es en lan�ant
963
<SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>.
964
Avec les statistiques, l'optimiseur sait combien de lignes se trouvent
965
dans la table et peut mieux d�terminer s'il faut utiliser l'index.
966
Les statistiques sont �galement utiles pour d�terminer l'ordre optimal
967
des op�rations de jointure. La collecte des statistiques devrait �tre
968
effectu�e r�guli�rement lorsque le contenu de la table change.</P>
970
<P>Les index ne sont normalement pas utilis�s pour les clauses <SMALL>ORDER BY</SMALL>
971
ou pour les jointures. Un parcours s�quentiel suivi d'un tri explicite est
972
habituellement plus rapide qu'un parcours d'index pour une table importante.
973
Toutefois, <SMALL>LIMIT</SMALL> combin� avec <SMALL>ORDER BY</SMALL>
974
utilisera souvent un index parce que seulement une petite partie de la table est
975
renvoy�e. En fait, bien que MAX() et MIN() n'utilisent pas les index,
976
il est possible de retrouver ces valeurs en utilisant un index avec
977
ORDER BY et LIMIT :</P>
982
ORDER BY colonne [ DESC ]
986
<P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel,
987
utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et
988
lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P>
990
<P>Lorsque vous utilisez des caract�res joker tels que <SMALL>LIKE</SMALL> ou
991
<I>~</I>, les index peuvent seulement �tre utilis�s dans certaines circonstances :</P>
993
<LI>Le d�but de la cha�ne de recherche doit �tre ancr� au d�part de la cha�ne, c'est-�-dire
995
<LI>Les mod�les pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI>
996
<LI>Les mod�les d'expression r�guli�re pour <I>~</I> doivent commencer par
999
<LI>La cha�ne de recherche ne peut pas commencer par une classe de caract�res, c'est-�-dire
1001
<LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et
1002
<I>~*</I> n'utilisent pas les index. Utilisez plut�t les index fonctionnels,
1003
d�crit dans la section <a href="#4.12">4.12</a>.</LI>
1004
<LI>La locale <I>C</I> par d�faut doit �tre utilis�e lors de
1008
<p>Dans les versions ant�rieures � la 8.0, les indexs ne peuvent souvent
1009
pas �tre utilis�s sauf si les types de donn�es correspondent exactement au
1010
type de la colonne de l'index. Ceci est particuli�rement vrai pour les
1011
index de colonnes de type int2, int8 et numeric.</p>
1013
<H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur �value
1014
mes requ�tes ?</H4>
1016
<P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P>
1018
<H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?</H4>
1020
<P>Un index R-tree est utilis� pour l'indexation des donn�es spatiales. Un
1021
index de hachage ne permet pas les recherches par plage. Un index B-tree peut
1022
seulement faire des recherches sur une dimension. Les index R-tree
1023
peuvent traiter des donn�es multi-dimensionnelles. Par exemple, si un index
1024
R-tree peut �tre construit sur un attribut de type <I>point</I>,
1025
le syst�me peut plus efficacement g�rer les requ�tes du type
1026
"S�lection de tous les points d'un rectangle".</P>
1028
<P>L'article de r�f�rence qui d�crit le syst�me R-tree original est :</P>
1030
<P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
1031
Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
1034
<P>Vous pouvez �galement trouver ce papier dans le livre de Stonebraker
1035
"Readings in Database Systems".</P>
1037
<P>Les index R-tree int�gr�s peuvent prendre en charge les polyg�nes et les bo�tes.
1038
En th�orie, les R-trees peuvent �tre �tendus � un plus grand nombre de dimensions.
1039
En pratique, l'extension des R-trees requiert pas mal de travail et nous
1040
n'avons pour le moment aucune documentation sur la fa�on de proc�der.</P>
1042
<H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur g�n�tique de
1043
requ�tes ?</H4>
1045
<P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query
1046
Optimizer</i>) acc�l�re l'optimisation des requ�tes lors de jointures de
1047
nombreuses tables par un algorithme g�n�tique (GA). Il permet la
1048
gestion des grosses requ�tes de jointures en utilisant une recherche non
1051
<H4><A name="4.12">4.12</A>) Comment puis-je r�aliser des recherches sur des
1052
expressions rationnelles ainsi que des recherches non sensibles � la
1053
casse ? Comment puis-je utiliser un index lors de recherches non
1054
sensibles � la casse ?</H4>
1056
<P>L'op�rateur <I>~</I> r�alise des recherches d'expressions rationnelles
1057
et <I>~*</I> le fait sans tenir compte de la casse. La variante de
1058
<SMALL>LIKE</SMALL> non sensible � la casse est
1059
<SMALL>ILIKE</SMALL>.</P>
1061
<P>Des comparaisons d'�galit� non sensibles � la casse sont habituellement
1062
exprim�es de cette fa�on :</P>
1066
WHERE lower(colonne) = 'abc';
1069
<P>Ceci n'utilisera pas un index standard. N�anmoins, si vous cr�ez un index
1070
fonctionnel, celui-ci sera utilis� :</P>
1072
CREATE INDEX tableindex ON table (lower(colonne));
1075
<H4><A name="4.13">4.13</A>) Comment puis-je d�tecter si un champ est
1076
<SMALL>NULL</SMALL> dans une requ�te ?</H4>
1078
<P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS
1079
NOT NULL</SMALL>.</P>
1081
<H4><A name="4.14">4.14</A>) Quelle sont les diff�rences entre les nombreux
1082
types de caract�res ?</H4>
1084
Type Nom interne Notes
1085
--------------------------------------------------
1086
VARCHAR(n) varchar n sp�cifie la taille maximum, sans remplissage
1087
CHAR(n) bpchar des espaces sont ajout�s pour obtenir la
1088
longueur fixe sp�cifi�e
1089
TEXT text pas de limite sup�rieure pour la taille
1090
BYTEA bytea tableau d'octets (accepte les octets nuls)
1091
"char" char un caract�re
1094
<P>Vous verrez le nom interne en examinant les catalogues syst�me et dans
1095
quelques messages d'erreur.</P>
1097
<P>Les quatres premiers types du dessus sont des types "varlena"
1098
(c'est-�-dire que les quatre premiers octets correspondent � la taille,
1099
suivi des donn�es). Donc, l'espace r�ellement utilis� est l�g�rement plus
1100
grand que la taille d�clar�e. N�anmoins, ces types de donn�es sont aussi
1101
sujet � la compression ou � un enregistrement en dehors de la table avec
1102
<SMALL>TOAST</SMALL>, donc l'espace occup� sur disque pourrait aussi �tre
1103
moindre que ce qu'on pourrait attendre.</P>
1105
<P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des cha�nes de
1106
longueurs variables tout en limitant la taille de cette cha�ne.
1107
<SMALL>TEXT</SMALL> est utile pour les cha�nes de longueur illimit�e, avec
1108
malgr� tout un maximum de 1 Go.</P>
1110
<P><SMALL>CHAR(n)</SMALL> est int�ressant pour stocker des cha�nes de taille
1111
identique. <SMALL>CHAR(n)</SMALL> compl�te avec des espaces pour arriver �
1112
la taille sp�cifi�e alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les
1113
caract�res donn�s. <SMALL>BYTEA</SMALL> sert � stocker des donn�es binaires,
1114
particuli�rement les donn�es incluant des octets <SMALL>NULL</SMALL>. Tous
1115
les types d�crits ici ont des performances similaires.</P>
1117
<H4><A name="4.15.1">4.15.1</A>) Comment puis-je cr�er un champ s�rie,
1118
c'est-�-dire s'incr�mentant automatiquement ?</H4>
1120
<P>PostgreSQL supporte un type de donn�es <SMALL>SERIAL</SMALL>. Il cr�e
1121
automatiquement une s�quence. Par exemple,
1124
CREATE TABLE personne (
1130
est automatiquement traduit en ceci :
1132
CREATE SEQUENCE personne_id_seq;
1133
CREATE TABLE personne (
1134
id INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
1139
Voir la page man de <I>create_sequence</I> pour plus d'informations
1140
sur les s�quences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque
1141
ligne comme valeur unique. N�anmoins, si vous avez besoin de sauvegarder
1142
puis recharger la base de donn�es, vous devrez utiliser l'option
1143
<I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de
1144
<I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s.
1146
<H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
1147
<SMALL>SERIAL</SMALL> suite � une insertion ?</H4>
1149
<P>Une approche pour r�cup�rer la prochaine valeur <SMALL>SERIAL</SMALL> �
1150
partir de l'objet s�quence est d'utiliser la fonction <I>nextval()</I>
1151
<I>avant</I> l'insertion et de l'ins�rer ensuite explicitement. En utilisant
1152
la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple
1153
dans un pseudo-langage ressemblerait � ceci :</P>
1155
nouvelle_id = execute("SELECT nextval('personne_id_seq')");
1156
execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
1159
Vous pourriez ensuite utiliser la nouvelle valeur stock�e dans
1160
<CODE>nouvelle_id</CODE> avec d'autres requ�tes (c'est-�-dire en tant que
1161
cl� �trang�re de la table <CODE>personne</CODE>). Notez que le nom de la
1162
<SMALL>SEQUENCE</SMALL> automatiquement cr��e sera
1163
<<I>table</I>>_<<I>colonneserial</I>>_<I>seq</I>, o�
1164
<I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table
1165
et de votre colonne <SMALL>SERIAL</SMALL>.
1167
<P>Autrement, vous pouvez r�cup�rer la valeur <SMALL>SERIAL</SMALL> affect�e
1168
avec la fonction <I>currval()</I> <I>apr�s</I> qu'elle ait �t� ins�r�e par
1169
d�faut, c'est-�-dire,</P>
1171
execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
1172
nouvelle_id = execute("SELECT currval('personne_id_seq')");
1175
Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoy�
1176
par l'instruction <SMALL>INSERT</SMALL> pour r�cup�rer la valeur par d�faut
1177
bien que cela soit l'appoche la moins portable et la valeur de l'OID se
1178
r�initialisera aux environs de quatre milliards. En Perl, avec DBI et le
1179
module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via
1180
<I>$sth->{pg_oid_status}</I> apr�s un <I>$sth->execute()</I>.
1182
<H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
1183
<I>nextval()</I> n'am�nent pas des probl�mes lorsque plusieurs utilisateurs
1184
les lancent en m�me temps ?</H4>
1186
<P>Non. <I>currval()</I> renvoie la valeur actuelle affect�e par votre
1187
processus, et non pas par tous les utilisateurs.</P>
1189
<H4><A name="4.15.4">4.15.4</A>) Pourquoi mes num�ros de s�quences ne sont pas
1190
r�-utilis�s lors d'une annulation de transaction ? Pourquoi
1191
existe-t'il des trous dans la num�rotation de ma colonne s�quentielle
1192
(SERIAL) ?</H4>
1194
<P>Pour am�liorer les acc�s concurrents, les valeurs de s�quences sont
1195
donn�es aux transactions qui en ont besoin et ne sont pas bloqu�es jusqu'�
1196
la fin de la transaction. Ceci cr�e des trous dans le num�rotage pour les
1197
transactions annul�es.</P>
1199
<H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL> ?
1200
Qu'est-ce qu'un <SMALL>TID</SMALL> ?</H4>
1202
<P>Les <SMALL>OID</SMALL> sont la r�ponse de PostgreSQL aux identifiants de
1203
lignes uniques. Chaque ligne cr��e dans PostgreSQL obtient un
1204
<SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> g�n�r�s pendant
1205
<I>initdb</I> sont inf�rieurs � 16384 (voir <I>include/access/transam.h</I>).
1206
Tous les <SMALL>OID</SMALL> cr��s par un utilisateur sont sup�rieurs ou
1207
�gaux � ceci. Par d�faut, tous ces <SMALL>OID</SMALL> sont uniques non
1208
seulement dans une table ou une base mais unique � l'int�rieur d'une
1209
installation PostgreSQL enti�re.</P>
1211
<P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables syst�me interne
1212
pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent �tre
1213
utilis�s pour identifier des lignes utilisateurs sp�cifiques et utilis�s dans
1214
des jointures. Il est recommand� que vous utilisiez le type de colonne
1215
<SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>.
1216
Vous pouvez cr�er un index sur le champ <SMALL>OID</SMALL> pour un acc�s
1219
<P>Les <SMALL>OID</SMALL> sont attribu�s pour toute ligne d'un endroit
1220
central qui est utilis� par toutes les bases de donn�es. Si vous voulez
1221
changer l'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez
1222
faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il
1223
n'y a pas de raisons pour ne pas le faire :</P>
1225
CREATE TABLE nouvelle_table (macolonne int);
1226
SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
1227
COPY table_temporaire FROM '/tmp/tablepg';
1228
COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
1229
DROP TABLE table_temporaire;
1232
<P>Les <SMALL>OID</SMALL> sont stock�s en tant qu'entiers de quatre octets
1233
et d�borderont � quatre milliards. Personne n'a jamais rapport� un tel cas
1234
et nous avons pr�vu de retirer la limite avant que cela ne se produise.</P>
1236
<P>Les <SMALL>TID</SMALL>s sont utilis�s pour identifier des lignes
1237
physiques sp�cifiques avec des valeurs de bloc et d�calage. Les
1238
<SMALL>TID</SMALL> changent apr�s que les lignes aient �t� modifi�s ou
1239
recharg�s. Ils sont utilis�s par des entr�es d'index pour pointer vers des
1240
lignes physiques.</P>
1242
<H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilis�s avec
1243
PostgreSQL ?</H4>
1245
<P>Une partie du code source et de l'ancienne documentation utilisent des
1246
termes dont l'usage est plus commun. Voici quelques exemples :</P>
1249
<LI>table, relation, classe</LI>
1250
<LI>ligne (row), enregistrement (record), tuple</LI>
1251
<LI>colonne (column), champ (field), attribut</LI>
1252
<LI>r�cup�re, s�lectionne (select)</LI>
1253
<LI>remplace (replace), met � jour (update)</LI>
1254
<LI>ajoute (append), ins�re (insert)</LI>
1255
<LI><SMALL>OID</SMALL>, valeur s�quentielle (serial value)</LI>
1256
<LI>portal, curseur</LI>
1257
<LI>range variable, table name, table alias</LI>
1260
<P>Une liste des termes g�n�raux pour le domaine des bases de donn�es est
1261
disponible sur : <A href=
1262
"http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
1264
<H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
1265
Memory exhausted in AllocSetAlloc()</I> ?</H4>
1267
<P>Vous manquez probablement de m�moire virtuelle sur votre syst�me ou votre
1268
noyau a une limite assez basse pour certaines ressources. Essayez ceci avant
1269
de lancer <I>postmaster</I> :</P>
1275
Suivant votre shell, seul un d'eux pourrait r�ussir mais cela configurera
1276
d'une fa�on plus importante la taille du segment de donn�es de votre
1277
processus. Cette commande s'applique au processus actuel et � tous les
1278
processus lanc� par celui-ci. Si vous avez des probl�mes avec le client
1279
<SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de donn�es,
1280
essayez �a avant de lancer le client.
1282
<H4><A name="4.19">4.19</A>) Comment puis-je conna�tre la version de
1283
PostgreSQL que j'utilise ?</H4>
1285
<P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P>
1287
<H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
1288
descriptor</I> lors d'op�rations sur des gros objects ?</H4>
1290
<P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE>
1291
autour de chaque utilisateur de gros objets, c'est-�-dire pour entourer
1292
<CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
1294
<P>Actuellement, PostgreSQL force cette r�gle en fermant les gros objets
1295
lors de la transaction. Donc, le premier essai d'op�rations sur ces objets,
1296
fonctionnant habituellement (au moins la plupart du temps) aura un
1297
<I>invalid large obj descriptor</I>. Donc le code, auparavant fonctionnel
1298
(au moins la plupart du temps), g�n�rera maintenant un message d'erreur si
1299
vous n'utilisez pas de transaction.</P>
1301
<P>Si vous utilisez une interface client interface comme
1302
<SMALL>ODBC</SMALL>, vous aurez peut-�tre besoin de lancer
1303
<CODE>auto-commit off.</CODE></P>
1305
<H4><A name="4.21">4.21</A>) Comment puis-je cr�er une colonne qui aura par
1306
d�faut l'heure actuelle comme valeur ?</H4>
1308
<P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P>
1310
<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
1314
<H4><A name="4.22">4.22</A>) Pourquoi mes sous-requ�tes utilisant
1315
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4>
1317
<P>Dans les versions pr�c�dant la 7.4, les sous-requ�tes ont �t� jointes avec
1318
des jointures externes en parcourant s�quentiellement le r�sultat de la
1319
sous-requ�te pour chaque ligne de la requ�te externe. Si la sous-requ�te
1320
renvoit quelques lignes et que la requ�te externe en renvoit plein,
1321
<CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour acc�l�rer les autres
1322
requ�tes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE> :</P>
1325
WHERE colonne IN (SELECT souscolonne FROM soustable);
1330
WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
1333
Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit �tre une colonne
1336
<P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les m�mes
1337
techniques sophistiqu�es de jointures comme des requ�tes normales et est
1338
pr�f�r� � l'utilisation de <CODE>EXISTS</CODE>.</P>
1340
<H4><A name="4.23">4.23</A>) Comment puis-je r�aliser une jointure
1343
<P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
1344
standard. Voici deux exemples :</P>
1347
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1352
FROM t1 LEFT OUTER JOIN t2 USING (col);
1355
<P>Ces requ�tes identiques joignent t1.col � t2.col et renvoient toute
1356
colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure
1357
droite (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2.
1358
Une jointure compl�te (<SMALL>FULL join</SMALL>) renverra les lignes
1359
correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot cl�
1360
<SMALL>OUTER</SMALL> est optionnelle et assum� dans le cas de jointure
1361
<SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les
1362
jointures ordinaires sont appel�es des jointures <SMALL>INNER</SMALL>.</P>
1364
<P>Lors des pr�c�dentes versions, les jointures externes peuvent �tre
1365
simul�es en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par
1366
exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requ�te
1367
suivante r�alise une jointure externe, <I>outer</I>, des deux tables :<BR>
1371
SELECT tab1.col1, tab2.col2
1373
WHERE tab1.col1 = tab2.col1
1375
SELECT tab1.col1, NULL
1377
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1381
<H4><A name="4.24">4.24</A>) Comment puis-je lancer des requ�tes utilisant
1382
plusieurs bases de donn�es ?</H4>
1384
<P>Il n'existe pas de moyens de lancer des requ�tes sur une autre base que
1385
la courante. Comme PostgreSQL charge des catalogues syst�mes sp�cifiques �
1386
la base de donn�es, sa r�action aux requ�tes inter-base de donn�es est
1389
<P><I>contrib/dblink</I> permet les requ�tes entre bases de donn�es en
1390
utilisant des fonctions. Bien s�r un client peut r�aliser des connexions
1391
simultan�es � plusieurs bases de donn�es et joindre les r�sultats du c�t�
1394
<H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
1395
colonnes � partir d'une fonction?</H4>
1397
<P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou
1398
colonnes � partir d'une fonction,
1399
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
1400
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
1402
<H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas cr�er/supprimer des
1403
tables temporaires dans les fonctions PL/PgSQL de fa�on stable ?</H4>
1404
<P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est
1405
que si une fonction PL/PgSQL acc�de � une table temporaire, que cette table
1406
est ensuite supprim�e et recr��e, et que la fonction est appel�e de nouveau,
1407
la fonction �chouera car le contenu de la fonction cach�e pointera toujours
1408
vers l'ancienne table temporaire. La solution revient � utiliser
1409
<SMALL>EXECUTE</SMALL> pour l'acc�s aux tables temporaires avec PL/PgSQL.
1410
Ceci obligera l'analyse de la requ�te � chaque fois.</P>
1412
<H4><A name="4.27">4.27</A>) Quelles options de cryptage sont
1416
<LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, �
1417
utiliser dans des requ�tes <SMALL>SQL</SMALL>.</LI>
1418
<LI>Pour crypter une transmission entre le client et le serveur, le serveur
1419
doit avoir positionn� l'option <I>ssl</I> � <I>true</I> dans <I>postgresql.conf,
1420
</I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit
1421
exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas
1422
�tre <I>d�sactiv�e</I>. Notez qu'il est aussi possible d'utiliser un
1423
transport crypt� d'une troisi�me partie, tel que stunnel ou ssh, plut�t que
1424
les connexions SSL natives de PostgreSQL.</LI>
1425
<LI>Les mots de passe des utilisateurs sont automatiquement crypt�s depuis
1426
la version 7.3. Pour les versions pr�c�dentes, vous devez activer l'option
1427
<I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI>
1428
<LI>Le serveur peut fonctionner avec un syst�me de fichiers crypt�s.</LI>
1433
<H2 align="center">Etendre PostgreSQL</H2>
1435
<H4><A name="5.1">5.1</A>) J'ai �crit une fonction utilisateur. Lorsque je l'ex�cute avec
1436
<I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I> ?</H4>
1438
<P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur
1439
dans un programme de test.</P>
1441
<H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux
1442
types ou fonctions � PostgreSQL ?</H4>
1444
<P>Envoyez vos extensions � la liste de diffusion <I>pgsql-hackers</I>,
1445
elles atterriront �ventuellement dans le sous-r�pertoire <I>contrib/</I>.</P>
1447
<H4><A name="5.3">5.3</A>) Comment faire pour �crire une fonction C
1448
qui renvoie un tuple ?</H4>
1450
<P>Dans les versions de PostgreSQL � partir de 7.3, les fonctions qui
1451
renvoient une table sont totalement support�es en C, PL/PgSQL, et SQL. Voir
1452
le Guide du Programmeur pour plus d'information. Un exemple de fonction
1453
renvoyant une table d�finie en C se trouve �
1454
<I>contrib/tablefunc</I>.</P>
1456
<H4><A name="5.4">5.4</A>) J'ai modifi� un fichier source. Pourquoi
1457
ma recompilation ne voit-elle pas les modifications ?</H4>
1459
<P>Les <I>Makefiles</I> n'ont pas les d�pendances ad�quates pour les
1460
fichiers d'en-t�te. Il vous faut faire <I>make clean</I> puis un autre
1461
<I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser
1462
l'option <I>--enable-depend</I> de <I>configure</I> pour que le
1463
compilateur calcule les d�pendances automatiquement.</P>