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