postgres/doc/src/FAQ/FAQ_french.html

1467 lines
71 KiB
HTML
Raw Normal View History

2004-07-15 15:25:25 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META name="generator" content="HTML Tidy, see www.w3.org">
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>PostgreSQL FAQ</TITLE>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
alink="#0000ff">
<H1>Foire Aux Questions (FAQ) pour PostgreSQL</H1>
2004-12-01 22:17:16 +00:00
<P>Derni<EFBFBD>re mise <20> jour&nbsp;: vendredi 14 novembre 2004 16:32:47</P>
2004-07-15 15:25:25 +00:00
<P>Mainteneur actuel&nbsp;: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
</P>
<P>La plus r<>cente version de ce document est disponible sur <A
href=
"http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>
<P>Les questions sp<73>cifiques <20> la plateforme sont r<>pondues sur <A href=
"http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
<HR>
<H2 align="center">Questions g<>n<EFBFBD>rales</H2>
<A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL&nbsp;? Comment le prononcer&nbsp;?<BR>
<A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL&nbsp;?<BR>
<A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il&nbsp;?<BR>
<A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il&nbsp;?<BR>
<A href="#1.5">1.5</A>) O<> puis-je me procurer PostgreSQL&nbsp;?<BR>
<A href="#1.6">1.6</A>) O<> puis-je obtenir du support&nbsp;?<BR>
<A href="#1.7">1.7</A>) Quelle est la derni<6E>re version&nbsp;?<BR>
<A href="#1.8">1.8</A>) Quelle documentation est disponible&nbsp;?<BR>
<A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit<69>s manquantes&nbsp;?<BR>
<A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL>&nbsp;?<BR>
<A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000&nbsp;?<BR>
<A href="#1.12">1.12</A>) Comment puis-je rejoindre l'<27>quipe de d<>veloppement&nbsp;?<BR>
<A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de
bogue&nbsp;?<BR>
<A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il <20> d'autres
<SMALL>SGBD</SMALL>&nbsp;?<BR>
<A href="#1.15">1.15</A>) Comment puis-je aider financi<63>rement PostgreSQL&nbsp;?<BR>
<H2 align="center">Questions sur le client utilisateur</H2>
<A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour
PostgreSQL&nbsp;?<BR>
<A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser
PostgreSQL avec des pages Web&nbsp;?<BR>
<A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique&nbsp;?<BR>
<A href="#2.4">2.4</A>) Quels langages sont disponibles pour
communiquer avec PostgreSQL&nbsp;?<BR>
<H2 align="center">Questions administratives</H2>
<A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I>&nbsp;?<BR>
<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&nbsp;?<BR>
<A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi&nbsp;?<BR>
<A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi&nbsp;?<BR>
<A href="#3.5">3.5</A>) Comment contr<74>ler les connexions d'autres machines&nbsp;?<BR>
<A href="#3.6">3.6</A>) Comment r<>gler le moteur de la base de donn<6E>es pour de meilleures performances&nbsp;?<BR>
<A href="#3.7">3.7</A>) Quelles fonctionalit<69>s de d<>boguage sont disponibles&nbsp;?<BR>
<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&nbsp;?<BR>
<A href="#3.9">3.9</A>) Que contient le r<>pertoire <I>pgsql_tmp</I>&nbsp;?<BR>
<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&nbsp;?<BR>
<A href="#3.11">3.11</A>) Quels mat<61>riels dois-je utiliser&nbsp;?<BR>
<H2 align="center">Questions fonctionnelles</H2>
<A href="#4.1">4.1</A>) Quelle est la diff<66>rence entre curseur binaire
et curseur normal&nbsp;?<BR>
<A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
sur les premi<6D>res lignes d'une requ<71>te&nbsp;? Sur une ligne al<61>atoire&nbsp;?<BR>
<A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou
d'autres choses que je vois dans <I>psql</I>&nbsp;?<BR>
<A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
ou comment change-t-on son type de donn<6E>es&nbsp;?<BR>
<A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
une table et une base de donn<6E>es&nbsp;?<BR>
<A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
les donn<6E>es d'un fichier texte typique&nbsp;?<BR>
<A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables,
bases de donn<6E>es et utilisateurs sont d<>finis&nbsp;?<BR>
<A href="#4.8">4.8</A>) Mes requ<71>tes sont lentes ou ne font pas usage
des index. Pourquoi&nbsp;?<BR>
<A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur <20>value
mes requ<71>tes&nbsp;?<BR>
<A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree&nbsp;?<BR>
<A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur g<>n<EFBFBD>tique de
requ<71>tes&nbsp;?<BR>
<A href="#4.12">4.12</A>) Comment puis-je r<>aliser des recherches par des
expressions rationnelles ainsi que des recherches non sensibles <20> la
casse&nbsp;? Comment puis-je utiliser un index lors de recherches non
sensibles <20> la casse&nbsp;?<BR>
<A href="#4.13">4.13</A>) Comment puis-je d<>tecter si un champ est
<SMALL>NULL</SMALL> dans une requ<71>te&nbsp;?<BR>
<A href="#4.14">4.14</A>) Quelle sont les diff<66>rences entre les nombreux
types de caract<63>res&nbsp;?<BR>
<A href="#4.15.1">4.15.1</A>) Comment puis-je cr<63>er un champ s<>rie,
c'est-<2D>-dire s'incr<63>mentant automatiquement&nbsp;?<BR>
<A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
<SMALL>SERIAL</SMALL> suite <20> une insertion&nbsp;?<BR>
<A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
<I>nextval()</I> n'am<61>nent pas des probl<62>mes lorsque plusieurs utilisateurs
les lancent en m<>me temps&nbsp;?<BR>
<A href="#4.15.4">4.15.4</A>) Pourquoi mes num<75>ros de s<>quences ne sont pas
r<>-utilis<69>s lors d'une annulation de transaction&nbsp;? Pourquoi
existe-t'il des trous dans la num<75>rotation de ma colonne s<>quentielle
(SERIAL)&nbsp;?<BR>
<A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL>&nbsp;?<BR>
<A href="#4.17">4.17</A>) A quoi correspond certains termes utilis<69>s avec
PostgreSQL&nbsp;?<BR>
<A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
Memory exhausted in AllocSetAlloc()</I>&nbsp;?<BR>
<A href="#4.19">4.19</A>) Comment puis-je conna<6E>tre la version de
PostgreSQL que j'utilise&nbsp;?<BR>
<A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
descriptor</I> lors d'op<6F>rations avec des gros objets&nbsp;?<BR>
<A href="#4.21">4.21</A>) Comment puis-je cr<63>er une colonne qui aura par
d<>faut l'heure actuelle comme valeur&nbsp;?<BR>
<A href="#4.22">4.22</A>) Pourquoi mes sous-requ<71>tes utilisant
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes&nbsp;?<BR>
<A href="#4.23">4.23</A>) Comment puis-je r<>aliser une jointure
externe&nbsp;?<BR>
<A href="#4.24">4.24</A>) Comment puis-je lancer des requ<71>tes utilisant
plusieurs bases de donn<6E>es&nbsp;??<BR>
<A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
colonnes <20> partir d'une fonction&nbsp;?<BR>
2004-12-01 22:17:16 +00:00
<A href="#4.26">4.26</A>) Pourquoi ne puis-je pas cr<63>er/supprimer des
tables temporaires dans les fonctions PL/PgSQL de fa<66>on stable&nbsp;?<BR>
<A href="#4.27">4.27</A>) Quelles options de cryptage sont
2004-07-15 15:25:25 +00:00
disponibles&nbsp;?<BR>
<H2 align="center">Etendre PostgreSQL</H2>
<A href="#5.1">5.1</A>) J'ai <20>crit une fonction utilisateur. Lorsque je l'ex<65>cute avec
<I>psql</I>, pourquoi cela finit-il avec un "dump core"&nbsp;?<BR>
<A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions
pour PostgreSQL&nbsp;?<BR>
<A href="#5.3">5.3</A>) Comment puis-je <20>crire une fonction C pour r<>cup<75>rer une
ligne&nbsp;?<BR>
<A href="#5.4">5.4</A>) J'ai modifi<66> un fichier source. Pourquoi la modification
n'est-elle pas visible apr<70>s la recompilation&nbsp;?<BR>
<HR>
<H2 align="center">Questions g<>n<EFBFBD>rales</H2>
<H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL&nbsp;? Comment
le prononcer&nbsp;?</H4>
<P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est
disponible sur <A
href="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A>
2004-07-15 15:25:25 +00:00
pour ceux souhaitant entendre la prononciation.</P>
<P>PostgreSQL est une am<61>lioration du syst<73>me de gestion de bases
de donn<6E>es POSTGRES (et est toujours quelque fois appel<65> "Postgres"),
un prototype de recherche de
<SMALL>SGBD</SMALL> de prochaine g<>n<EFBFBD>ration. PostgreSQL garde le
puissant mod<6F>le de donn<6E>es et les types de donn<6E>es riches de
POSTGRES, mais remplace le langage de requ<71>tes PostQuel par un
sous-ensemble <20>tendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit
et les sources complets sont disponibles.</P>
<P> PostgreSQL est <20>crit par une <20>quipe de d<>veloppeurs qui sont
tous inscrits <20> la liste de diffusion de d<>veloppement de
PostgreSQL. Le coordinateur actuel est Marc G. Fournier (<A href=
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> et voir
la section <a href="#1.6">1.6</a> pour contacter les
d<>veloppeurs). Cette <20>quipe est responsable de tout le
d<>veloppement de PostgreSQL. C'est un projet soutenu par une
communaut<75> sans <20>tre contr<74>l<EFBFBD> par une soci<63>t<EFBFBD>. Pour y contribuer,
voir la FAQ des d<>veloppeurs sur <A
href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P>
2004-07-15 15:25:25 +00:00
<P>Les auteurs de PostgreSQL 1.01 <20>taient Andrew Yu et Jolly Chen.
Beaucoup d'autres personnes ont contribu<62> au portage, aux tests,
au d<>boguage et <20> l'am<61>lioration du code. Le code de Postgres
original, duquel PostgreSQL est d<>riv<69>, <20>tait le fruit de
l'effort de nombreux <20>tudiants dipl<70>m<EFBFBD>s et non dipl<70>m<EFBFBD>s, et de
programmeurs travaillant sous la direction du Professeur Michael
Stonebraker <20> l'universit<69> de Californie, Berkeley.</P>
<P>Le nom original du logiciel <20> Berkeley <20>tait Postgres. Quand le
<SMALL>SQL</SMALL> fut ajout<75> en 1995, le nom a d<> <20>tre chang<6E> en
Postgres95. Fin 1996, le nom fut chang<6E> en PostgreSQL.</P>
<H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL&nbsp;?</H4>
<P>PostgreSQL est distribu<62> sous la licence suivante&nbsp;:</P>
<P>PostgreSQL Data Base Management System</P>
<P>Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California</P>
2004-07-15 15:25:25 +00:00
<P>Permission to use, copy, modify, and distribute this software
and its documentation for any purpose, without fee, and without a
written agreement is hereby granted, provided that the above
copyright notice and this paragraph and the following two
paragraphs appear in all copies.</P>
<P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
<P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
<P>La licence ci-dessus est la licence BSD, une licence open-source
classique.</P>
<H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il&nbsp;?</H4>
<P>En g<>n<EFBFBD>ral, tout environnement compatible Unix moderne devrait
pouvoir faire fonctionner PostgreSQL. Les environnements qui ont <20>t<EFBFBD>
test<73>s explicitement sont list<73>s dans les instructions
d'installation.</P>
<H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il&nbsp;?</H4>
2004-12-01 22:17:16 +00:00
<p><EFBFBD> partir de la version 8.0, PostgreSQL fonctionne nativement sur les
syst<73>mes d'exploitation Microsoft Windows <20> base NT comme Win2000, WinXP et Win2003.
Un installeur est disponible sur
<a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>.</p>
2004-07-15 15:25:25 +00:00
<p>Il existe aussi un port sur Novell Netware sur
<a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
<H4><A name="1.5">1.5</A>) O<> puis-je me procurer PostgreSQL&nbsp;?</H4>
<P>Le site FTP anonyme principal de PostgreSQL est <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
Pour les sites miroirs, voir notre site web principal.</P>
<H4><A name="1.6">1.6</A>) O<> puis-je obtenir du support&nbsp;?</H4>
<P>La liste de diffusion principale est <A href=
"mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
Elle est disponible pour discuter de sujets en rapport avec
PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec
les lignes suivantes dans le corps du message (pas dans la ligne
du sujet)&nbsp;:</P>
<PRE>
subscribe
end
</PRE>
<P><EFBFBD> <A href=
"mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
<P>Il existe aussi un recueil de la liste. Pour s'y inscrire,
envoyez un courriel <20> <A href=
"mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
avec dans le corps&nbsp;:</P>
<PRE>
subscribe
end
</PRE>
Les recueils sont envoy<6F>s aux membres de cette liste d<>s que la
liste principale a re<72>u 30&nbsp;Ko de messages.
<P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
envoyer un courriel <20> <A href=
"mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
avec dans le corps&nbsp;:</P>
<PRE>
subscribe
end
</PRE>
Une liste de diffusion pour les d<>veloppeurs est aussi disponible. Pour s'y
inscrire, envoyez un courriel <20> <A href=
"mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
avec dans le corps&nbsp;:
<PRE>
subscribe
end
</PRE>
<P>Vous pouvez trouver d'autres listes et informations sur
PostgreSQL sur le site web de PostgreSQL&nbsp;:</P>
<BLOCKQUOTE>
<p><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></p>
2004-07-15 15:25:25 +00:00
</BLOCKQUOTE>
<P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal
<I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix
<CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou
<CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P>
<P>Une liste de soci<63>t<EFBFBD>s pouvant fournir un support commercial
est disponible sur <A href=
"http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
<H4><A name="1.7">1.7</A>) Quelle est la derni<6E>re version&nbsp;?</H4>
2004-12-01 22:17:16 +00:00
<P>La derni<6E>re version de PostgreSQL est la version 7.4.5.</P>
2004-07-15 15:25:25 +00:00
<P>Nous projetons de sortir une version majeure tous les six <20> huit
mois.</P>
<H4><A name="1.8">1.8</A>) Quelle documentation est disponible&nbsp;?</H4>
<P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de
test sont inclus dans la distribution. Voir le r<>pertoire
<I>/doc</I>. Vous pouvez aussi acc<63>der aux manuels en ligne sur <A href=
"http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
<P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href=
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
et <A href=
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
Il y a une liste de livres sur PostgreSQL pouvant <20>tre achet<65>s sur <A
href=
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A
href=
"http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
<P><I>psql</I> poss<73>de des commandes \d pratiques montrant des
informations sur les types, op<6F>rateurs, fonctions, aggr<67>gats, etc.</P>
<P>Notre site web contient encore plus de documentations.</P>
<H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit<69>s manquantes&nbsp;?</H4>
<P>PostgreSQL supporte un sous-ensemble <20>tendu de <SMALL>SQL</SMALL>-92.
2005-05-11 16:13:20 +00:00
Voir notre liste <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
2004-07-15 15:25:25 +00:00
pour les bogues connus, les fonctionnalit<69>s manquantes et les
plans pour le futur.</P>
<H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL>&nbsp;?</H4>
<P>Le livre PostgreSQL sur <A href=
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A
href=
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
Il existe de bons tutoriels sur <A href=
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
<A href=
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A>
et <A href=
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
<P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition"
se trouve sur <A href=
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
<P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>,
Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
<H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000&nbsp;?</H4>
<P>Oui, nous manipulons facilement les dates apr<70>s et avant l'an 2000.</P>
<H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'<27>quipe de d<>veloppement&nbsp;?</H4>
<P>Tout d'abord, t<>l<EFBFBD>chargez les derniers sources et lisez la
documentation pour les d<>veloppeurs sur notre site web ou bien
dans la distribution. Ensuite, inscrivez-vous aux listes de
diffusion <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir,
soumettez des correctifs de grande qualit<69> sur <i>pgsql-patches</i>.</P>
<P>Environ une douzaine de personnes ont des droits de modification
sur l'archive <SMALL>CVS</SMALL> de PostgreSQL. Ils ont chacun
soumis tellement de correctifs de qualit<69> qu'il <20>tait devenu
impossible aux d<>veloppeurs de tenir la cadence et nous avions
confiance dans le qualit<69> des correctifs qu'ils soumettaient.</P>
<H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de
bogue&nbsp;?</H4>
<P>Merci de visiter la page PostgreSQL BugTool sur <A href=
"http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
qui donne des indications sur la fa<66>on de soumettre un rapport de bogue.</P>
<P>De m<>me, v<>rifiez notre site ftp <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour
voir s'il existe une version PostgreSQL plus r<>cente ou des
correctifs.</P>
<H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til <20>
d'autres <SMALL>SGBD</SMALL>&nbsp;?</H4>
<P>Il y a plusieurs mani<6E>res de mesurer un logiciel&nbsp;: les fonctionnalit<69>s,
les performances, la fiabilit<69>, le support, et le prix.</P>
<DL>
<DT><B>Fonctionnalit<EFBFBD>s</B></DT>
<DD>PostgreSQL poss<73>de la plupart des fonctionnalit<69>s pr<70>sentes
dans les <SMALL>SGBD</SMALL> commerciaux, comme les
transactions, les requ<71>tes imbriqu<71>es, les d<>clencheurs,
les vues, l'int<6E>grit<69> r<>f<EFBFBD>rentielle par cl<63>s <20>trang<6E>res, et le
verrouillage sophistiqu<71>. Nous avons des fonctionnalit<69>s qu'ils
n'ont pas, comme les types d<>finis par l'utilisateur,
l'h<>ritage, les r<>gles, et le contr<74>le de concurrence par
multi-versionnage pour r<>duire les contentions de verrouillage.<BR>
<BR>
</DD>
<DT><B>Performances</B></DT>
<DD>PostgreSQL a des performances similaires aux autres bases de
donn<6E>es commerciales et open source. Il est plus rapide pour
certaines op<6F>rations, plus lent pour d'autres. Par rapport <20>
MySQL ou d'autres <SMALL>SGBD</small> plus l<>ger, nous sommes
plus rapides pour de nombreux utilisateurs, des requ<71>tes complexes et
une charge pour les requ<71>tes de lecture/<2F>criture. MySQL est plus rapide
pour des requ<71>tes SELECT simples effectu<74>es par quelques utilisateurs.
Bien s<>r, MySQL ne poss<73>de aucune des fonctionnalit<69>s de la section
<I>Fonctionnalit<EFBFBD>s</I> ci-dessus. PostgreSQL est construit pour la
fiabilit<69> et les fonctionnalit<69>s et nous continuons <20> am<61>liorer les
performances <20> chaque version. Il y a une page web int<6E>ressante
qui compare PostgreSQL <20> MySQL sur <A
href="http://openacs.org/philosophy/why-not-mysql.html">
http://openacs.org/philosophy/why-not-mysql.html</A>. De plus, MySQL
est une soci<63>t<EFBFBD> qui distribue son produit via l'open source et requiert
une licence commerciale pour les logiciels propri<72>taires, donc pas une
communaut<75> de d<>veloppement open source comme PostgreSQL.<BR>
<BR>
</DD>
<DT><B>Fiabilit<EFBFBD></B></DT>
<DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit <20>tre
fiable ou bien il est inutile. Nous faisons le maximum pour
sortir des versions bien test<73>es, du code stable ne contenant qu'un
minimum de bogues. Chaque version a au moins un mois de tests,
et notre historique de versions montre que nous pouvons
fournir des versions stables et robustes, pr<70>tes pour une
utilisation en environnement de production. Nous pensons que
nous nous comparons favorablement aux autres bases de donn<6E>es
dans ce domaine.<BR>
<BR>
</DD>
<DT><B>Support</B></DT>
<DD>Nos listes de diffusion offrent un contact avec un large
groupe de d<>veloppeurs et d'utilisateurs afin d'aider <20> la
r<>solution des probl<62>mes rencontr<74>s. Nous ne pouvons garantir
un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le
garantissent pas toujours non plus. L'acc<63>s direct aux
d<>veloppeurs, <20> la communaut<75> d'utilisateurs, aux manuels, et
au code source, fait du support pour PostgreSQL un support
sup<75>rieur aux autres <SMALL>SGBD</SMALL>. Un support commercial par
incident est disponible pour ceux qui en ont le besoin (voir
la <A
href="#1.6">section 1.6 de la FAQ</A>).<BR>
<BR>
</DD>
<DT><B>Prix</B></DT>
<DD>Nous sommes gratuits pour tous les usages, commerciaux et
non commerciaux. Vous pouvez inclure notre code dans vos
produits sans limitation, except<70>es celles cit<69>es dans notre
licence de type BSD donn<6E>e plus haut.<BR>
<BR>
</DD>
</DL>
<H4><A name="1.15">1.15</A>) Comment puis-je aider financi<63>rement
PostgreSQL&nbsp;?</H4>
<P>PostgreSQL poss<73>de une infrastructure de premi<6D>re classe depuis
le d<>but en 1996. Ceci gr<67>ce <20> Marc Fournier, qui a cr<63><72> et g<>r<EFBFBD>
cette infrastructure des ann<6E>es durant.</P>
<P>Une infrastructure de qualit<69> est importante pour un projet
open-source. Cela permet d'emp<6D>cher l'<27>parpillement qui ralentirait
beaucoup l'avancement du projet.</P>
<P>Bien s<>r, cette infrastructure n'est pas donn<6E>e. Elle requiert
un certain nombre de d<>penses mensuelles ou ponctuelles. Si vous
ou votre soci<63>t<EFBFBD> peut donner de l'argent pour soutenir cet effort,
merci de consulter la page web <A
href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>
et de faire une donation.</P>
<P>Bien que la page web mentionne PostgreSQL, Inc, les
contributions sont exclusivement utilis<69>es pour soutenir le
projet PostgreSQL et ne soutiennent aucune soci<63>t<EFBFBD> que ce soit. Si
vous le pr<70>f<EFBFBD>rez, vous pouvez aussi envoyer un ch<63>que <20> l'adresse
de contact.</P>
<HR>
<P>De plus, si vous avez une histoire de succ<63>s avec PostgreSQL,
merci de la soumettre <20> notre site d'<27>vang<6E>lisation sur <a
href="http://advocacy.postgresql.org">
http://advocacy.postgresql.org</a>.</P>
<H2 align="center">Questions sur le client utilisateur</H2>
<H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour
PostgreSQL&nbsp;?</H4>
<P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC
et OpenLink <SMALL>ODBC</SMALL>.</P>
<P>Vous pouvez t<>l<EFBFBD>charger PsqlOBDC depuis <A href=
"http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
<P>OpenLink <SMALL>ODBC</SMALL> peut <20>tre obtenu depuis <A href=
"http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne
avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez
donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes
client qu'ils supportent (Win, Mac, Unix, VMS).</P>
<P>Ils vendront probablement ce produit aux gens qui recherchent
une qualit<69> de support professionnelle mais une version freeware sera
toujours disponible. Merci d'envoyer vos questions <20> <A href=
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
<H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser
PostgreSQL avec des pages Web&nbsp;?</H4>
<P>Une bonne introduction aux pages Web adoss<73>s <20> une base de donn<6E>es se
trouve <20> <A href="http://www.webreview.com">http://www.webreview.com</A></P>
<P>Pour l'int<6E>gration Web, PHP est une excellente interface. Elle se trouve <20> <A
href="http://www.php.net">http://www.php.net</A>.</P>
<P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P>
<H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique&nbsp;?</H4>
<P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL,
dont PgAccess <a href="http://www.pgaccess.org">
http://www.pgaccess.org</a>), PgAdmin III (<a
href="http://www.pgadmin.org">http://www.pgadmin.org</a>),
RHDB Admin (<a
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
</a> et Rekall (<a href="http://www.thekompany.com/products/rekall/">
http://www.thekompany.com/products/rekall/</a>, propri<72>taire). Il y a
aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/ </a>), une interface Web pour
PostgreSQL.</P>
<P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus d<>taill<6C>e.</P>
<H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour
communiquer avec PostgreSQL&nbsp;?</H4>
<P>La plupart des langages de programmation couramment utilis<69>s ont
une interface pour PostgreSQL. V<>rifiez la liste des modules de votre
langage.</P>
<P>Les interfaces ci-dessous sont incluses dans la distribution&nbsp;:</P>
<UL>
<LI>C (libpq)</LI>
<LI>Embedded C (ecpg)</LI>
<LI>Java (jdbc)</LI>
<LI>Python (PyGreSQL)</LI>
<LI>TCL (libpgtcl)</LI>
</UL>
<P>Interfaces suppl<70>mentaires disponibles sur
<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
dans la section <I>Drivers/Interfaces</I>
</P>
<HR>
<H2 align="center">Questions Administratives</H2>
<H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I>&nbsp;?</H4>
<P>Il faut sp<73>cifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P>
<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&nbsp;?</H4>
<P>Cela peut <20>tre d<> <20> une vari<72>t<EFBFBD> de probl<62>mes mais v<>rifiez d'abord que
vous avez les extensions System V install<6C>es pour votre noyau. PostgreSQL
n<>cessite le support noyau pour la m<>moire partag<61>e et les s<>maphores.</P>
<H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi&nbsp;?</H4>
<P>Soit vous n'avez pas configur<75> correctement la m<>moire partag<61>e dans
votre noyau, soit vous devez augmenter la m<>moire partag<61>e disponible dans
le noyau. Le montant exact dont vous avez besoin d<>pend de votre
architecture et du nombre de tampons et de processus que vous avez
configur<75> pour <I>postmaster</I>. Pour la plupart des syst<73>mes avec un
nombre par d<>faut de tampons et de processus, vous aurez besoin d'un minimum
d'environ 1&nbsp;Mo. Voir le chapitre <A href=
"http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">Administration
du manuel PostgreSQL</A> pour des informations plus d<>taill<6C>es sur la m<>moire partag<61>e et les s<>maphores.</P>
<H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi&nbsp;?</H4>
<P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No
space left on device)</I> alors votre noyau n'est pas configur<75> avec
suffisamment de s<>maphores. PostgreSQL a besoin d'un s<>maphore par processus
serveur potentiel. Une solution provisoire est de lancer <I>postmaster</I>
avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option
<I>-N</I> avec un param<61>tre inf<6E>rieur au choix par d<>faut de 32. Une
solution permanente est d'augmenter les param<61>tres
<SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P>
<P>Des s<>maphores inop<6F>rantes peuvent aussi provoquer des plantages pendant de gros acc<63>s <20> la base de donn<6E>es.</P>
<P>Si le message d'erreur est autre chose, vous n'avez peut-<2D>tre pas du tout le support des
s<>maphores dans votre noyau. Voir le
chapitre <A href=
"http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">Administration
du manuel PostgreSQL</A> pour des informations plus d<>taill<6C>es sur la m<>moire partag<61>e et les s<>maphores.</P>
<H4><A name="3.5">3.5</A>) Comment contr<74>ler les connexions d'autres machines&nbsp;?</H4>
2004-12-01 22:17:16 +00:00
<p>Par d<>faut, PostgreSQL autorise seulement les connexions de la machine
locale en utilisant les sockets de domaine Unix ou les connexions TCP/IP.
D'autres machines ne seront pas capables de se connecter sauf si vous modifiez
listen_addresses dans postgresql.conf et activez une authentification bas<61>e
sur l'h<>te en modifiant le fichier <i>$PGDATA/pg_hba.conf</i> en accord.</p>
2004-07-15 15:25:25 +00:00
<H4><A name="3.6">3.6</A>) Comment r<>gler le moteur de la base de donn<6E>es pour de meilleures performances&nbsp;?</H4>
<P>Des index acc<63>l<EFBFBD>reront les requ<71>tes. La commande
<SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite
votre requ<71>te et quels index sont utilis<69>s.</P>
<P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>),
envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci
est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxi<78>ment,
les requ<71>tes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL>
sont consid<69>r<EFBFBD>s comme <20>tant dans leur propre transaction. Envisagez de faire
plusieurs instructions dans un seul bloc de transaction. Ceci r<>duira la
surcharge apport<72>e par les transactions. Aussi, envisagez d'abandonner et
de recr<63>er des index lors de grosses modifications de donn<6E>es.</P>
<P>Il y a plusieurs options d'optimisations. Vous pouvez d<>sactiver
<I>fsync()</I> en lan<61>ant <I>postmaster</I> avec l'option <I>-o -F</I>.
Ceci emp<6D>chera les <I>fsync()</I>s d'<27>crire sur disque apr<70>s toute
transaction.</P>
<P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour
augmenter le nombre de tampons de m<>moire partag<61>e utilis<69>s par les
processus serveurs. Si vous fixez ce param<61>tre trop haut,
<I>postmaster</I> ne se lancera pas car vous avez d<>pass<73> la limite de
votre noyau sur la quantit<69> de m<>moire partag<61>e. Chaque tampon fait 8&nbsp;Ko et
le choix par d<>faut est de 64 tampons.</P>
<P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la
quantit<69> maximale de m<>moire utilis<69>e par les processus serveurs pour des
tris temporaires. La valeur de <I>-S</I> est mesur<75> en kilooctets et le
choix par d<>faut est de 512 (c'est-<2D>-dire 512&nbsp;Ko).</P>
<P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper
vos donn<6E>es en tables pour correspondre <20> un index. Voir la page de manual
<SMALL>CLUSTER</SMALL> pour plus de d<>tails.</P>
<H4><A name="3.7">3.7</A>) Quelles fonctionalit<69>s de d<>boguage sont disponibles&nbsp;?</H4>
<P>PostgreSQL a plusieurs fonctionalit<69>s qui permettent de recueillir des
informations de statut qui peuvent <20>tre utile pour des intentions de
d<>boguage.</P>
<P>D'abord, en lan<61>ant <I>configure</I> avec l'option --enable-cassert,
beaucoup d'<I>assert()</I>s surveillent le serveur et arr<72>tent le programme
quand quelque chose d'inattendu arrive.</P>
<P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de
d<>boguage de disponible. D'abord, quand vous lancez <I>postmaster</I>,
v<>rifiez que vous envoyez les sorties standard et d'erreur dans un fichier
de traces comme&nbsp;:</P>
<PRE>
cd /usr/local/pgsql
./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
</PRE>
<P>Ceci va cr<63>er un fichier server.log dans le r<>pertoire racine de
PostgreSQL. Ce fichier contient des informations utiles sur les probl<62>mes
ou erreurs rencontr<74>s par le serveur. <I>Postmaster</I> dispose d'une
option <I>-d</I> qui permet de rapporter des informations encore plus
d<>taill<6C>es d'<27>tre rapport<72>es. L'option <I>-d</I> prend un num<75>ro qui
sp<73>cifie le niveau de d<>boguage. Faites attention au fait que des valeurs
<20>l<EFBFBD>v<EFBFBD>es de niveau de d<>boguage g<>nerent des fichiers de traces volumineux.</P>
<P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur
<I>postgres</I> de la ligne de commande et taper votre requ<71>te
<SMALL>SQL</SMALL> directement. Ceci est recommand<6E> <B>seulement</B> pour
des fonctions de d<>boguage. Notez qu'un retour chariot termine la requ<71>te,
pas un point-virgule. Si vous compilez avec les symboles de d<>boguage, vous
pouvez utiliser un d<>bogueur pour voir ce qui se passe. Parce que le serveur
n'a pas <20>t<EFBFBD> lanc<6E> par <I>postmaster</I>, il ne tourne pas dans un environnement
identique et les probl<62>mes d'interaction de verrouillage/serveur ne peuvent
<20>tre dupliqu<71>s.</P>
<P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans
une fen<65>tre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I>
utilis<69> par <I>psql</I>. Utilisez un d<>bogueur pour l'attacher au
<SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arr<72>t
dans le d<>bogueur et envoyez des requ<71>tes de <I>psql</I>. Si vous d<>boguez
le d<>marrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis
lancez <I>psql</I>. Ceci va retarder le d<>marrage de <I>n</I> secondes
pour que vous puissiez attacher un d<>bogueur au processus, fixer des points
d'arr<72>t et continuer la s<>quence de d<>marrage.</P>
<P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I>
qui peuvent <20>tre utile pour des mesures de d<>boguage et de performance.</P>
<P>Vous pouvez compiler avec les options de performance pour voir quelles
fonctions prennent du temps d'ex<65>cution. Les fichiers de gestion du serveur
seront d<>pos<6F>s dans le r<>pertoire <I>pgsql/data/base/nom_db</I>. Les
fichiers de gestion clients seront mis dans le r<>pertoire actuel du client.
Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une
meilleure gestion.</P>
<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&nbsp;?</H4>
<P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de
processus serveur concurrents qu'il peut lancer.</P>
<P>La limite par d<>faut est de 32 processus. Vous pouvez l'augmenter en
relan<61>ant <I>postmaster</I> avec une valeur <I>-N</I> appropri<72>e ou
en modifiant <I>postgresql.conf</I>.</P>
<P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous
devez aussi augmenter <I>-B</I> au-dela de sa valeur par d<>faut 64&nbsp;;
<I>-B</I> doit valoir au moins deux fois <I>-N</I> et probablement plus pour
une meilleure performance. Pour de grand nombres de processus serveurs vous
aurez probablement aussi augmenter plusieurs parametres de configuration du
noyau Unix. Les choses a v<>rifier incluent la taille maximale des blocs de
m<>moire partag<61>e, <SMALL>SHMMAX</SMALL>&nbsp;; le nombre maximal de
s<>maphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL>&nbsp;; le
nombre maximal de processus, <SMALL>NPROC</SMALL>&nbsp;; le nombre maximal
de processus par utilisateur, <SMALL>MAXUPRC</SMALL>&nbsp;; et le nombre
maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>.
La raison pour laquelle PostgreSQL a une limite sur le nombre de processus
serveurs autoris<69>s est pour que votre syst<73>me ne tombe pas <20> court de
ressources.</P>
<H4><A name="3.9">3.9</A>) Que contient le r<>pertoire <I>pgsql_tmp</I>&nbsp;?</H4>
<P>Ce r<>pertoire contient des fichiers temporaires g<>n<EFBFBD>r<EFBFBD>s par le moteur de
requ<71>te. Par exemple, si un tri doit <20>tre fait pour satisfaire un
<SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le param<61>tre
<I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront cr<63><72>s
pour contenir les donn<6E>es n<>cessaires.</P>
<P>Les fichiers temporaires sont d'habitude effac<61>s automatiquement mais
peuvent rester si un serveur s'arr<72>te brutalement pendant un tri. Un arr<72>t
et un red<65>marrage de <I>postmaster</I> effacera les fichiers dans ces
r<>pertoires.</P>
<H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une
sauvegarde des bases et de restaurer pour mettre a jour les versions de
PostgreSQL&nbsp;?</H4>
<P>L'<27>quipe PostgreSQL ne fait que des changements mineurs entre des
versions mineurs, donc mettre <20> jour de 7.2 vers 7.2.1 ne n<>cessitera pas
de sauvegarde et de restauration. Par contre, les sorties majeures
(c'est-<2D>-dire de 7.2 vers 7.3) changent souvent le format interne des tables
syst<73>mes et des fichiers de donn<6E>es. Ces modifications sont souvent
complexes alors nous ne gardons pas de compatibilit<69> descendante pour les
fichiers de donn<6E>es. Une sauvegarde exportera les donn<6E>es dans un format
g<>n<EFBFBD>rique qui peut ensuite <20>tre charg<72> dans le nouveau format interne.</P>
<P>Dans les sorties o<> le format sur disque ne change pas, le script
<I>pg_upgrade</I> peut <20>tre utilis<69> pour mettre <20> jour sans
sauvegarde/restauration. Les notes de sorties pr<70>cisent si <I>pg_upgrade</I>
est disponible pour la sortie.</P>
<H4><A name="3.11">3.11</A>) Quels mat<61>riels dois-je utiliser&nbsp;?</H4>
<P>Comme le mat<61>riel PC est compatible en grosse partie, les gens ont
tendance <20> croire que tous les mat<61>riels PC sont de m<>me qualit<69>. Ce n'est
pas le cas. La RAM ECC, le SCSI et les cartes-m<>re de qualit<69> sont plus
fiables et ont de meilleurs performances qu'un mat<61>riel moins co<63>teux.
PostgreSQL fonctionnera sur <20> peu pr<70>s tout mat<61>riel mais si la fiabilit<69> et
la performance sont importantes pour vous, il est rus<75> de bien consid<69>rer
les options mat<61>rielles. Nos listes de diffusion peuvent <20>tre utilis<69>es pour
discuter des options mat<61>riels.</P>
<HR>
<H2 align="center">Questions fonctionnelles</H2>
<H4><A name="4.1">4.1</A>) Quelle est la diff<66>rence entre curseur binaire
et curseur normal&nbsp;?</H4>
<P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P>
<H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
sur les premi<6D>res lignes d'une requ<71>te&nbsp;? Sur une ligne al<61>atoire&nbsp;?</H4>
<P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser
<SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
<P>Il se peut que l'int<6E>gralit<69> de la requ<71>te doive <20>tre <20>valu<6C>e,
m<>me si vous voulez seulement les premi<6D>res lignes. Envisagez
d'utiliser une requ<71>te avec une clause <SMALL>ORDER
BY</SMALL>. S'il existe un index correspondant <20> l'<SMALL>ORDER
BY</SMALL>, PostgreSQL peut n'<27>valuer que les premi<6D>res lignes, sinon
l'int<6E>gralit<69> de la requ<71>te peut <20>tre <20>valu<6C>e, jusqu'<27> g<>n<EFBFBD>rer les lignes
d<>sir<69>es.</P>
<P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne al<61>atoire&nbsp;:</P>
2004-07-15 15:25:25 +00:00
<PRE>
SELECT colonne
FROM table
ORDER BY random()
LIMIT 1;
</PRE>
<H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou
d'autres objets que je vois dans <I>psql</I>&nbsp;?</H4>
<P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour
une liste compl<70>te de commandes <20> l'int<6E>rieur de psql, vous pouvez utiliser
\?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier
<I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes
<SMALL>SQL</SMALL> qui g<>n<EFBFBD>rent le contenu des commandes anti-slash de
psql. Vous pouvez aussi lancer <I>psql</I> avec l'option
<I>-E</I>, afin qu'il imprime les requ<71>tes qu'il utilise pour ex<65>cuter
les commandes que vous lui passez. PostgreSQL fournit aussi une interface
d'informations sur le sch<63>ma compatible avec <I>SQLi</I> que vous pouvez
interroger des informations sur la base de donn<6E>es.</P>
<H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
ou comment change-t-on son type de donn<6E>es&nbsp;?</H4>
<P>La fonction <SMALL>DROP COLUMN</SMALL> a <20>t<EFBFBD> ajout<75>e dans la version 7.3
avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions pr<70>c<EFBFBD>dentes,
vous pouvez faire&nbsp;:</P>
<PRE>
BEGIN;
LOCK TABLE ancienne_table;
SELECT ... -- s<>lectionnez toutes les colonnes sauf celle <20> supprimer
INTO TABLE nouvelle_table
FROM ancienne_table;
DROP TABLE ancienne_table;
ALTER TABLE nouvelle_table RENAME TO ancienne_table;
COMMIT;
</PRE>
<P>Pour changer le type de donn<6E>es d'une colonne, faites&nbsp;:</P>
<PRE>
BEGIN;
ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>;
UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>);
ALTER TABLE table DROP COLUMN ancienne_colonne;
COMMIT;
</PRE>
<P>Apr<EFBFBD>s, vous pouvez faire <I>VACUUM FULL tab</I> pour r<>cup<75>rer l'espace
disque utilis<69> par les lignes expir<69>es.</P>
<H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
une table, une base de donn<6E>es&nbsp;?</H4>
<P>Les limites sont&nbsp;:</P>
<PRE>
Taille maximum pour une base de donn<6E>es illimit<69>e (il existe des bases de 32&nbsp;To)
Taille maximum pour une table 32&nbsp;To
Taille maximum pour une ligne 1,6&nbsp;To
Taille maximum pour un champ 1&nbsp;Go
Nombre maximum de lignes dans une table illimit<69>
Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
Nombre maximum d'index sur une table illimit<69>
</PRE>
<P>Bien s<>r, ces valeurs ne sont pas vraiment illimit<69>e, elles sont limit<69>es
par l'espace disque disponible, ainsi que par l'espace de m<>moire et de swap.
Les performances peuvent se d<>grader si ces valeurs sont inhabituellement
grandes.</P>
<P>La taille maximum des tables (32&nbsp;To) ne n<>cessite pas que le syst<73>me
d'exploitation supporte les grands fichiers. Les grandes tables sont stock<63>es
sous forme de fichiers multiples de 1&nbsp;Go, donc les limites de taille du
syst<73>me de fichier ne sont pas importantes.</P>
<P>La taille maximum des tables et le nombre maximum de colonnes peuvent
<20>tre quadripl<70>s, si la taille des blocs par d<>faut est augment<6E>e <20> 32&nbsp;Ko.</P>
<H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
les donn<6E>es d'un fichier texte typique&nbsp;?</H4>
<P>Une base de donn<6E>es PostgreSQL peut utiliser jusqu'<27> cinq fois
l'espace n<>cessaire pour stocker les donn<6E>es d'un fichier texte.</P>
<P>A titre d'exemple, consid<69>rez un fichier de 100 000 lignes, comportant
un entier et une cha<68>ne de description sur chaque ligne. Supposons que la
cha<68>ne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8&nbsp;Mo.
La taille du fichier d'une base de donn<6E>es PostgreSQL peut <20>tre
estim<69>e <20> 6,4&nbsp;Mo&nbsp;:</P>
<PRE>
2004-12-01 22:17:16 +00:00
32 octets: chaque ligne (approximation)
2004-07-15 15:25:25 +00:00
24 octets: un champ 'entier' et un champ 'texte'
+ 4 octets: pointeur vers le tuple sur la page
----------------------------------------
2004-12-01 22:17:16 +00:00
60 octets par ligne
2004-07-15 15:25:25 +00:00
La taille des pages de donn<6E>es dans PostgreSQL est de 8192 octets (8 KO), donc :
8192 octets par page
2004-12-01 22:17:16 +00:00
---------------------- = 136 lignes par page de base de donn<6E>es (arrondi <20> l'entier inf<6E>rieur)
60 octets par ligne
2004-07-15 15:25:25 +00:00
100000 lignes de donn<6E>es
2004-12-01 22:17:16 +00:00
------------------------- = 735 pages de base de donn<6E>es (arrondi <20> l'entier sup<75>rieur)
2004-07-15 15:25:25 +00:00
128 lignes par page
2004-12-01 22:17:16 +00:00
735 pages de base de donn<6E>es * 8192 octets par page = 6&nbsp;021&nbsp;120&nbsp;octets (6,4&nbsp;Mo)
2004-07-15 15:25:25 +00:00
</PRE>
<P>Les index utilisent moins d'espace, mais ils contiennent les donn<6E>es index<65>es,
ils peuvent donc <20>galement <20>tre grands.</P>
<P>Les <SMALL>NULL</SMALL> sont stock<63>s sous forme de bitmap, aussi
utilisent-ils tr<74>s peu d'espace.</P>
<H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables,
bases de donn<6E>es et utilisateurs sont d<>finis&nbsp;?</H4>
<P><I>psql</I> dispose de plusieurs commandes commen<65>ant par un anti-slash
pour retrouver ces informations. Utilisez \? pour les conna<6E>tre. Il existe
aussi des tables syst<73>mes, qui commencent par <I>pg_</I> et qui les
d<>crivent <20>galement. Aussi, <I>psql -l</I> liste toutes les bases de
donn<6E>es.</P>
<P>Essayez <20>galement le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il
illustre un grand nombre de commandes <SMALL>SELECT</SMALL> n<>cessaires pour
r<>cup<75>rer l'information des tables syst<73>me de la base de donn<6E>es.</P>
<H4><A name="4.8">4.8</A>) Mes requ<71>tes sont lentes ou ne font pas usage
des index. Pourquoi&nbsp;?</H4>
<P>Les index ne sont pas automatiquement utilis<69>s par chaque requ<71>te. Ils
sont utilis<69>s uniquement si la table est plus grande qu'une certaine taille,
et si la requ<71>te s<>lectionne seulement un faible pourcentage des lignes de la
table. Ceci est d<> au fait qu'un acc<63>s disque al<61>atoire caus<75> par un parcours
d'index peut <20>tre plus lent qu'une simple lecture de la table, ou parcours
s<>quentiel</P>
<P>Pour d<>terminer si un index devrait <20>tre utilis<69>, PostgreSQL a besoin
des statistiques de la table. Ces statistiques sont collect<63>es en lan<61>ant
<SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>.
Avec les statistiques, l'optimiseur sait combien de lignes se trouvent
dans la table et peut mieux d<>terminer s'il faut utiliser l'index.
Les statistiques sont <20>galement utiles pour d<>terminer l'ordre optimal
des op<6F>rations de jointure. La collecte des statistiques devrait <20>tre
effectu<74>e r<>guli<6C>rement lorsque le contenu de la table change.</P>
<P>Les index ne sont normalement pas utilis<69>s pour les clauses <SMALL>ORDER BY</SMALL>
ou pour les jointures. Un parcours s<>quentiel suivi d'un tri explicite est
habituellement plus rapide qu'un parcours d'index pour une table importante.
Toutefois, <SMALL>LIMIT</SMALL> combin<69> avec <SMALL>ORDER BY</SMALL>
utilisera souvent un index parce que seulement une petite partie de la table est
renvoy<6F>e. En fait, bien que MAX() et MIN() n'utilisent pas les index,
il est possible de retrouver ces valeurs en utilisant un index avec
ORDER BY et LIMIT&nbsp;:</P>
<PRE>
SELECT colonne
FROM table
ORDER BY colonne [ DESC ]
LIMIT 1;
</PRE>
<P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel,
utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et
lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P>
<P>Lorsque vous utilisez des caract<63>res joker tels que <SMALL>LIKE</SMALL> ou
<I>~</I>, les index peuvent seulement <20>tre utilis<69>s dans certaines circonstances&nbsp;:</P>
<UL>
<LI>Le d<>but de la cha<68>ne de recherche doit <20>tre ancr<63> au d<>part de la cha<68>ne, c'est-<2D>-dire
<UL>
<LI>Les mod<6F>les pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI>
<LI>Les mod<6F>les d'expression r<>guli<6C>re pour <I>~</I> doivent commencer par
<I>^</I>.</LI>
</UL></LI>
<LI>La cha<68>ne de recherche ne peut pas commencer par une classe de caract<63>res, c'est-<2D>-dire
[a-e].</LI>
<LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et
<I>~*</I> n'utilisent pas les index. Utilisez plut<75>t les index fonctionnels,
d<>crit dans la section <a href="#4.12">4.12</a>.</LI>
<LI>La locale <I>C</I> par d<>faut doit <20>tre utilis<69>e lors de
<i>initdb</i>.</LI>
</UL>
2004-12-01 22:17:16 +00:00
<p>Dans les versions ant<6E>rieures <20> la 8.0, les indexs ne peuvent souvent
pas <20>tre utilis<69>s sauf si les types de donn<6E>es correspondent exactement au
type de la colonne de l'index. Ceci est particuli<6C>rement vrai pour les
index de colonnes de type int2, int8 et numeric.</p>
2004-07-15 15:25:25 +00:00
<H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur <20>value
mes requ<71>tes&nbsp;?</H4>
<P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P>
<H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree&nbsp;?</H4>
<P>Un index R-tree est utilis<69> pour l'indexation des donn<6E>es spatiales. Un
index de hachage ne permet pas les recherches par plage. Un index B-tree peut
seulement faire des recherches sur une dimension. Les index R-tree
peuvent traiter des donn<6E>es multi-dimensionnelles. Par exemple, si un index
R-tree peut <20>tre construit sur un attribut de type <I>point</I>,
le syst<73>me peut plus efficacement g<>rer les requ<71>tes du type
"S<>lection de tous les points d'un rectangle".</P>
<P>L'article de r<>f<EFBFBD>rence qui d<>crit le syst<73>me R-tree original est&nbsp;:</P>
<P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
of Data, 45-57.</P>
<P>Vous pouvez <20>galement trouver ce papier dans le livre de Stonebraker
"Readings in Database Systems".</P>
<P>Les index R-tree int<6E>gr<67>s peuvent prendre en charge les polyg<79>nes et les bo<62>tes.
En th<74>orie, les R-trees peuvent <20>tre <20>tendus <20> un plus grand nombre de dimensions.
En pratique, l'extension des R-trees requiert pas mal de travail et nous
n'avons pour le moment aucune documentation sur la fa<66>on de proc<6F>der.</P>
<H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur g<>n<EFBFBD>tique de
requ<71>tes&nbsp;?</H4>
<P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query
Optimizer</i>) acc<63>l<EFBFBD>re l'optimisation des requ<71>tes lors de jointures de
nombreuses tables par un algorithme g<>n<EFBFBD>tique (GA). Il permet la
gestion des grosses requ<71>tes de jointures en utilisant une recherche non
exhaustive.</P>
<H4><A name="4.12">4.12</A>) Comment puis-je r<>aliser des recherches sur des
expressions rationnelles ainsi que des recherches non sensibles <20> la
casse&nbsp;? Comment puis-je utiliser un index lors de recherches non
sensibles <20> la casse&nbsp;?</H4>
<P>L'op<6F>rateur <I>~</I> r<>alise des recherches d'expressions rationnelles
et <I>~*</I> le fait sans tenir compte de la casse. La variante de
<SMALL>LIKE</SMALL> non sensible <20> la casse est
<SMALL>ILIKE</SMALL>.</P>
<P>Des comparaisons d'<27>galit<69> non sensibles <20> la casse sont habituellement
exprim<69>es de cette fa<66>on&nbsp;:</P>
<PRE>
SELECT *
FROM table
WHERE lower(colonne) = 'abc';
</PRE>
<P>Ceci n'utilisera pas un index standard. N<>anmoins, si vous cr<63>ez un index
fonctionnel, celui-ci sera utilis<69>&nbsp;:</P>
<PRE>
CREATE INDEX tableindex ON table (lower(colonne));
</PRE>
<H4><A name="4.13">4.13</A>) Comment puis-je d<>tecter si un champ est
<SMALL>NULL</SMALL> dans une requ<71>te&nbsp;?</H4>
<P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS
NOT NULL</SMALL>.</P>
<H4><A name="4.14">4.14</A>) Quelle sont les diff<66>rences entre les nombreux
types de caract<63>res&nbsp;?</H4>
<PRE>
Type Nom interne Notes
--------------------------------------------------
VARCHAR(n) varchar n sp<73>cifie la taille maximum, sans remplissage
CHAR(n) bpchar des espaces sont ajout<75>s pour obtenir la
longueur fixe sp<73>cifi<66>e
TEXT text pas de limite sup<75>rieure pour la taille
BYTEA bytea tableau d'octets (accepte les octets nuls)
"char" char un caract<63>re
</PRE>
<P>Vous verrez le nom interne en examinant les catalogues syst<73>me et dans
quelques messages d'erreur.</P>
<P>Les quatres premiers types du dessus sont des types "varlena"
(c'est-<2D>-dire que les quatre premiers octets correspondent <20> la taille,
suivi des donn<6E>es). Donc, l'espace r<>ellement utilis<69> est l<>g<EFBFBD>rement plus
grand que la taille d<>clar<61>e. N<>anmoins, ces types de donn<6E>es sont aussi
sujet <20> la compression ou <20> un enregistrement en dehors de la table avec
<SMALL>TOAST</SMALL>, donc l'espace occup<75> sur disque pourrait aussi <20>tre
moindre que ce qu'on pourrait attendre.</P>
<P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des cha<68>nes de
longueurs variables tout en limitant la taille de cette cha<68>ne.
<SMALL>TEXT</SMALL> est utile pour les cha<68>nes de longueur illimit<69>e, avec
malgr<67> tout un maximum de 1&nbsp;Go.</P>
<P><SMALL>CHAR(n)</SMALL> est int<6E>ressant pour stocker des cha<68>nes de taille
identique. <SMALL>CHAR(n)</SMALL> compl<70>te avec des espaces pour arriver <20>
la taille sp<73>cifi<66>e alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les
caract<63>res donn<6E>s. <SMALL>BYTEA</SMALL> sert <20> stocker des donn<6E>es binaires,
particuli<6C>rement les donn<6E>es incluant des octets <SMALL>NULL</SMALL>. Tous
les types d<>crits ici ont des performances similaires.</P>
<H4><A name="4.15.1">4.15.1</A>) Comment puis-je cr<63>er un champ s<>rie,
c'est-<2D>-dire s'incr<63>mentant automatiquement&nbsp;?</H4>
<P>PostgreSQL supporte un type de donn<6E>es <SMALL>SERIAL</SMALL>. Il cr<63>e
automatiquement une s<>quence. Par exemple,
ceci&nbsp;:</P>
<PRE>
CREATE TABLE personne (
id SERIAL,
nom TEXT
);
</PRE>
est automatiquement traduit en ceci&nbsp;:
<PRE>
CREATE SEQUENCE personne_id_seq;
CREATE TABLE personne (
id INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
nom TEXT
);
</PRE>
Voir la page man de <I>create_sequence</I> pour plus d'informations
sur les s<>quences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque
ligne comme valeur unique. N<>anmoins, si vous avez besoin de sauvegarder
puis recharger la base de donn<6E>es, vous devrez utiliser l'option
<I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de
<I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s.
<H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
<SMALL>SERIAL</SMALL> suite <20> une insertion&nbsp;?</H4>
<P>Une approche pour r<>cup<75>rer la prochaine valeur <SMALL>SERIAL</SMALL> <20>
partir de l'objet s<>quence est d'utiliser la fonction <I>nextval()</I>
<I>avant</I> l'insertion et de l'ins<6E>rer ensuite explicitement. En utilisant
la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple
dans un pseudo-langage ressemblerait <20> ceci&nbsp;:</P>
<PRE>
nouvelle_id = execute("SELECT nextval('personne_id_seq')");
execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
</PRE>
Vous pourriez ensuite utiliser la nouvelle valeur stock<63>e dans
<CODE>nouvelle_id</CODE> avec d'autres requ<71>tes (c'est-<2D>-dire en tant que
cl<63> <20>trang<6E>re de la table <CODE>personne</CODE>). Notez que le nom de la
<SMALL>SEQUENCE</SMALL> automatiquement cr<63><72>e sera
&lt;<I>table</I>&gt;_&lt;<I>colonneserial</I>&gt;_<I>seq</I>, o<>
<I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table
et de votre colonne <SMALL>SERIAL</SMALL>.
<P>Autrement, vous pouvez r<>cup<75>rer la valeur <SMALL>SERIAL</SMALL> affect<63>e
avec la fonction <I>currval()</I> <I>apr<EFBFBD>s</I> qu'elle ait <20>t<EFBFBD> ins<6E>r<EFBFBD>e par
d<>faut, c'est-<2D>-dire,</P>
<PRE>
execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
nouvelle_id = execute("SELECT currval('personne_id_seq')");
</PRE>
Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoy<6F>
par l'instruction <SMALL>INSERT</SMALL> pour r<>cup<75>rer la valeur par d<>faut
bien que cela soit l'appoche la moins portable et la valeur de l'OID se
r<>initialisera aux environs de quatre milliards. En Perl, avec DBI et le
module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via
<I>$sth-&gt;{pg_oid_status}</I> apr<70>s un <I>$sth-&gt;execute()</I>.
<H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
<I>nextval()</I> n'am<61>nent pas des probl<62>mes lorsque plusieurs utilisateurs
les lancent en m<>me temps&nbsp;?</H4>
<P>Non. <I>currval()</I> renvoie la valeur actuelle affect<63>e par votre
processus, et non pas par tous les utilisateurs.</P>
<H4><A name="4.15.4">4.15.4</A>) Pourquoi mes num<75>ros de s<>quences ne sont pas
r<>-utilis<69>s lors d'une annulation de transaction&nbsp;? Pourquoi
existe-t'il des trous dans la num<75>rotation de ma colonne s<>quentielle
(SERIAL)&nbsp;?</H4>
<P>Pour am<61>liorer les acc<63>s concurrents, les valeurs de s<>quences sont
donn<6E>es aux transactions qui en ont besoin et ne sont pas bloqu<71>es jusqu'<27>
la fin de la transaction. Ceci cr<63>e des trous dans le num<75>rotage pour les
transactions annul<75>es.</P>
<H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>&nbsp;?
Qu'est-ce qu'un <SMALL>TID</SMALL>&nbsp;?</H4>
<P>Les <SMALL>OID</SMALL> sont la r<>ponse de PostgreSQL aux identifiants de
lignes uniques. Chaque ligne cr<63><72>e dans PostgreSQL obtient un
<SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> g<>n<EFBFBD>r<EFBFBD>s pendant
<I>initdb</I> sont inf<6E>rieurs <20> 16384 (voir <I>include/access/transam.h</I>).
Tous les <SMALL>OID</SMALL> cr<63><72>s par un utilisateur sont sup<75>rieurs ou
<20>gaux <20> ceci. Par d<>faut, tous ces <SMALL>OID</SMALL> sont uniques non
seulement dans une table ou une base mais unique <20> l'int<6E>rieur d'une
installation PostgreSQL enti<74>re.</P>
<P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables syst<73>me interne
pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent <20>tre
utilis<69>s pour identifier des lignes utilisateurs sp<73>cifiques et utilis<69>s dans
des jointures. Il est recommand<6E> que vous utilisiez le type de colonne
<SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>.
Vous pouvez cr<63>er un index sur le champ <SMALL>OID</SMALL> pour un acc<63>s
plus rapide.</P>
<P>Les <SMALL>OID</SMALL> sont attribu<62>s pour toute ligne d'un endroit
central qui est utilis<69> par toutes les bases de donn<6E>es. Si vous voulez
changer l'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez
faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il
n'y a pas de raisons pour ne pas le faire&nbsp;:</P>
<PRE>
CREATE TABLE nouvelle_table (macolonne int);
SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
COPY table_temporaire FROM '/tmp/tablepg';
COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
DROP TABLE table_temporaire;
</PRE>
<P>Les <SMALL>OID</SMALL> sont stock<63>s en tant qu'entiers de quatre octets
et d<>borderont <20> quatre milliards. Personne n'a jamais rapport<72> un tel cas
et nous avons pr<70>vu de retirer la limite avant que cela ne se produise.</P>
<P>Les <SMALL>TID</SMALL>s sont utilis<69>s pour identifier des lignes
physiques sp<73>cifiques avec des valeurs de bloc et d<>calage. Les
<SMALL>TID</SMALL> changent apr<70>s que les lignes aient <20>t<EFBFBD> modifi<66>s ou
recharg<72>s. Ils sont utilis<69>s par des entr<74>es d'index pour pointer vers des
lignes physiques.</P>
<H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilis<69>s avec
PostgreSQL&nbsp;?</H4>
<P>Une partie du code source et de l'ancienne documentation utilisent des
termes dont l'usage est plus commun. Voici quelques exemples&nbsp;:</P>
<UL>
<LI>table, relation, classe</LI>
<LI>ligne (row), enregistrement (record), tuple</LI>
<LI>colonne (column), champ (field), attribut</LI>
<LI>r<EFBFBD>cup<EFBFBD>re, s<>lectionne (select)</LI>
<LI>remplace (replace), met <20> jour (update)</LI>
<LI>ajoute (append), ins<6E>re (insert)</LI>
<LI><SMALL>OID</SMALL>, valeur s<>quentielle (serial value)</LI>
<LI>portal, curseur</LI>
<LI>range variable, table name, table alias</LI>
</UL>
<P>Une liste des termes g<>n<EFBFBD>raux pour le domaine des bases de donn<6E>es est
disponible sur&nbsp;: <A href=
"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>
<H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
Memory exhausted in AllocSetAlloc()</I>&nbsp;?</H4>
<P>Vous manquez probablement de m<>moire virtuelle sur votre syst<73>me ou votre
noyau a une limite assez basse pour certaines ressources. Essayez ceci avant
de lancer <I>postmaster</I>&nbsp;:</P>
<PRE>
ulimit -d 262144
limit datasize 256m
</PRE>
Suivant votre shell, seul un d'eux pourrait r<>ussir mais cela configurera
d'une fa<66>on plus importante la taille du segment de donn<6E>es de votre
processus. Cette commande s'applique au processus actuel et <20> tous les
processus lanc<6E> par celui-ci. Si vous avez des probl<62>mes avec le client
<SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de donn<6E>es,
essayez <20>a avant de lancer le client.
<H4><A name="4.19">4.19</A>) Comment puis-je conna<6E>tre la version de
PostgreSQL que j'utilise&nbsp;?</H4>
<P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P>
<H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
descriptor</I> lors d'op<6F>rations sur des gros objects&nbsp;?</H4>
<P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE>
autour de chaque utilisateur de gros objets, c'est-<2D>-dire pour entourer
<CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
<P>Actuellement, PostgreSQL force cette r<>gle en fermant les gros objets
lors de la transaction. Donc, le premier essai d'op<6F>rations sur ces objets,
fonctionnant habituellement (au moins la plupart du temps) aura un
<I>invalid large obj descriptor</I>. Donc le code, auparavant fonctionnel
(au moins la plupart du temps), g<>n<EFBFBD>rera maintenant un message d'erreur si
vous n'utilisez pas de transaction.</P>
<P>Si vous utilisez une interface client interface comme
<SMALL>ODBC</SMALL>, vous aurez peut-<2D>tre besoin de lancer
<CODE>auto-commit off.</CODE></P>
<H4><A name="4.21">4.21</A>) Comment puis-je cr<63>er une colonne qui aura par
d<>faut l'heure actuelle comme valeur&nbsp;?</H4>
<P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P>
<PRE>
<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
</CODE>
</PRE>
<H4><A name="4.22">4.22</A>) Pourquoi mes sous-requ<71>tes utilisant
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes&nbsp;?</H4>
<P>Dans les versions pr<70>c<EFBFBD>dant la 7.4, les sous-requ<71>tes ont <20>t<EFBFBD> jointes avec
des jointures externes en parcourant s<>quentiellement le r<>sultat de la
sous-requ<71>te pour chaque ligne de la requ<71>te externe. Si la sous-requ<71>te
renvoit quelques lignes et que la requ<71>te externe en renvoit plein,
<CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour acc<63>l<EFBFBD>rer les autres
requ<71>tes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE>&nbsp;:</P>
<PRE> SELECT *
FROM table
WHERE colonne IN (SELECT souscolonne FROM soustable);
</PRE>
to:
<PRE> SELECT *
FROM table
WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
</PRE>
Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit <20>tre une colonne
index<65>e.
<P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les m<>mes
techniques sophistiqu<71>es de jointures comme des requ<71>tes normales et est
pr<70>f<EFBFBD>r<EFBFBD> <20> l'utilisation de <CODE>EXISTS</CODE>.</P>
<H4><A name="4.23">4.23</A>) Comment puis-je r<>aliser une jointure
externe&nbsp;?</H4>
<P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
standard. Voici deux exemples&nbsp;:</P>
<PRE>
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</PRE>
or
<PRE>
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE>
<P>Ces requ<71>tes identiques joignent t1.col <20> t2.col et renvoient toute
colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure
droite (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2.
Une jointure compl<70>te (<SMALL>FULL join</SMALL>) renverra les lignes
correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot cl<63>
<SMALL>OUTER</SMALL> est optionnelle et assum<75> dans le cas de jointure
<SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les
jointures ordinaires sont appel<65>es des jointures <SMALL>INNER</SMALL>.</P>
<P>Lors des pr<70>c<EFBFBD>dentes versions, les jointures externes peuvent <20>tre
simul<75>es en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par
exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requ<71>te
suivante r<>alise une jointure externe, <I>outer</I>, des deux tables&nbsp;:<BR>
<BR>
</P>
<PRE>
SELECT tab1.col1, tab2.col2
FROM tab1, tab2
WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col1, NULL
FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1
</PRE>
<H4><A name="4.24">4.24</A>) Comment puis-je lancer des requ<71>tes utilisant
plusieurs bases de donn<6E>es&nbsp;?</H4>
<P>Il n'existe pas de moyens de lancer des requ<71>tes sur une autre base que
la courante. Comme PostgreSQL charge des catalogues syst<73>mes sp<73>cifiques <20>
la base de donn<6E>es, sa r<>action aux requ<71>tes inter-base de donn<6E>es est
incertaine.</P>
<P><I>contrib/dblink</I> permet les requ<71>tes entre bases de donn<6E>es en
utilisant des fonctions. Bien s<>r un client peut r<>aliser des connexions
simultan<61>es <20> plusieurs bases de donn<6E>es et joindre les r<>sultats du c<>t<EFBFBD>
client.</P>
<H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
colonnes <20> partir d'une fonction?</H4>
<P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou
colonnes <20> partir d'une fonction,
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
2004-07-15 15:25:25 +00:00
<H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas cr<63>er/supprimer des
tables temporaires dans les fonctions PL/PgSQL de fa<66>on stable&nbsp;?</H4>
<P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est
que si une fonction PL/PgSQL acc<63>de <20> une table temporaire, que cette table
est ensuite supprim<69>e et recr<63><72>e, et que la fonction est appel<65>e de nouveau,
la fonction <20>chouera car le contenu de la fonction cach<63>e pointera toujours
vers l'ancienne table temporaire. La solution revient <20> utiliser
<SMALL>EXECUTE</SMALL> pour l'acc<63>s aux tables temporaires avec PL/PgSQL.
Ceci obligera l'analyse de la requ<71>te <20> chaque fois.</P>
2004-12-01 22:17:16 +00:00
<H4><A name="4.27">4.27</A>) Quelles options de cryptage sont
2004-07-15 15:25:25 +00:00
disponibles&nbsp;?
</H4>
<UL>
<LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, <20>
utiliser dans des requ<71>tes <SMALL>SQL</SMALL>.</LI>
<LI>Pour crypter une transmission entre le client et le serveur, le serveur
doit avoir positionn<6E> l'option <I>ssl</I> <20> <I>true</I> dans <I>postgresql.conf,
</I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit
exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas
<20>tre <I>d<EFBFBD>sactiv<EFBFBD>e</I>. Notez qu'il est aussi possible d'utiliser un
transport crypt<70> d'une troisi<73>me partie, tel que stunnel ou ssh, plut<75>t que
les connexions SSL natives de PostgreSQL.</LI>
2004-07-15 15:25:25 +00:00
<LI>Les mots de passe des utilisateurs sont automatiquement crypt<70>s depuis
la version 7.3. Pour les versions pr<70>c<EFBFBD>dentes, vous devez activer l'option
<I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI>
<LI>Le serveur peut fonctionner avec un syst<73>me de fichiers crypt<70>s.</LI>
</UL>
<HR>
<H2 align="center">Etendre PostgreSQL</H2>
<H4><A name="5.1">5.1</A>) J'ai <20>crit une fonction utilisateur. Lorsque je l'ex<65>cute avec
<I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I>&nbsp;?</H4>
<P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur
dans un programme de test.</P>
<H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux
types ou fonctions <20> PostgreSQL&nbsp;?</H4>
<P>Envoyez vos extensions <20> la liste de diffusion <I>pgsql-hackers</I>,
elles atterriront <20>ventuellement dans le sous-r<>pertoire <I>contrib/</I>.</P>
<H4><A name="5.3">5.3</A>) Comment faire pour <20>crire une fonction C
qui renvoie un tuple&nbsp;?</H4>
<P>Dans les versions de PostgreSQL <20> partir de 7.3, les fonctions qui
renvoient une table sont totalement support<72>es en C, PL/PgSQL, et SQL. Voir
le Guide du Programmeur pour plus d'information. Un exemple de fonction
renvoyant une table d<>finie en C se trouve <20>
<I>contrib/tablefunc</I>.</P>
<H4><A name="5.4">5.4</A>) J'ai modifi<66> un fichier source. Pourquoi
ma recompilation ne voit-elle pas les modifications&nbsp;?</H4>
<P>Les <I>Makefiles</I> n'ont pas les d<>pendances ad<61>quates pour les
fichiers d'en-t<>te. Il vous faut faire <I>make clean</I> puis un autre
<I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser
l'option <I>--enable-depend</I> de <I>configure</I> pour que le
compilateur calcule les d<>pendances automatiquement.</P>
</BODY>
</HTML>