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>