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