|
|
|
|
|
<!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>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Derni<EFBFBD>re mise <EFBFBD> jour : vendredi 11 juillet 2004 23:58:24</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Mainteneur actuel : Bruce Momjian (<A href=
|
|
|
|
|
|
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
|
|
|
|
|
</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La plus r<EFBFBD>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<EFBFBD>cifiques <EFBFBD> la plateforme sont r<EFBFBD>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<EFBFBD>n<EFBFBD>rales</H2>
|
|
|
|
|
|
<A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment le prononcer ?<BR>
|
|
|
|
|
|
<A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL ?<BR>
|
|
|
|
|
|
<A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?<BR>
|
|
|
|
|
|
<A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?<BR>
|
|
|
|
|
|
<A href="#1.5">1.5</A>) O<EFBFBD> puis-je me procurer PostgreSQL ?<BR>
|
|
|
|
|
|
<A href="#1.6">1.6</A>) O<EFBFBD> puis-je obtenir du support ?<BR>
|
|
|
|
|
|
<A href="#1.7">1.7</A>) Quelle est la derni<EFBFBD>re version ?<BR>
|
|
|
|
|
|
<A href="#1.8">1.8</A>) Quelle documentation est disponible ?<BR>
|
|
|
|
|
|
<A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit<EFBFBD>s manquantes ?<BR>
|
|
|
|
|
|
<A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?<BR>
|
|
|
|
|
|
<A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?<BR>
|
|
|
|
|
|
<A href="#1.12">1.12</A>) Comment puis-je rejoindre l'<EFBFBD>quipe de d<EFBFBD>veloppement ?<BR>
|
|
|
|
|
|
<A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de
|
|
|
|
|
|
bogue ?<BR>
|
|
|
|
|
|
<A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il <EFBFBD> d'autres
|
|
|
|
|
|
<SMALL>SGBD</SMALL> ?<BR>
|
|
|
|
|
|
<A href="#1.15">1.15</A>) Comment puis-je aider financi<EFBFBD>rement PostgreSQL ?<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 ?<BR>
|
|
|
|
|
|
<A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser
|
|
|
|
|
|
PostgreSQL avec des pages Web ?<BR>
|
|
|
|
|
|
<A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?<BR>
|
|
|
|
|
|
<A href="#2.4">2.4</A>) Quels langages sont disponibles pour
|
|
|
|
|
|
communiquer avec PostgreSQL ?<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> ?<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 ?<BR>
|
|
|
|
|
|
<A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?<BR>
|
|
|
|
|
|
<A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?<BR>
|
|
|
|
|
|
<A href="#3.5">3.5</A>) Comment contr<EFBFBD>ler les connexions d'autres machines ?<BR>
|
|
|
|
|
|
<A href="#3.6">3.6</A>) Comment r<EFBFBD>gler le moteur de la base de donn<EFBFBD>es pour de meilleures performances ?<BR>
|
|
|
|
|
|
<A href="#3.7">3.7</A>) Quelles fonctionalit<EFBFBD>s de d<EFBFBD>boguage sont disponibles ?<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 ?<BR>
|
|
|
|
|
|
<A href="#3.9">3.9</A>) Que contient le r<EFBFBD>pertoire <I>pgsql_tmp</I> ?<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 ?<BR>
|
|
|
|
|
|
<A href="#3.11">3.11</A>) Quels mat<EFBFBD>riels dois-je utiliser ?<BR>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Questions fonctionnelles</H2>
|
|
|
|
|
|
<A href="#4.1">4.1</A>) Quelle est la diff<EFBFBD>rence entre curseur binaire
|
|
|
|
|
|
et curseur normal ?<BR>
|
|
|
|
|
|
<A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
|
|
|
|
|
|
sur les premi<EFBFBD>res lignes d'une requ<EFBFBD>te ? Sur une ligne al<EFBFBD>atoire ?<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> ?<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<EFBFBD>es ?<BR>
|
|
|
|
|
|
<A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
|
|
|
|
|
|
une table et une base de donn<EFBFBD>es ?<BR>
|
|
|
|
|
|
<A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
|
|
|
|
|
|
les donn<EFBFBD>es d'un fichier texte typique ?<BR>
|
|
|
|
|
|
<A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables,
|
|
|
|
|
|
bases de donn<EFBFBD>es et utilisateurs sont d<EFBFBD>finis ?<BR>
|
|
|
|
|
|
<A href="#4.8">4.8</A>) Mes requ<EFBFBD>tes sont lentes ou ne font pas usage
|
|
|
|
|
|
des index. Pourquoi ?<BR>
|
|
|
|
|
|
<A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur <EFBFBD>value
|
|
|
|
|
|
mes requ<EFBFBD>tes ?<BR>
|
|
|
|
|
|
<A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?<BR>
|
|
|
|
|
|
<A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur g<EFBFBD>n<EFBFBD>tique de
|
|
|
|
|
|
requ<EFBFBD>tes ?<BR>
|
|
|
|
|
|
<A href="#4.12">4.12</A>) Comment puis-je r<EFBFBD>aliser des recherches par des
|
|
|
|
|
|
expressions rationnelles ainsi que des recherches non sensibles <EFBFBD> la
|
|
|
|
|
|
casse ? Comment puis-je utiliser un index lors de recherches non
|
|
|
|
|
|
sensibles <EFBFBD> la casse ?<BR>
|
|
|
|
|
|
<A href="#4.13">4.13</A>) Comment puis-je d<EFBFBD>tecter si un champ est
|
|
|
|
|
|
<SMALL>NULL</SMALL> dans une requ<EFBFBD>te ?<BR>
|
|
|
|
|
|
<A href="#4.14">4.14</A>) Quelle sont les diff<EFBFBD>rences entre les nombreux
|
|
|
|
|
|
types de caract<EFBFBD>res ?<BR>
|
|
|
|
|
|
<A href="#4.15.1">4.15.1</A>) Comment puis-je cr<EFBFBD>er un champ s<EFBFBD>rie,
|
|
|
|
|
|
c'est-<EFBFBD>-dire s'incr<EFBFBD>mentant automatiquement ?<BR>
|
|
|
|
|
|
<A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
|
|
|
|
|
|
<SMALL>SERIAL</SMALL> suite <EFBFBD> une insertion ?<BR>
|
|
|
|
|
|
<A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
|
|
|
|
|
|
<I>nextval()</I> n'am<EFBFBD>nent pas des probl<EFBFBD>mes lorsque plusieurs utilisateurs
|
|
|
|
|
|
les lancent en m<EFBFBD>me temps ?<BR>
|
|
|
|
|
|
<A href="#4.15.4">4.15.4</A>) Pourquoi mes num<EFBFBD>ros de s<EFBFBD>quences ne sont pas
|
|
|
|
|
|
r<EFBFBD>-utilis<EFBFBD>s lors d'une annulation de transaction ? Pourquoi
|
|
|
|
|
|
existe-t'il des trous dans la num<EFBFBD>rotation de ma colonne s<EFBFBD>quentielle
|
|
|
|
|
|
(SERIAL) ?<BR>
|
|
|
|
|
|
<A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL> ?<BR>
|
|
|
|
|
|
<A href="#4.17">4.17</A>) A quoi correspond certains termes utilis<EFBFBD>s avec
|
|
|
|
|
|
PostgreSQL ?<BR>
|
|
|
|
|
|
<A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
|
|
|
|
|
|
Memory exhausted in AllocSetAlloc()</I> ?<BR>
|
|
|
|
|
|
<A href="#4.19">4.19</A>) Comment puis-je conna<EFBFBD>tre la version de
|
|
|
|
|
|
PostgreSQL que j'utilise ?<BR>
|
|
|
|
|
|
<A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
|
|
|
|
|
|
descriptor</I> lors d'op<EFBFBD>rations avec des gros objets ?<BR>
|
|
|
|
|
|
<A href="#4.21">4.21</A>) Comment puis-je cr<EFBFBD>er une colonne qui aura par
|
|
|
|
|
|
d<EFBFBD>faut l'heure actuelle comme valeur ?<BR>
|
|
|
|
|
|
<A href="#4.22">4.22</A>) Pourquoi mes sous-requ<EFBFBD>tes utilisant
|
|
|
|
|
|
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR>
|
|
|
|
|
|
<A href="#4.23">4.23</A>) Comment puis-je r<EFBFBD>aliser une jointure
|
|
|
|
|
|
externe ?<BR>
|
|
|
|
|
|
<A href="#4.24">4.24</A>) Comment puis-je lancer des requ<EFBFBD>tes utilisant
|
|
|
|
|
|
plusieurs bases de donn<EFBFBD>es ??<BR>
|
|
|
|
|
|
<A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
|
|
|
|
|
|
colonnes <EFBFBD> partir d'une fonction ?<BR>
|
|
|
|
|
|
<A href="#4.26">4.26</A>) Why can't I reliably create/drop
|
|
|
|
|
|
temporary tables in PL/PgSQL functions?<BR>
|
|
|
|
|
|
<A href="#4.27">4.27</A>) Quelles options de replication sont
|
|
|
|
|
|
disponibles ?<BR>
|
|
|
|
|
|
<A href="#4.28">4.28</A>) Quelles options de cryptage sont
|
|
|
|
|
|
disponibles ?<BR>
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Etendre PostgreSQL</H2>
|
|
|
|
|
|
<A href="#5.1">5.1</A>) J'ai <EFBFBD>crit une fonction utilisateur. Lorsque je l'ex<EFBFBD>cute avec
|
|
|
|
|
|
<I>psql</I>, pourquoi cela finit-il avec un "dump core" ?<BR>
|
|
|
|
|
|
<A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions
|
|
|
|
|
|
pour PostgreSQL ?<BR>
|
|
|
|
|
|
<A href="#5.3">5.3</A>) Comment puis-je <EFBFBD>crire une fonction C pour r<EFBFBD>cup<EFBFBD>rer une
|
|
|
|
|
|
ligne ?<BR>
|
|
|
|
|
|
<A href="#5.4">5.4</A>) J'ai modifi<EFBFBD> un fichier source. Pourquoi la modification
|
|
|
|
|
|
n'est-elle pas visible apr<EFBFBD>s la recompilation ?<BR>
|
|
|
|
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Questions g<EFBFBD>n<EFBFBD>rales</H2>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment
|
|
|
|
|
|
le prononcer ?</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>
|
|
|
|
|
|
pour ceux souhaitant entendre la prononciation.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL est une am<EFBFBD>lioration du syst<EFBFBD>me de gestion de bases
|
|
|
|
|
|
de donn<EFBFBD>es POSTGRES (et est toujours quelque fois appel<EFBFBD> "Postgres"),
|
|
|
|
|
|
un prototype de recherche de
|
|
|
|
|
|
<SMALL>SGBD</SMALL> de prochaine g<EFBFBD>n<EFBFBD>ration. PostgreSQL garde le
|
|
|
|
|
|
puissant mod<EFBFBD>le de donn<EFBFBD>es et les types de donn<EFBFBD>es riches de
|
|
|
|
|
|
POSTGRES, mais remplace le langage de requ<EFBFBD>tes PostQuel par un
|
|
|
|
|
|
sous-ensemble <EFBFBD>tendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit
|
|
|
|
|
|
et les sources complets sont disponibles.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P> PostgreSQL est <EFBFBD>crit par une <EFBFBD>quipe de d<EFBFBD>veloppeurs qui sont
|
|
|
|
|
|
tous inscrits <EFBFBD> la liste de diffusion de d<EFBFBD>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<EFBFBD>veloppeurs). Cette <EFBFBD>quipe est responsable de tout le
|
|
|
|
|
|
d<EFBFBD>veloppement de PostgreSQL. C'est un projet soutenu par une
|
|
|
|
|
|
communaut<EFBFBD> sans <EFBFBD>tre contr<EFBFBD>l<EFBFBD> par une soci<EFBFBD>t<EFBFBD>. Pour y contribuer,
|
|
|
|
|
|
voir la FAQ des d<EFBFBD>veloppeurs sur <A
|
|
|
|
|
|
HREF="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les auteurs de PostgreSQL 1.01 <EFBFBD>taient Andrew Yu et Jolly Chen.
|
|
|
|
|
|
Beaucoup d'autres personnes ont contribu<EFBFBD> au portage, aux tests,
|
|
|
|
|
|
au d<EFBFBD>boguage et <EFBFBD> l'am<EFBFBD>lioration du code. Le code de Postgres
|
|
|
|
|
|
original, duquel PostgreSQL est d<EFBFBD>riv<EFBFBD>, <EFBFBD>tait le fruit de
|
|
|
|
|
|
l'effort de nombreux <EFBFBD>tudiants dipl<EFBFBD>m<EFBFBD>s et non dipl<EFBFBD>m<EFBFBD>s, et de
|
|
|
|
|
|
programmeurs travaillant sous la direction du Professeur Michael
|
|
|
|
|
|
Stonebraker <EFBFBD> l'universit<EFBFBD> de Californie, Berkeley.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Le nom original du logiciel <EFBFBD> Berkeley <EFBFBD>tait Postgres. Quand le
|
|
|
|
|
|
<SMALL>SQL</SMALL> fut ajout<EFBFBD> en 1995, le nom a d<EFBFBD> <EFBFBD>tre chang<EFBFBD> en
|
|
|
|
|
|
Postgres95. Fin 1996, le nom fut chang<EFBFBD> en PostgreSQL.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL est distribu<EFBFBD> sous la licence suivante :</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL Data Base Management System</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Portions copyright (c) 1996-2004, PostgreSQL Global Development
|
|
|
|
|
|
Group Portions Copyright (c) 1994-6 Regents of the University of
|
|
|
|
|
|
California</P>
|
|
|
|
|
|
|
|
|
|
|
|
<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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>En g<EFBFBD>n<EFBFBD>ral, tout environnement compatible Unix moderne devrait
|
|
|
|
|
|
pouvoir faire fonctionner PostgreSQL. Les environnements qui ont <EFBFBD>t<EFBFBD>
|
|
|
|
|
|
test<EFBFBD>s explicitement sont list<EFBFBD>s dans les instructions
|
|
|
|
|
|
d'installation.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P><STRONG>Client</STRONG></P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il est possible de compiler la biblioth<EFBFBD>que C <I>libpq</I>,
|
|
|
|
|
|
psql et d'autres interfaces et applications clientes pour
|
|
|
|
|
|
qu'elles tournent sous des environnements MS Windows. Dans ce cas,
|
|
|
|
|
|
le client tourne sous MS Windows et communique par TCP/IP avec un
|
|
|
|
|
|
serveur tournant sous un environnement Unix support<EFBFBD>. Un fichier
|
|
|
|
|
|
<I>win32.mak</I> est inclus dans la distribution pour construire
|
|
|
|
|
|
une biblioth<EFBFBD>que <I>libpq</I> <I>psql</I> Win32. PostgreSQL
|
|
|
|
|
|
communique aussi avec des clients <SMALL>ODBC</SMALL>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P><STRONG>Serveur</STRONG></P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Le serveur de base de donn<EFBFBD>es peut tourner sous Windows NT et
|
|
|
|
|
|
Windows 2000 en utilisant Cygwin, la biblioth<EFBFBD>que de portage
|
|
|
|
|
|
Unix/NT de Cygnus. Voir
|
|
|
|
|
|
<I>pgsql/doc/FAQ_MSWIN</I> dans la distribution ou la FAQ MS
|
|
|
|
|
|
Windows sur <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">
|
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<p>Un port natif sur MS Windows NT/2000/XP est en court. Pour plus de
|
|
|
|
|
|
d<EFBFBD>tails sur le statut actuel de PostgreSQL sur Windows, voir
|
|
|
|
|
|
<a href="http://techdocs.postgresql.org/guides/Windows">
|
|
|
|
|
|
http://techdocs.postgresql.org/guides/Windows</a> et
|
|
|
|
|
|
<a href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
|
|
|
|
|
|
http://momjian.postgresql.org/main/writings/pgsql/win32.html</a>.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<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<EFBFBD> puis-je me procurer PostgreSQL ?</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<EFBFBD> puis-je obtenir du support ?</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) :</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 <EFBFBD> <A href=
|
|
|
|
|
|
"mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
|
|
|
|
|
|
avec dans le corps :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
subscribe
|
|
|
|
|
|
end
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
Les recueils sont envoy<EFBFBD>s aux membres de cette liste d<EFBFBD>s que la
|
|
|
|
|
|
liste principale a re<EFBFBD>u 30 Ko de messages.
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
|
|
|
|
|
|
envoyer un courriel <EFBFBD> <A href=
|
|
|
|
|
|
"mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
|
|
|
|
|
|
avec dans le corps :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
subscribe
|
|
|
|
|
|
end
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
Une liste de diffusion pour les d<EFBFBD>veloppeurs est aussi disponible. Pour s'y
|
|
|
|
|
|
inscrire, envoyez un courriel <EFBFBD> <A href=
|
|
|
|
|
|
"mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
|
|
|
|
|
|
avec dans le corps :
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
subscribe
|
|
|
|
|
|
end
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous pouvez trouver d'autres listes et informations sur
|
|
|
|
|
|
PostgreSQL sur le site web de PostgreSQL :</P>
|
|
|
|
|
|
|
|
|
|
|
|
<BLOCKQUOTE>
|
|
|
|
|
|
<A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
|
|
|
|
|
|
</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<EFBFBD>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<EFBFBD>re version ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La derni<EFBFBD>re version de PostgreSQL est la version 7.4.3.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Nous projetons de sortir une version majeure tous les six <EFBFBD> huit
|
|
|
|
|
|
mois.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.8">1.8</A>) Quelle documentation est disponible ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de
|
|
|
|
|
|
test sont inclus dans la distribution. Voir le r<EFBFBD>pertoire
|
|
|
|
|
|
<I>/doc</I>. Vous pouvez aussi acc<EFBFBD>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 <EFBFBD>tre achet<EFBFBD>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<EFBFBD>de des commandes \d pratiques montrant des
|
|
|
|
|
|
informations sur les types, op<EFBFBD>rateurs, fonctions, aggr<EFBFBD>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<EFBFBD>s manquantes ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL supporte un sous-ensemble <EFBFBD>tendu de <SMALL>SQL</SMALL>-92.
|
|
|
|
|
|
Voir notre liste <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
|
|
|
|
|
|
pour les bogues connus, les fonctionnalit<EFBFBD>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> ?</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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Oui, nous manipulons facilement les dates apr<EFBFBD>s et avant l'an 2000.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'<EFBFBD>quipe de d<EFBFBD>veloppement ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Tout d'abord, t<EFBFBD>l<EFBFBD>chargez les derniers sources et lisez la
|
|
|
|
|
|
documentation pour les d<EFBFBD>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<EFBFBD> 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<EFBFBD> qu'il <EFBFBD>tait devenu
|
|
|
|
|
|
impossible aux d<EFBFBD>veloppeurs de tenir la cadence et nous avions
|
|
|
|
|
|
confiance dans le qualit<EFBFBD> des correctifs qu'ils soumettaient.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de
|
|
|
|
|
|
bogue ?</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<EFBFBD>on de soumettre un rapport de bogue.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>De m<EFBFBD>me, v<EFBFBD>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<EFBFBD>cente ou des
|
|
|
|
|
|
correctifs.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til <EFBFBD>
|
|
|
|
|
|
d'autres <SMALL>SGBD</SMALL> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il y a plusieurs mani<EFBFBD>res de mesurer un logiciel : les fonctionnalit<EFBFBD>s,
|
|
|
|
|
|
les performances, la fiabilit<EFBFBD>, le support, et le prix.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<DL>
|
|
|
|
|
|
<DT><B>Fonctionnalit<EFBFBD>s</B></DT>
|
|
|
|
|
|
|
|
|
|
|
|
<DD>PostgreSQL poss<EFBFBD>de la plupart des fonctionnalit<EFBFBD>s pr<EFBFBD>sentes
|
|
|
|
|
|
dans les <SMALL>SGBD</SMALL> commerciaux, comme les
|
|
|
|
|
|
transactions, les requ<EFBFBD>tes imbriqu<EFBFBD>es, les d<EFBFBD>clencheurs,
|
|
|
|
|
|
les vues, l'int<EFBFBD>grit<EFBFBD> r<EFBFBD>f<EFBFBD>rentielle par cl<EFBFBD>s <EFBFBD>trang<EFBFBD>res, et le
|
|
|
|
|
|
verrouillage sophistiqu<EFBFBD>. Nous avons des fonctionnalit<EFBFBD>s qu'ils
|
|
|
|
|
|
n'ont pas, comme les types d<EFBFBD>finis par l'utilisateur,
|
|
|
|
|
|
l'h<EFBFBD>ritage, les r<EFBFBD>gles, et le contr<EFBFBD>le de concurrence par
|
|
|
|
|
|
multi-versionnage pour r<EFBFBD>duire les contentions de verrouillage.<BR>
|
|
|
|
|
|
<BR>
|
|
|
|
|
|
</DD>
|
|
|
|
|
|
|
|
|
|
|
|
<DT><B>Performances</B></DT>
|
|
|
|
|
|
|
|
|
|
|
|
<DD>PostgreSQL a des performances similaires aux autres bases de
|
|
|
|
|
|
donn<EFBFBD>es commerciales et open source. Il est plus rapide pour
|
|
|
|
|
|
certaines op<EFBFBD>rations, plus lent pour d'autres. Par rapport <EFBFBD>
|
|
|
|
|
|
MySQL ou d'autres <SMALL>SGBD</small> plus l<EFBFBD>ger, nous sommes
|
|
|
|
|
|
plus rapides pour de nombreux utilisateurs, des requ<EFBFBD>tes complexes et
|
|
|
|
|
|
une charge pour les requ<EFBFBD>tes de lecture/<EFBFBD>criture. MySQL est plus rapide
|
|
|
|
|
|
pour des requ<EFBFBD>tes SELECT simples effectu<EFBFBD>es par quelques utilisateurs.
|
|
|
|
|
|
Bien s<EFBFBD>r, MySQL ne poss<EFBFBD>de aucune des fonctionnalit<EFBFBD>s de la section
|
|
|
|
|
|
<I>Fonctionnalit<EFBFBD>s</I> ci-dessus. PostgreSQL est construit pour la
|
|
|
|
|
|
fiabilit<EFBFBD> et les fonctionnalit<EFBFBD>s et nous continuons <EFBFBD> am<EFBFBD>liorer les
|
|
|
|
|
|
performances <EFBFBD> chaque version. Il y a une page web int<EFBFBD>ressante
|
|
|
|
|
|
qui compare PostgreSQL <EFBFBD> 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<EFBFBD>t<EFBFBD> qui distribue son produit via l'open source et requiert
|
|
|
|
|
|
une licence commerciale pour les logiciels propri<EFBFBD>taires, donc pas une
|
|
|
|
|
|
communaut<EFBFBD> de d<EFBFBD>veloppement open source comme PostgreSQL.<BR>
|
|
|
|
|
|
|
|
|
|
|
|
<BR>
|
|
|
|
|
|
</DD>
|
|
|
|
|
|
|
|
|
|
|
|
<DT><B>Fiabilit<EFBFBD></B></DT>
|
|
|
|
|
|
|
|
|
|
|
|
<DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit <EFBFBD>tre
|
|
|
|
|
|
fiable ou bien il est inutile. Nous faisons le maximum pour
|
|
|
|
|
|
sortir des versions bien test<EFBFBD>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<EFBFBD>tes pour une
|
|
|
|
|
|
utilisation en environnement de production. Nous pensons que
|
|
|
|
|
|
nous nous comparons favorablement aux autres bases de donn<EFBFBD>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<EFBFBD>veloppeurs et d'utilisateurs afin d'aider <EFBFBD> la
|
|
|
|
|
|
r<EFBFBD>solution des probl<EFBFBD>mes rencontr<EFBFBD>s. Nous ne pouvons garantir
|
|
|
|
|
|
un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le
|
|
|
|
|
|
garantissent pas toujours non plus. L'acc<EFBFBD>s direct aux
|
|
|
|
|
|
d<EFBFBD>veloppeurs, <EFBFBD> la communaut<EFBFBD> d'utilisateurs, aux manuels, et
|
|
|
|
|
|
au code source, fait du support pour PostgreSQL un support
|
|
|
|
|
|
sup<EFBFBD>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<EFBFBD>es celles cit<EFBFBD>es dans notre
|
|
|
|
|
|
licence de type BSD donn<EFBFBD>e plus haut.<BR>
|
|
|
|
|
|
<BR>
|
|
|
|
|
|
</DD>
|
|
|
|
|
|
</DL>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.15">1.15</A>) Comment puis-je aider financi<EFBFBD>rement
|
|
|
|
|
|
PostgreSQL ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL poss<EFBFBD>de une infrastructure de premi<EFBFBD>re classe depuis
|
|
|
|
|
|
le d<EFBFBD>but en 1996. Ceci gr<EFBFBD>ce <EFBFBD> Marc Fournier, qui a cr<EFBFBD><EFBFBD> et g<EFBFBD>r<EFBFBD>
|
|
|
|
|
|
cette infrastructure des ann<EFBFBD>es durant.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une infrastructure de qualit<EFBFBD> est importante pour un projet
|
|
|
|
|
|
open-source. Cela permet d'emp<EFBFBD>cher l'<EFBFBD>parpillement qui ralentirait
|
|
|
|
|
|
beaucoup l'avancement du projet.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Bien s<EFBFBD>r, cette infrastructure n'est pas donn<EFBFBD>e. Elle requiert
|
|
|
|
|
|
un certain nombre de d<EFBFBD>penses mensuelles ou ponctuelles. Si vous
|
|
|
|
|
|
ou votre soci<EFBFBD>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<EFBFBD>es pour soutenir le
|
|
|
|
|
|
projet PostgreSQL et ne soutiennent aucune soci<EFBFBD>t<EFBFBD> que ce soit. Si
|
|
|
|
|
|
vous le pr<EFBFBD>f<EFBFBD>rez, vous pouvez aussi envoyer un ch<EFBFBD>que <EFBFBD> l'adresse
|
|
|
|
|
|
de contact.</P>
|
|
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
|
|
|
|
<P>De plus, si vous avez une histoire de succ<EFBFBD>s avec PostgreSQL,
|
|
|
|
|
|
merci de la soumettre <EFBFBD> notre site d'<EFBFBD>vang<EFBFBD>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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC
|
|
|
|
|
|
et OpenLink <SMALL>ODBC</SMALL>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous pouvez t<EFBFBD>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 <EFBFBD>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<EFBFBD> de support professionnelle mais une version freeware sera
|
|
|
|
|
|
toujours disponible. Merci d'envoyer vos questions <EFBFBD> <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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une bonne introduction aux pages Web adoss<EFBFBD>s <EFBFBD> une base de donn<EFBFBD>es se
|
|
|
|
|
|
trouve <EFBFBD> <A href="http://www.webreview.com">http://www.webreview.com</A></P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Pour l'int<EFBFBD>gration Web, PHP est une excellente interface. Elle se trouve <EFBFBD> <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 ?</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<EFBFBD>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<EFBFBD>taill<EFBFBD>e.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour
|
|
|
|
|
|
communiquer avec PostgreSQL ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La plupart des langages de programmation couramment utilis<EFBFBD>s ont
|
|
|
|
|
|
une interface pour PostgreSQL. V<EFBFBD>rifiez la liste des modules de votre
|
|
|
|
|
|
langage.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les interfaces ci-dessous sont incluses dans la distribution :</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<EFBFBD>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> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il faut sp<EFBFBD>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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Cela peut <EFBFBD>tre d<EFBFBD> <EFBFBD> une vari<EFBFBD>t<EFBFBD> de probl<EFBFBD>mes mais v<EFBFBD>rifiez d'abord que
|
|
|
|
|
|
vous avez les extensions System V install<EFBFBD>es pour votre noyau. PostgreSQL
|
|
|
|
|
|
n<EFBFBD>cessite le support noyau pour la m<EFBFBD>moire partag<EFBFBD>e et les s<EFBFBD>maphores.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Soit vous n'avez pas configur<EFBFBD> correctement la m<EFBFBD>moire partag<EFBFBD>e dans
|
|
|
|
|
|
votre noyau, soit vous devez augmenter la m<EFBFBD>moire partag<EFBFBD>e disponible dans
|
|
|
|
|
|
le noyau. Le montant exact dont vous avez besoin d<EFBFBD>pend de votre
|
|
|
|
|
|
architecture et du nombre de tampons et de processus que vous avez
|
|
|
|
|
|
configur<EFBFBD> pour <I>postmaster</I>. Pour la plupart des syst<EFBFBD>mes avec un
|
|
|
|
|
|
nombre par d<EFBFBD>faut de tampons et de processus, vous aurez besoin d'un minimum
|
|
|
|
|
|
d'environ 1 Mo. Voir le chapitre <A href=
|
|
|
|
|
|
"http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration
|
|
|
|
|
|
du manuel PostgreSQL</A> pour des informations plus d<EFBFBD>taill<EFBFBD>es sur la m<EFBFBD>moire partag<EFBFBD>e et les s<EFBFBD>maphores.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?</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<EFBFBD> avec
|
|
|
|
|
|
suffisamment de s<EFBFBD>maphores. PostgreSQL a besoin d'un s<EFBFBD>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<EFBFBD>tre inf<EFBFBD>rieur au choix par d<EFBFBD>faut de 32. Une
|
|
|
|
|
|
solution permanente est d'augmenter les param<EFBFBD>tres
|
|
|
|
|
|
<SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Des s<EFBFBD>maphores inop<EFBFBD>rantes peuvent aussi provoquer des plantages pendant de gros acc<EFBFBD>s <EFBFBD> la base de donn<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Si le message d'erreur est autre chose, vous n'avez peut-<EFBFBD>tre pas du tout le support des
|
|
|
|
|
|
s<EFBFBD>maphores dans votre noyau. Voir le
|
|
|
|
|
|
chapitre <A href=
|
|
|
|
|
|
"http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration
|
|
|
|
|
|
du manuel PostgreSQL</A> pour des informations plus d<EFBFBD>taill<EFBFBD>es sur la m<EFBFBD>moire partag<EFBFBD>e et les s<EFBFBD>maphores.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.5">3.5</A>) Comment contr<EFBFBD>ler les connexions d'autres machines ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Par d<EFBFBD>faut, PostgreSQL n'autorise que les connexions de la machine locale
|
|
|
|
|
|
utilisant les sockets de domaine Unix. D'autres machines ne seront pas
|
|
|
|
|
|
capables de se connecter sauf si vous configurez tcpip_sockets dans <I>postgresql.conf</I>
|
|
|
|
|
|
<B>et</B> activez l'authentification bas<EFBFBD>e sur l'h<EFBFBD>te en modifiant le fichier
|
|
|
|
|
|
<I>$PGDATA/pg_hba.conf</I> en cons<EFBFBD>quence. Ceci autorisera les connexions TCP/IP.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.6">3.6</A>) Comment r<EFBFBD>gler le moteur de la base de donn<EFBFBD>es pour de meilleures performances ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Des index acc<EFBFBD>l<EFBFBD>reront les requ<EFBFBD>tes. La commande
|
|
|
|
|
|
<SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite
|
|
|
|
|
|
votre requ<EFBFBD>te et quels index sont utilis<EFBFBD>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<EFBFBD>ment,
|
|
|
|
|
|
les requ<EFBFBD>tes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL>
|
|
|
|
|
|
sont consid<EFBFBD>r<EFBFBD>s comme <EFBFBD>tant dans leur propre transaction. Envisagez de faire
|
|
|
|
|
|
plusieurs instructions dans un seul bloc de transaction. Ceci r<EFBFBD>duira la
|
|
|
|
|
|
surcharge apport<EFBFBD>e par les transactions. Aussi, envisagez d'abandonner et
|
|
|
|
|
|
de recr<EFBFBD>er des index lors de grosses modifications de donn<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il y a plusieurs options d'optimisations. Vous pouvez d<EFBFBD>sactiver
|
|
|
|
|
|
<I>fsync()</I> en lan<EFBFBD>ant <I>postmaster</I> avec l'option <I>-o -F</I>.
|
|
|
|
|
|
Ceci emp<EFBFBD>chera les <I>fsync()</I>s d'<EFBFBD>crire sur disque apr<EFBFBD>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<EFBFBD>moire partag<EFBFBD>e utilis<EFBFBD>s par les
|
|
|
|
|
|
processus serveurs. Si vous fixez ce param<EFBFBD>tre trop haut,
|
|
|
|
|
|
<I>postmaster</I> ne se lancera pas car vous avez d<EFBFBD>pass<EFBFBD> la limite de
|
|
|
|
|
|
votre noyau sur la quantit<EFBFBD> de m<EFBFBD>moire partag<EFBFBD>e. Chaque tampon fait 8 Ko et
|
|
|
|
|
|
le choix par d<EFBFBD>faut est de 64 tampons.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la
|
|
|
|
|
|
quantit<EFBFBD> maximale de m<EFBFBD>moire utilis<EFBFBD>e par les processus serveurs pour des
|
|
|
|
|
|
tris temporaires. La valeur de <I>-S</I> est mesur<EFBFBD> en kilooctets et le
|
|
|
|
|
|
choix par d<EFBFBD>faut est de 512 (c'est-<EFBFBD>-dire 512 Ko).</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper
|
|
|
|
|
|
vos donn<EFBFBD>es en tables pour correspondre <EFBFBD> un index. Voir la page de manual
|
|
|
|
|
|
<SMALL>CLUSTER</SMALL> pour plus de d<EFBFBD>tails.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.7">3.7</A>) Quelles fonctionalit<EFBFBD>s de d<EFBFBD>boguage sont disponibles ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL a plusieurs fonctionalit<EFBFBD>s qui permettent de recueillir des
|
|
|
|
|
|
informations de statut qui peuvent <EFBFBD>tre utile pour des intentions de
|
|
|
|
|
|
d<EFBFBD>boguage.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>D'abord, en lan<EFBFBD>ant <I>configure</I> avec l'option --enable-cassert,
|
|
|
|
|
|
beaucoup d'<I>assert()</I>s surveillent le serveur et arr<EFBFBD>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<EFBFBD>boguage de disponible. D'abord, quand vous lancez <I>postmaster</I>,
|
|
|
|
|
|
v<EFBFBD>rifiez que vous envoyez les sorties standard et d'erreur dans un fichier
|
|
|
|
|
|
de traces comme :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
cd /usr/local/pgsql
|
|
|
|
|
|
./bin/postmaster >server.log 2>&1 &
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Ceci va cr<EFBFBD>er un fichier server.log dans le r<EFBFBD>pertoire racine de
|
|
|
|
|
|
PostgreSQL. Ce fichier contient des informations utiles sur les probl<EFBFBD>mes
|
|
|
|
|
|
ou erreurs rencontr<EFBFBD>s par le serveur. <I>Postmaster</I> dispose d'une
|
|
|
|
|
|
option <I>-d</I> qui permet de rapporter des informations encore plus
|
|
|
|
|
|
d<EFBFBD>taill<EFBFBD>es d'<EFBFBD>tre rapport<EFBFBD>es. L'option <I>-d</I> prend un num<EFBFBD>ro qui
|
|
|
|
|
|
sp<EFBFBD>cifie le niveau de d<EFBFBD>boguage. Faites attention au fait que des valeurs
|
|
|
|
|
|
<EFBFBD>l<EFBFBD>v<EFBFBD>es de niveau de d<EFBFBD>boguage g<EFBFBD>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<EFBFBD>te
|
|
|
|
|
|
<SMALL>SQL</SMALL> directement. Ceci est recommand<EFBFBD> <B>seulement</B> pour
|
|
|
|
|
|
des fonctions de d<EFBFBD>boguage. Notez qu'un retour chariot termine la requ<EFBFBD>te,
|
|
|
|
|
|
pas un point-virgule. Si vous compilez avec les symboles de d<EFBFBD>boguage, vous
|
|
|
|
|
|
pouvez utiliser un d<EFBFBD>bogueur pour voir ce qui se passe. Parce que le serveur
|
|
|
|
|
|
n'a pas <EFBFBD>t<EFBFBD> lanc<EFBFBD> par <I>postmaster</I>, il ne tourne pas dans un environnement
|
|
|
|
|
|
identique et les probl<EFBFBD>mes d'interaction de verrouillage/serveur ne peuvent
|
|
|
|
|
|
<EFBFBD>tre dupliqu<EFBFBD>s.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans
|
|
|
|
|
|
une fen<EFBFBD>tre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I>
|
|
|
|
|
|
utilis<EFBFBD> par <I>psql</I>. Utilisez un d<EFBFBD>bogueur pour l'attacher au
|
|
|
|
|
|
<SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arr<EFBFBD>t
|
|
|
|
|
|
dans le d<EFBFBD>bogueur et envoyez des requ<EFBFBD>tes de <I>psql</I>. Si vous d<EFBFBD>boguez
|
|
|
|
|
|
le d<EFBFBD>marrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis
|
|
|
|
|
|
lancez <I>psql</I>. Ceci va retarder le d<EFBFBD>marrage de <I>n</I> secondes
|
|
|
|
|
|
pour que vous puissiez attacher un d<EFBFBD>bogueur au processus, fixer des points
|
|
|
|
|
|
d'arr<EFBFBD>t et continuer la s<EFBFBD>quence de d<EFBFBD>marrage.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I>
|
|
|
|
|
|
qui peuvent <EFBFBD>tre utile pour des mesures de d<EFBFBD>boguage et de performance.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous pouvez compiler avec les options de performance pour voir quelles
|
|
|
|
|
|
fonctions prennent du temps d'ex<EFBFBD>cution. Les fichiers de gestion du serveur
|
|
|
|
|
|
seront d<EFBFBD>pos<EFBFBD>s dans le r<EFBFBD>pertoire <I>pgsql/data/base/nom_db</I>. Les
|
|
|
|
|
|
fichiers de gestion clients seront mis dans le r<EFBFBD>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 ?</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<EFBFBD>faut est de 32 processus. Vous pouvez l'augmenter en
|
|
|
|
|
|
relan<EFBFBD>ant <I>postmaster</I> avec une valeur <I>-N</I> appropri<EFBFBD>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<EFBFBD>faut 64 ;
|
|
|
|
|
|
<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<EFBFBD>rifier incluent la taille maximale des blocs de
|
|
|
|
|
|
m<EFBFBD>moire partag<EFBFBD>e, <SMALL>SHMMAX</SMALL> ; le nombre maximal de
|
|
|
|
|
|
s<EFBFBD>maphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> ; le
|
|
|
|
|
|
nombre maximal de processus, <SMALL>NPROC</SMALL> ; le nombre maximal
|
|
|
|
|
|
de processus par utilisateur, <SMALL>MAXUPRC</SMALL> ; 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<EFBFBD>s est pour que votre syst<EFBFBD>me ne tombe pas <EFBFBD> court de
|
|
|
|
|
|
ressources.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.9">3.9</A>) Que contient le r<EFBFBD>pertoire <I>pgsql_tmp</I> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Ce r<EFBFBD>pertoire contient des fichiers temporaires g<EFBFBD>n<EFBFBD>r<EFBFBD>s par le moteur de
|
|
|
|
|
|
requ<EFBFBD>te. Par exemple, si un tri doit <EFBFBD>tre fait pour satisfaire un
|
|
|
|
|
|
<SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le param<EFBFBD>tre
|
|
|
|
|
|
<I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront cr<EFBFBD><EFBFBD>s
|
|
|
|
|
|
pour contenir les donn<EFBFBD>es n<EFBFBD>cessaires.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les fichiers temporaires sont d'habitude effac<EFBFBD>s automatiquement mais
|
|
|
|
|
|
peuvent rester si un serveur s'arr<EFBFBD>te brutalement pendant un tri. Un arr<EFBFBD>t
|
|
|
|
|
|
et un red<EFBFBD>marrage de <I>postmaster</I> effacera les fichiers dans ces
|
|
|
|
|
|
r<EFBFBD>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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>L'<EFBFBD>quipe PostgreSQL ne fait que des changements mineurs entre des
|
|
|
|
|
|
versions mineurs, donc mettre <EFBFBD> jour de 7.2 vers 7.2.1 ne n<EFBFBD>cessitera pas
|
|
|
|
|
|
de sauvegarde et de restauration. Par contre, les sorties majeures
|
|
|
|
|
|
(c'est-<EFBFBD>-dire de 7.2 vers 7.3) changent souvent le format interne des tables
|
|
|
|
|
|
syst<EFBFBD>mes et des fichiers de donn<EFBFBD>es. Ces modifications sont souvent
|
|
|
|
|
|
complexes alors nous ne gardons pas de compatibilit<EFBFBD> descendante pour les
|
|
|
|
|
|
fichiers de donn<EFBFBD>es. Une sauvegarde exportera les donn<EFBFBD>es dans un format
|
|
|
|
|
|
g<EFBFBD>n<EFBFBD>rique qui peut ensuite <EFBFBD>tre charg<EFBFBD> dans le nouveau format interne.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Dans les sorties o<EFBFBD> le format sur disque ne change pas, le script
|
|
|
|
|
|
<I>pg_upgrade</I> peut <EFBFBD>tre utilis<EFBFBD> pour mettre <EFBFBD> jour sans
|
|
|
|
|
|
sauvegarde/restauration. Les notes de sorties pr<EFBFBD>cisent si <I>pg_upgrade</I>
|
|
|
|
|
|
est disponible pour la sortie.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.11">3.11</A>) Quels mat<EFBFBD>riels dois-je utiliser ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Comme le mat<EFBFBD>riel PC est compatible en grosse partie, les gens ont
|
|
|
|
|
|
tendance <EFBFBD> croire que tous les mat<EFBFBD>riels PC sont de m<EFBFBD>me qualit<EFBFBD>. Ce n'est
|
|
|
|
|
|
pas le cas. La RAM ECC, le SCSI et les cartes-m<EFBFBD>re de qualit<EFBFBD> sont plus
|
|
|
|
|
|
fiables et ont de meilleurs performances qu'un mat<EFBFBD>riel moins co<EFBFBD>teux.
|
|
|
|
|
|
PostgreSQL fonctionnera sur <EFBFBD> peu pr<EFBFBD>s tout mat<EFBFBD>riel mais si la fiabilit<EFBFBD> et
|
|
|
|
|
|
la performance sont importantes pour vous, il est rus<EFBFBD> de bien consid<EFBFBD>rer
|
|
|
|
|
|
les options mat<EFBFBD>rielles. Nos listes de diffusion peuvent <EFBFBD>tre utilis<EFBFBD>es pour
|
|
|
|
|
|
discuter des options mat<EFBFBD>riels.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Questions fonctionnelles</H2>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.1">4.1</A>) Quelle est la diff<EFBFBD>rence entre curseur binaire
|
|
|
|
|
|
et curseur normal ?</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<EFBFBD>res lignes d'une requ<EFBFBD>te ? Sur une ligne al<EFBFBD>atoire ?</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<EFBFBD>gralit<EFBFBD> de la requ<EFBFBD>te doive <EFBFBD>tre <EFBFBD>valu<EFBFBD>e,
|
|
|
|
|
|
m<EFBFBD>me si vous voulez seulement les premi<EFBFBD>res lignes. Envisagez
|
|
|
|
|
|
d'utiliser une requ<EFBFBD>te avec une clause <SMALL>ORDER
|
|
|
|
|
|
BY</SMALL>. S'il existe un index correspondant <EFBFBD> l'<SMALL>ORDER
|
|
|
|
|
|
BY</SMALL>, PostgreSQL peut n'<EFBFBD>valuer que les premi<EFBFBD>res lignes, sinon
|
|
|
|
|
|
l'int<EFBFBD>gralit<EFBFBD> de la requ<EFBFBD>te peut <EFBFBD>tre <EFBFBD>valu<EFBFBD>e, jusqu'<EFBFBD> g<EFBFBD>n<EFBFBD>rer les lignes
|
|
|
|
|
|
d<EFBFBD>sir<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne al<EFBFBD>atoire :
|
|
|
|
|
|
<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> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour
|
|
|
|
|
|
une liste compl<EFBFBD>te de commandes <EFBFBD> l'int<EFBFBD>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<EFBFBD>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<EFBFBD>tes qu'il utilise pour ex<EFBFBD>cuter
|
|
|
|
|
|
les commandes que vous lui passez. PostgreSQL fournit aussi une interface
|
|
|
|
|
|
d'informations sur le sch<EFBFBD>ma compatible avec <I>SQLi</I> que vous pouvez
|
|
|
|
|
|
interroger des informations sur la base de donn<EFBFBD>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<EFBFBD>es ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La fonction <SMALL>DROP COLUMN</SMALL> a <EFBFBD>t<EFBFBD> ajout<EFBFBD>e dans la version 7.3
|
|
|
|
|
|
avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions pr<EFBFBD>c<EFBFBD>dentes,
|
|
|
|
|
|
vous pouvez faire :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
BEGIN;
|
|
|
|
|
|
LOCK TABLE ancienne_table;
|
|
|
|
|
|
SELECT ... -- s<EFBFBD>lectionnez toutes les colonnes sauf celle <EFBFBD> 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<EFBFBD>es d'une colonne, faites :</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<EFBFBD>cup<EFBFBD>rer l'espace
|
|
|
|
|
|
disque utilis<EFBFBD> par les lignes expir<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
|
|
|
|
|
|
une table, une base de donn<EFBFBD>es ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les limites sont :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
Taille maximum pour une base de donn<EFBFBD>es illimit<EFBFBD>e (il existe des bases de 32 To)
|
|
|
|
|
|
Taille maximum pour une table 32 To
|
|
|
|
|
|
Taille maximum pour une ligne 1,6 To
|
|
|
|
|
|
Taille maximum pour un champ 1 Go
|
|
|
|
|
|
Nombre maximum de lignes dans une table illimit<EFBFBD>
|
|
|
|
|
|
Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
|
|
|
|
|
|
Nombre maximum d'index sur une table illimit<EFBFBD>
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Bien s<EFBFBD>r, ces valeurs ne sont pas vraiment illimit<EFBFBD>e, elles sont limit<EFBFBD>es
|
|
|
|
|
|
par l'espace disque disponible, ainsi que par l'espace de m<EFBFBD>moire et de swap.
|
|
|
|
|
|
Les performances peuvent se d<EFBFBD>grader si ces valeurs sont inhabituellement
|
|
|
|
|
|
grandes.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La taille maximum des tables (32 To) ne n<EFBFBD>cessite pas que le syst<EFBFBD>me
|
|
|
|
|
|
d'exploitation supporte les grands fichiers. Les grandes tables sont stock<EFBFBD>es
|
|
|
|
|
|
sous forme de fichiers multiples de 1 Go, donc les limites de taille du
|
|
|
|
|
|
syst<EFBFBD>me de fichier ne sont pas importantes.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>La taille maximum des tables et le nombre maximum de colonnes peuvent
|
|
|
|
|
|
<EFBFBD>tre quadripl<EFBFBD>s, si la taille des blocs par d<EFBFBD>faut est augment<EFBFBD>e <EFBFBD> 32 Ko.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
|
|
|
|
|
|
les donn<EFBFBD>es d'un fichier texte typique ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une base de donn<EFBFBD>es PostgreSQL peut utiliser jusqu'<EFBFBD> cinq fois
|
|
|
|
|
|
l'espace n<EFBFBD>cessaire pour stocker les donn<EFBFBD>es d'un fichier texte.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>A titre d'exemple, consid<EFBFBD>rez un fichier de 100 000 lignes, comportant
|
|
|
|
|
|
un entier et une cha<EFBFBD>ne de description sur chaque ligne. Supposons que la
|
|
|
|
|
|
cha<EFBFBD>ne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo.
|
|
|
|
|
|
La taille du fichier d'une base de donn<EFBFBD>es PostgreSQL peut <EFBFBD>tre
|
|
|
|
|
|
estim<EFBFBD>e <EFBFBD> 6,4 Mo :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
36 octets: chaque ligne (approximation)
|
|
|
|
|
|
24 octets: un champ 'entier' et un champ 'texte'
|
|
|
|
|
|
+ 4 octets: pointeur vers le tuple sur la page
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
|
64 octets par ligne
|
|
|
|
|
|
|
|
|
|
|
|
La taille des pages de donn<EFBFBD>es dans PostgreSQL est de 8192 octets (8 KO), donc :
|
|
|
|
|
|
|
|
|
|
|
|
8192 octets par page
|
|
|
|
|
|
---------------------- = 128 lignes par page de base de donn<EFBFBD>es (arrondi <EFBFBD> l'entier inf<EFBFBD>rieur)
|
|
|
|
|
|
64 octets par ligne
|
|
|
|
|
|
|
|
|
|
|
|
100000 lignes de donn<EFBFBD>es
|
|
|
|
|
|
------------------------- = 782 pages de base de donn<EFBFBD>es (arrondi <EFBFBD> l'entier sup<EFBFBD>rieur)
|
|
|
|
|
|
128 lignes par page
|
|
|
|
|
|
|
|
|
|
|
|
782 pages de base de donn<EFBFBD>es * 8192 octets par page = 6 406 144 octets (6,4 Mo)
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les index utilisent moins d'espace, mais ils contiennent les donn<EFBFBD>es index<EFBFBD>es,
|
|
|
|
|
|
ils peuvent donc <EFBFBD>galement <EFBFBD>tre grands.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les <SMALL>NULL</SMALL> sont stock<EFBFBD>s sous forme de bitmap, aussi
|
|
|
|
|
|
utilisent-ils tr<EFBFBD>s peu d'espace.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables,
|
|
|
|
|
|
bases de donn<EFBFBD>es et utilisateurs sont d<EFBFBD>finis ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P><I>psql</I> dispose de plusieurs commandes commen<EFBFBD>ant par un anti-slash
|
|
|
|
|
|
pour retrouver ces informations. Utilisez \? pour les conna<EFBFBD>tre. Il existe
|
|
|
|
|
|
aussi des tables syst<EFBFBD>mes, qui commencent par <I>pg_</I> et qui les
|
|
|
|
|
|
d<EFBFBD>crivent <EFBFBD>galement. Aussi, <I>psql -l</I> liste toutes les bases de
|
|
|
|
|
|
donn<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Essayez <EFBFBD>galement le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il
|
|
|
|
|
|
illustre un grand nombre de commandes <SMALL>SELECT</SMALL> n<EFBFBD>cessaires pour
|
|
|
|
|
|
r<EFBFBD>cup<EFBFBD>rer l'information des tables syst<EFBFBD>me de la base de donn<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.8">4.8</A>) Mes requ<EFBFBD>tes sont lentes ou ne font pas usage
|
|
|
|
|
|
des index. Pourquoi ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les index ne sont pas automatiquement utilis<EFBFBD>s par chaque requ<EFBFBD>te. Ils
|
|
|
|
|
|
sont utilis<EFBFBD>s uniquement si la table est plus grande qu'une certaine taille,
|
|
|
|
|
|
et si la requ<EFBFBD>te s<EFBFBD>lectionne seulement un faible pourcentage des lignes de la
|
|
|
|
|
|
table. Ceci est d<EFBFBD> au fait qu'un acc<EFBFBD>s disque al<EFBFBD>atoire caus<EFBFBD> par un parcours
|
|
|
|
|
|
d'index peut <EFBFBD>tre plus lent qu'une simple lecture de la table, ou parcours
|
|
|
|
|
|
s<EFBFBD>quentiel</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Pour d<EFBFBD>terminer si un index devrait <EFBFBD>tre utilis<EFBFBD>, PostgreSQL a besoin
|
|
|
|
|
|
des statistiques de la table. Ces statistiques sont collect<EFBFBD>es en lan<EFBFBD>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<EFBFBD>terminer s'il faut utiliser l'index.
|
|
|
|
|
|
Les statistiques sont <EFBFBD>galement utiles pour d<EFBFBD>terminer l'ordre optimal
|
|
|
|
|
|
des op<EFBFBD>rations de jointure. La collecte des statistiques devrait <EFBFBD>tre
|
|
|
|
|
|
effectu<EFBFBD>e r<EFBFBD>guli<EFBFBD>rement lorsque le contenu de la table change.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les index ne sont normalement pas utilis<EFBFBD>s pour les clauses <SMALL>ORDER BY</SMALL>
|
|
|
|
|
|
ou pour les jointures. Un parcours s<EFBFBD>quentiel suivi d'un tri explicite est
|
|
|
|
|
|
habituellement plus rapide qu'un parcours d'index pour une table importante.
|
|
|
|
|
|
Toutefois, <SMALL>LIMIT</SMALL> combin<EFBFBD> avec <SMALL>ORDER BY</SMALL>
|
|
|
|
|
|
utilisera souvent un index parce que seulement une petite partie de la table est
|
|
|
|
|
|
renvoy<EFBFBD>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 :</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<EFBFBD>res joker tels que <SMALL>LIKE</SMALL> ou
|
|
|
|
|
|
<I>~</I>, les index peuvent seulement <EFBFBD>tre utilis<EFBFBD>s dans certaines circonstances :</P>
|
|
|
|
|
|
<UL>
|
|
|
|
|
|
<LI>Le d<EFBFBD>but de la cha<EFBFBD>ne de recherche doit <EFBFBD>tre ancr<EFBFBD> au d<EFBFBD>part de la cha<EFBFBD>ne, c'est-<EFBFBD>-dire
|
|
|
|
|
|
<UL>
|
|
|
|
|
|
<LI>Les mod<EFBFBD>les pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI>
|
|
|
|
|
|
<LI>Les mod<EFBFBD>les d'expression r<EFBFBD>guli<EFBFBD>re pour <I>~</I> doivent commencer par
|
|
|
|
|
|
<I>^</I>.</LI>
|
|
|
|
|
|
</UL></LI>
|
|
|
|
|
|
<LI>La cha<EFBFBD>ne de recherche ne peut pas commencer par une classe de caract<EFBFBD>res, c'est-<EFBFBD>-dire
|
|
|
|
|
|
[a-e].</LI>
|
|
|
|
|
|
<LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et
|
|
|
|
|
|
<I>~*</I> n'utilisent pas les index. Utilisez plut<EFBFBD>t les index fonctionnels,
|
|
|
|
|
|
d<EFBFBD>crit dans la section <a href="#4.12">4.12</a>.</LI>
|
|
|
|
|
|
<LI>La locale <I>C</I> par d<EFBFBD>faut doit <EFBFBD>tre utilis<EFBFBD>e lors de
|
|
|
|
|
|
<i>initdb</i>.</LI>
|
|
|
|
|
|
</UL>
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur <EFBFBD>value
|
|
|
|
|
|
mes requ<EFBFBD>tes ?</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 ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Un index R-tree est utilis<EFBFBD> pour l'indexation des donn<EFBFBD>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<EFBFBD>es multi-dimensionnelles. Par exemple, si un index
|
|
|
|
|
|
R-tree peut <EFBFBD>tre construit sur un attribut de type <I>point</I>,
|
|
|
|
|
|
le syst<EFBFBD>me peut plus efficacement g<EFBFBD>rer les requ<EFBFBD>tes du type
|
|
|
|
|
|
"S<EFBFBD>lection de tous les points d'un rectangle".</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>L'article de r<EFBFBD>f<EFBFBD>rence qui d<EFBFBD>crit le syst<EFBFBD>me R-tree original est :</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 <EFBFBD>galement trouver ce papier dans le livre de Stonebraker
|
|
|
|
|
|
"Readings in Database Systems".</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les index R-tree int<EFBFBD>gr<EFBFBD>s peuvent prendre en charge les polyg<EFBFBD>nes et les bo<EFBFBD>tes.
|
|
|
|
|
|
En th<EFBFBD>orie, les R-trees peuvent <EFBFBD>tre <EFBFBD>tendus <EFBFBD> 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<EFBFBD>on de proc<EFBFBD>der.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur g<EFBFBD>n<EFBFBD>tique de
|
|
|
|
|
|
requ<EFBFBD>tes ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query
|
|
|
|
|
|
Optimizer</i>) acc<EFBFBD>l<EFBFBD>re l'optimisation des requ<EFBFBD>tes lors de jointures de
|
|
|
|
|
|
nombreuses tables par un algorithme g<EFBFBD>n<EFBFBD>tique (GA). Il permet la
|
|
|
|
|
|
gestion des grosses requ<EFBFBD>tes de jointures en utilisant une recherche non
|
|
|
|
|
|
exhaustive.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.12">4.12</A>) Comment puis-je r<EFBFBD>aliser des recherches sur des
|
|
|
|
|
|
expressions rationnelles ainsi que des recherches non sensibles <EFBFBD> la
|
|
|
|
|
|
casse ? Comment puis-je utiliser un index lors de recherches non
|
|
|
|
|
|
sensibles <EFBFBD> la casse ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>L'op<EFBFBD>rateur <I>~</I> r<EFBFBD>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 <EFBFBD> la casse est
|
|
|
|
|
|
<SMALL>ILIKE</SMALL>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Des comparaisons d'<EFBFBD>galit<EFBFBD> non sensibles <EFBFBD> la casse sont habituellement
|
|
|
|
|
|
exprim<EFBFBD>es de cette fa<EFBFBD>on :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
SELECT *
|
|
|
|
|
|
FROM table
|
|
|
|
|
|
WHERE lower(colonne) = 'abc';
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Ceci n'utilisera pas un index standard. N<EFBFBD>anmoins, si vous cr<EFBFBD>ez un index
|
|
|
|
|
|
fonctionnel, celui-ci sera utilis<EFBFBD> :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
CREATE INDEX tableindex ON table (lower(colonne));
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.13">4.13</A>) Comment puis-je d<EFBFBD>tecter si un champ est
|
|
|
|
|
|
<SMALL>NULL</SMALL> dans une requ<EFBFBD>te ?</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<EFBFBD>rences entre les nombreux
|
|
|
|
|
|
types de caract<EFBFBD>res ?</H4>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
Type Nom interne Notes
|
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
VARCHAR(n) varchar n sp<EFBFBD>cifie la taille maximum, sans remplissage
|
|
|
|
|
|
CHAR(n) bpchar des espaces sont ajout<EFBFBD>s pour obtenir la
|
|
|
|
|
|
longueur fixe sp<EFBFBD>cifi<EFBFBD>e
|
|
|
|
|
|
TEXT text pas de limite sup<EFBFBD>rieure pour la taille
|
|
|
|
|
|
BYTEA bytea tableau d'octets (accepte les octets nuls)
|
|
|
|
|
|
"char" char un caract<EFBFBD>re
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous verrez le nom interne en examinant les catalogues syst<EFBFBD>me et dans
|
|
|
|
|
|
quelques messages d'erreur.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les quatres premiers types du dessus sont des types "varlena"
|
|
|
|
|
|
(c'est-<EFBFBD>-dire que les quatre premiers octets correspondent <EFBFBD> la taille,
|
|
|
|
|
|
suivi des donn<EFBFBD>es). Donc, l'espace r<EFBFBD>ellement utilis<EFBFBD> est l<EFBFBD>g<EFBFBD>rement plus
|
|
|
|
|
|
grand que la taille d<EFBFBD>clar<EFBFBD>e. N<EFBFBD>anmoins, ces types de donn<EFBFBD>es sont aussi
|
|
|
|
|
|
sujet <EFBFBD> la compression ou <EFBFBD> un enregistrement en dehors de la table avec
|
|
|
|
|
|
<SMALL>TOAST</SMALL>, donc l'espace occup<EFBFBD> sur disque pourrait aussi <EFBFBD>tre
|
|
|
|
|
|
moindre que ce qu'on pourrait attendre.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des cha<EFBFBD>nes de
|
|
|
|
|
|
longueurs variables tout en limitant la taille de cette cha<EFBFBD>ne.
|
|
|
|
|
|
<SMALL>TEXT</SMALL> est utile pour les cha<EFBFBD>nes de longueur illimit<EFBFBD>e, avec
|
|
|
|
|
|
malgr<EFBFBD> tout un maximum de 1 Go.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P><SMALL>CHAR(n)</SMALL> est int<EFBFBD>ressant pour stocker des cha<EFBFBD>nes de taille
|
|
|
|
|
|
identique. <SMALL>CHAR(n)</SMALL> compl<EFBFBD>te avec des espaces pour arriver <EFBFBD>
|
|
|
|
|
|
la taille sp<EFBFBD>cifi<EFBFBD>e alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les
|
|
|
|
|
|
caract<EFBFBD>res donn<EFBFBD>s. <SMALL>BYTEA</SMALL> sert <EFBFBD> stocker des donn<EFBFBD>es binaires,
|
|
|
|
|
|
particuli<EFBFBD>rement les donn<EFBFBD>es incluant des octets <SMALL>NULL</SMALL>. Tous
|
|
|
|
|
|
les types d<EFBFBD>crits ici ont des performances similaires.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.15.1">4.15.1</A>) Comment puis-je cr<EFBFBD>er un champ s<EFBFBD>rie,
|
|
|
|
|
|
c'est-<EFBFBD>-dire s'incr<EFBFBD>mentant automatiquement ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL supporte un type de donn<EFBFBD>es <SMALL>SERIAL</SMALL>. Il cr<EFBFBD>e
|
|
|
|
|
|
automatiquement une s<EFBFBD>quence. Par exemple,
|
|
|
|
|
|
ceci :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
CREATE TABLE personne (
|
|
|
|
|
|
id SERIAL,
|
|
|
|
|
|
nom TEXT
|
|
|
|
|
|
);
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
est automatiquement traduit en ceci :
|
|
|
|
|
|
<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<EFBFBD>quences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque
|
|
|
|
|
|
ligne comme valeur unique. N<EFBFBD>anmoins, si vous avez besoin de sauvegarder
|
|
|
|
|
|
puis recharger la base de donn<EFBFBD>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 <EFBFBD> une insertion ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une approche pour r<EFBFBD>cup<EFBFBD>rer la prochaine valeur <SMALL>SERIAL</SMALL> <EFBFBD>
|
|
|
|
|
|
partir de l'objet s<EFBFBD>quence est d'utiliser la fonction <I>nextval()</I>
|
|
|
|
|
|
<I>avant</I> l'insertion et de l'ins<EFBFBD>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 <EFBFBD> ceci :</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<EFBFBD>e dans
|
|
|
|
|
|
<CODE>nouvelle_id</CODE> avec d'autres requ<EFBFBD>tes (c'est-<EFBFBD>-dire en tant que
|
|
|
|
|
|
cl<EFBFBD> <EFBFBD>trang<EFBFBD>re de la table <CODE>personne</CODE>). Notez que le nom de la
|
|
|
|
|
|
<SMALL>SEQUENCE</SMALL> automatiquement cr<EFBFBD><EFBFBD>e sera
|
|
|
|
|
|
<<I>table</I>>_<<I>colonneserial</I>>_<I>seq</I>, o<EFBFBD>
|
|
|
|
|
|
<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<EFBFBD>cup<EFBFBD>rer la valeur <SMALL>SERIAL</SMALL> affect<EFBFBD>e
|
|
|
|
|
|
avec la fonction <I>currval()</I> <I>apr<EFBFBD>s</I> qu'elle ait <EFBFBD>t<EFBFBD> ins<EFBFBD>r<EFBFBD>e par
|
|
|
|
|
|
d<EFBFBD>faut, c'est-<EFBFBD>-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<EFBFBD>
|
|
|
|
|
|
par l'instruction <SMALL>INSERT</SMALL> pour r<EFBFBD>cup<EFBFBD>rer la valeur par d<EFBFBD>faut
|
|
|
|
|
|
bien que cela soit l'appoche la moins portable et la valeur de l'OID se
|
|
|
|
|
|
r<EFBFBD>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->{pg_oid_status}</I> apr<EFBFBD>s un <I>$sth->execute()</I>.
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
|
|
|
|
|
|
<I>nextval()</I> n'am<EFBFBD>nent pas des probl<EFBFBD>mes lorsque plusieurs utilisateurs
|
|
|
|
|
|
les lancent en m<EFBFBD>me temps ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Non. <I>currval()</I> renvoie la valeur actuelle affect<EFBFBD>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<EFBFBD>ros de s<EFBFBD>quences ne sont pas
|
|
|
|
|
|
r<EFBFBD>-utilis<EFBFBD>s lors d'une annulation de transaction ? Pourquoi
|
|
|
|
|
|
existe-t'il des trous dans la num<EFBFBD>rotation de ma colonne s<EFBFBD>quentielle
|
|
|
|
|
|
(SERIAL) ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Pour am<EFBFBD>liorer les acc<EFBFBD>s concurrents, les valeurs de s<EFBFBD>quences sont
|
|
|
|
|
|
donn<EFBFBD>es aux transactions qui en ont besoin et ne sont pas bloqu<EFBFBD>es jusqu'<EFBFBD>
|
|
|
|
|
|
la fin de la transaction. Ceci cr<EFBFBD>e des trous dans le num<EFBFBD>rotage pour les
|
|
|
|
|
|
transactions annul<EFBFBD>es.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL> ?
|
|
|
|
|
|
Qu'est-ce qu'un <SMALL>TID</SMALL> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les <SMALL>OID</SMALL> sont la r<EFBFBD>ponse de PostgreSQL aux identifiants de
|
|
|
|
|
|
lignes uniques. Chaque ligne cr<EFBFBD><EFBFBD>e dans PostgreSQL obtient un
|
|
|
|
|
|
<SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> g<EFBFBD>n<EFBFBD>r<EFBFBD>s pendant
|
|
|
|
|
|
<I>initdb</I> sont inf<EFBFBD>rieurs <EFBFBD> 16384 (voir <I>include/access/transam.h</I>).
|
|
|
|
|
|
Tous les <SMALL>OID</SMALL> cr<EFBFBD><EFBFBD>s par un utilisateur sont sup<EFBFBD>rieurs ou
|
|
|
|
|
|
<EFBFBD>gaux <EFBFBD> ceci. Par d<EFBFBD>faut, tous ces <SMALL>OID</SMALL> sont uniques non
|
|
|
|
|
|
seulement dans une table ou une base mais unique <EFBFBD> l'int<EFBFBD>rieur d'une
|
|
|
|
|
|
installation PostgreSQL enti<EFBFBD>re.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables syst<EFBFBD>me interne
|
|
|
|
|
|
pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent <EFBFBD>tre
|
|
|
|
|
|
utilis<EFBFBD>s pour identifier des lignes utilisateurs sp<EFBFBD>cifiques et utilis<EFBFBD>s dans
|
|
|
|
|
|
des jointures. Il est recommand<EFBFBD> que vous utilisiez le type de colonne
|
|
|
|
|
|
<SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>.
|
|
|
|
|
|
Vous pouvez cr<EFBFBD>er un index sur le champ <SMALL>OID</SMALL> pour un acc<EFBFBD>s
|
|
|
|
|
|
plus rapide.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les <SMALL>OID</SMALL> sont attribu<EFBFBD>s pour toute ligne d'un endroit
|
|
|
|
|
|
central qui est utilis<EFBFBD> par toutes les bases de donn<EFBFBD>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 :</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<EFBFBD>s en tant qu'entiers de quatre octets
|
|
|
|
|
|
et d<EFBFBD>borderont <EFBFBD> quatre milliards. Personne n'a jamais rapport<EFBFBD> un tel cas
|
|
|
|
|
|
et nous avons pr<EFBFBD>vu de retirer la limite avant que cela ne se produise.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les <SMALL>TID</SMALL>s sont utilis<EFBFBD>s pour identifier des lignes
|
|
|
|
|
|
physiques sp<EFBFBD>cifiques avec des valeurs de bloc et d<EFBFBD>calage. Les
|
|
|
|
|
|
<SMALL>TID</SMALL> changent apr<EFBFBD>s que les lignes aient <EFBFBD>t<EFBFBD> modifi<EFBFBD>s ou
|
|
|
|
|
|
recharg<EFBFBD>s. Ils sont utilis<EFBFBD>s par des entr<EFBFBD>es d'index pour pointer vers des
|
|
|
|
|
|
lignes physiques.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilis<EFBFBD>s avec
|
|
|
|
|
|
PostgreSQL ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une partie du code source et de l'ancienne documentation utilisent des
|
|
|
|
|
|
termes dont l'usage est plus commun. Voici quelques exemples :</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<EFBFBD>lectionne (select)</LI>
|
|
|
|
|
|
<LI>remplace (replace), met <EFBFBD> jour (update)</LI>
|
|
|
|
|
|
<LI>ajoute (append), ins<EFBFBD>re (insert)</LI>
|
|
|
|
|
|
<LI><SMALL>OID</SMALL>, valeur s<EFBFBD>quentielle (serial value)</LI>
|
|
|
|
|
|
<LI>portal, curseur</LI>
|
|
|
|
|
|
<LI>range variable, table name, table alias</LI>
|
|
|
|
|
|
</UL>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Une liste des termes g<EFBFBD>n<EFBFBD>raux pour le domaine des bases de donn<EFBFBD>es est
|
|
|
|
|
|
disponible sur : <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> ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous manquez probablement de m<EFBFBD>moire virtuelle sur votre syst<EFBFBD>me ou votre
|
|
|
|
|
|
noyau a une limite assez basse pour certaines ressources. Essayez ceci avant
|
|
|
|
|
|
de lancer <I>postmaster</I> :</P>
|
|
|
|
|
|
<PRE>
|
|
|
|
|
|
ulimit -d 262144
|
|
|
|
|
|
limit datasize 256m
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
|
|
Suivant votre shell, seul un d'eux pourrait r<EFBFBD>ussir mais cela configurera
|
|
|
|
|
|
d'une fa<EFBFBD>on plus importante la taille du segment de donn<EFBFBD>es de votre
|
|
|
|
|
|
processus. Cette commande s'applique au processus actuel et <EFBFBD> tous les
|
|
|
|
|
|
processus lanc<EFBFBD> par celui-ci. Si vous avez des probl<EFBFBD>mes avec le client
|
|
|
|
|
|
<SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de donn<EFBFBD>es,
|
|
|
|
|
|
essayez <EFBFBD>a avant de lancer le client.
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.19">4.19</A>) Comment puis-je conna<EFBFBD>tre la version de
|
|
|
|
|
|
PostgreSQL que j'utilise ?</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<EFBFBD>rations sur des gros objects ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE>
|
|
|
|
|
|
autour de chaque utilisateur de gros objets, c'est-<EFBFBD>-dire pour entourer
|
|
|
|
|
|
<CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Actuellement, PostgreSQL force cette r<EFBFBD>gle en fermant les gros objets
|
|
|
|
|
|
lors de la transaction. Donc, le premier essai d'op<EFBFBD>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<EFBFBD>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-<EFBFBD>tre besoin de lancer
|
|
|
|
|
|
<CODE>auto-commit off.</CODE></P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.21">4.21</A>) Comment puis-je cr<EFBFBD>er une colonne qui aura par
|
|
|
|
|
|
d<EFBFBD>faut l'heure actuelle comme valeur ?</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<EFBFBD>tes utilisant
|
|
|
|
|
|
<CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Dans les versions pr<EFBFBD>c<EFBFBD>dant la 7.4, les sous-requ<EFBFBD>tes ont <EFBFBD>t<EFBFBD> jointes avec
|
|
|
|
|
|
des jointures externes en parcourant s<EFBFBD>quentiellement le r<EFBFBD>sultat de la
|
|
|
|
|
|
sous-requ<EFBFBD>te pour chaque ligne de la requ<EFBFBD>te externe. Si la sous-requ<EFBFBD>te
|
|
|
|
|
|
renvoit quelques lignes et que la requ<EFBFBD>te externe en renvoit plein,
|
|
|
|
|
|
<CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour acc<EFBFBD>l<EFBFBD>rer les autres
|
|
|
|
|
|
requ<EFBFBD>tes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE> :</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 <EFBFBD>tre une colonne
|
|
|
|
|
|
index<EFBFBD>e.
|
|
|
|
|
|
|
|
|
|
|
|
<P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les m<EFBFBD>mes
|
|
|
|
|
|
techniques sophistiqu<EFBFBD>es de jointures comme des requ<EFBFBD>tes normales et est
|
|
|
|
|
|
pr<EFBFBD>f<EFBFBD>r<EFBFBD> <EFBFBD> l'utilisation de <CODE>EXISTS</CODE>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.23">4.23</A>) Comment puis-je r<EFBFBD>aliser une jointure
|
|
|
|
|
|
externe ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
|
|
|
|
|
|
standard. Voici deux exemples :</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<EFBFBD>tes identiques joignent t1.col <EFBFBD> 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<EFBFBD>te (<SMALL>FULL join</SMALL>) renverra les lignes
|
|
|
|
|
|
correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot cl<EFBFBD>
|
|
|
|
|
|
<SMALL>OUTER</SMALL> est optionnelle et assum<EFBFBD> dans le cas de jointure
|
|
|
|
|
|
<SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les
|
|
|
|
|
|
jointures ordinaires sont appel<EFBFBD>es des jointures <SMALL>INNER</SMALL>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Lors des pr<EFBFBD>c<EFBFBD>dentes versions, les jointures externes peuvent <EFBFBD>tre
|
|
|
|
|
|
simul<EFBFBD>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<EFBFBD>te
|
|
|
|
|
|
suivante r<EFBFBD>alise une jointure externe, <I>outer</I>, des deux tables :<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<EFBFBD>tes utilisant
|
|
|
|
|
|
plusieurs bases de donn<EFBFBD>es ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Il n'existe pas de moyens de lancer des requ<EFBFBD>tes sur une autre base que
|
|
|
|
|
|
la courante. Comme PostgreSQL charge des catalogues syst<EFBFBD>mes sp<EFBFBD>cifiques <EFBFBD>
|
|
|
|
|
|
la base de donn<EFBFBD>es, sa r<EFBFBD>action aux requ<EFBFBD>tes inter-base de donn<EFBFBD>es est
|
|
|
|
|
|
incertaine.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<P><I>contrib/dblink</I> permet les requ<EFBFBD>tes entre bases de donn<EFBFBD>es en
|
|
|
|
|
|
utilisant des fonctions. Bien s<EFBFBD>r un client peut r<EFBFBD>aliser des connexions
|
|
|
|
|
|
simultan<EFBFBD>es <EFBFBD> plusieurs bases de donn<EFBFBD>es et joindre les r<EFBFBD>sultats du c<EFBFBD>t<EFBFBD>
|
|
|
|
|
|
client.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
|
|
|
|
|
|
colonnes <EFBFBD> partir d'une fonction?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou
|
|
|
|
|
|
colonnes <EFBFBD> partir d'une fonction,
|
|
|
|
|
|
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
|
|
|
|
|
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas cr<EFBFBD>er/supprimer des
|
|
|
|
|
|
tables temporaires dans les fonctions PL/PgSQL de fa<EFBFBD>on stable ?</H4>
|
|
|
|
|
|
<P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est
|
|
|
|
|
|
que si une fonction PL/PgSQL acc<EFBFBD>de <EFBFBD> une table temporaire, que cette table
|
|
|
|
|
|
est ensuite supprim<EFBFBD>e et recr<EFBFBD><EFBFBD>e, et que la fonction est appel<EFBFBD>e de nouveau,
|
|
|
|
|
|
la fonction <EFBFBD>chouera car le contenu de la fonction cach<EFBFBD>e pointera toujours
|
|
|
|
|
|
vers l'ancienne table temporaire. La solution revient <EFBFBD> utiliser
|
|
|
|
|
|
<SMALL>EXECUTE</SMALL> pour l'acc<EFBFBD>s aux tables temporaires avec PL/PgSQL.
|
|
|
|
|
|
Ceci obligera l'analyse de la requ<EFBFBD>te <EFBFBD> chaque fois.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.27">4.27</A>) Quelles options de r<EFBFBD>plication sont
|
|
|
|
|
|
disponibles ?</H4>
|
|
|
|
|
|
<P>Il existe plusieurs solutions de r<EFBFBD>plication ma<EFBFBD>tre/esclave. Elles
|
|
|
|
|
|
permettent uniquement au ma<EFBFBD>tre de r<EFBFBD>aliser des changements sur la base de
|
|
|
|
|
|
donn<EFBFBD>es alors que l'esclave peut seulement faire des lectures de base de donn<EFBFBD>es.
|
|
|
|
|
|
Le bas de la page <a
|
|
|
|
|
|
href="http://gborg.PostgreSQL.org/genpage?replication_research">
|
|
|
|
|
|
http://gborg.PostgreSQL.org/genpage?replication_research</a> les liste.
|
|
|
|
|
|
Une solution de r<EFBFBD>plication multi-ma<EFBFBD>tre est en cours de d<EFBFBD>veloppement sur
|
|
|
|
|
|
<a
|
|
|
|
|
|
href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.28">4.28</A>) Quelles options de cryptage sont
|
|
|
|
|
|
disponibles ?
|
|
|
|
|
|
</H4>
|
|
|
|
|
|
<UL>
|
|
|
|
|
|
<LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, <EFBFBD>
|
|
|
|
|
|
utiliser dans des requ<EFBFBD>tes <SMALL>SQL</SMALL>.</LI>
|
|
|
|
|
|
<LI>Pour crypter une transmission entre le client et le serveur, le serveur
|
|
|
|
|
|
doit avoir positionn<EFBFBD> l'option <I>ssl</I> <EFBFBD> <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
|
|
|
|
|
|
<EFBFBD>tre <I>d<EFBFBD>sactiv<EFBFBD>e</I>. Notez qu'il est aussi possible d'utiliser un
|
|
|
|
|
|
transport crypt<EFBFBD> d'une troisi<EFBFBD>me partie, tel que stunnel ou ssh, plut<EFBFBD>t que
|
|
|
|
|
|
les connexions SSL natives de PostgreSQL.
|
|
|
|
|
|
<LI>Les mots de passe des utilisateurs sont automatiquement crypt<EFBFBD>s depuis
|
|
|
|
|
|
la version 7.3. Pour les versions pr<EFBFBD>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<EFBFBD>me de fichiers crypt<EFBFBD>s.</LI>
|
|
|
|
|
|
</UL>
|
|
|
|
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Etendre PostgreSQL</H2>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="5.1">5.1</A>) J'ai <EFBFBD>crit une fonction utilisateur. Lorsque je l'ex<EFBFBD>cute avec
|
|
|
|
|
|
<I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I> ?</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 <EFBFBD> PostgreSQL ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Envoyez vos extensions <EFBFBD> la liste de diffusion <I>pgsql-hackers</I>,
|
|
|
|
|
|
elles atterriront <EFBFBD>ventuellement dans le sous-r<EFBFBD>pertoire <I>contrib/</I>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="5.3">5.3</A>) Comment faire pour <EFBFBD>crire une fonction C
|
|
|
|
|
|
qui renvoie un tuple ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Dans les versions de PostgreSQL <EFBFBD> partir de 7.3, les fonctions qui
|
|
|
|
|
|
renvoient une table sont totalement support<EFBFBD>es en C, PL/PgSQL, et SQL. Voir
|
|
|
|
|
|
le Guide du Programmeur pour plus d'information. Un exemple de fonction
|
|
|
|
|
|
renvoyant une table d<EFBFBD>finie en C se trouve <EFBFBD>
|
|
|
|
|
|
<I>contrib/tablefunc</I>.</P>
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="5.4">5.4</A>) J'ai modifi<EFBFBD> un fichier source. Pourquoi
|
|
|
|
|
|
ma recompilation ne voit-elle pas les modifications ?</H4>
|
|
|
|
|
|
|
|
|
|
|
|
<P>Les <I>Makefiles</I> n'ont pas les d<EFBFBD>pendances ad<EFBFBD>quates pour les
|
|
|
|
|
|
fichiers d'en-t<EFBFBD>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<EFBFBD>pendances automatiquement.</P>
|
|
|
|
|
|
</BODY>
|
|
|
|
|
|
</HTML>
|
|
|
|
|
|
|