38. FAQ - Questions sur PostgreSQL

Contenu de cette section

38.1 Dernière version des Questions Fréquemment Posées (FAQ) - Questions sur PostgreSQL

Cette FAQ est incluse ici puisque tous les utilisateurs n'ont pas de butineurs tels que Netscape et accès à l'Internet. Les utilisateurs peuvent utiliser GnuInfo, Ghostview, l'éditeur vi ou la commande man. Ce document a été généré en 10 formats différents tels que GnuInfo, RTF, Texte standard, Man page, Postscript etc.. et est distribué sur les CDROM Linux. Veuillez consultez la dernière version de cette FAQ qui se trouve à http://www.postgresql.org/docs/faq-english.shtml si vous avez accès à l'Internet."

Cette FAQ a été mise ici pour vous rendre service.

38.2 Extrait de la FAQ du site Web principal de PostgreSQL

Si vous avez accès à l'internet, cliquez sur cette URL maintenant pour en obtenir la dernière version.

Questions Frequemment Posees (FAQ) sur PostgreSQL

Derniere mise a jour : Lundi 17 Novembre 1997 19:47:15 EST 
Version: 6.2.1

Gestionnaire actuel : Bruce Momjian (maillist@candle.pha.pa.us)

La version la plus recente de ce document peut etre consultee sur le site Web de
postgreSQL, http://postgreSQL.org.

Les reponses aux questions specifiques a Linux a
http://postgreSQL.org/docs/FAQ-linux.shtml.

Les reponses aux questions specifiques a Irix a
http://postgreSQL.org/docs/FAQ-irix.shtml.

Modifications dans cette versions (* = modifie, + = nouveau):

---------------------------------------------------------------------------

Reponses aux questions :

1) Questions d'ordre general

1.1) Qu'est-ce que PostgreSQL ?
1.2) Sur quelles machines tourne PostgreSQL ?
1.3) Ou puis-je trouver PostgreSQL ?
1.4) Quel est le regime de copyright de PostgreSQL ?
1.5) Support pour PostgreSQL 
1.6) Derniere version de PostgreSQL 
1.7) Existe-t-il une version commerciale de PostgreSQL ?
1.8) Quelle est la documentation disponible pour PostgreSQL ?
1.9) Quelle version de SQL PostgreSQL utilise-t-il ?
1.10) PostgreSQL fonctionne-t-il avec les versions precedentes de postgres ?
1.11) Y-a-t'il des pilotes ODBC pour PostgreSQL ?
1.12) Quels sont les outils disponibles pour connecter postgres aux pages Web ?
1.13) PostgreSQL dispose-t-il d'une interface utilisateur graphique ? D'un generateur 
de rapport ? D'une interface de langage de requete integree ?

2) Questions concernant l'installation/Configuration

2.1) initdb ne tourne pas
2.2) Quand je demarre le postmaster, j'ai le message  "FindBackend: could not find a
backend to execute..." "postmaster: could not find backend to execute..."
2.3) Le systeme parait perturbe par les virgules, les points decimaux, et le format
des dates.
2.4) Comment puis-je installer PostgreSQL ailleurs que dans /usr/local/pgsql ?
2.5) Quand je lance postmaster, j'ai un message "Bad System Call core dumped".
2.6) Quand j'essaie de lancer postmaster, j'ai des messages d'erreur 
"IpcMemoryCreate".
2.7) J'ai modifie un fichier source, mais une recompilation ne reflete pas les 
modifications ?
2.8) Comment puis-je me premunir contre les acces a PostgreSQL a partir d'autres ordinateurs ?
2.9) Je ne peux pas acceder a la base de donnee en tant qu'utilisateur 'root'.
2.10) Tous mes serveurs se crashent lors d'acces concurrents aux tables. Pourquoi ?
2.11) Comment puis ajuster mon moteur de bases de donnees pour avoir de meilleures 
performances ?
2.12) Quelles sont les dispositifs de mise au point de PostgreSQL ?
2.13) Comment puis-je activer plus de 32 frontaux concurrents ?

3) Questions operationnelles

3.1) Est-ce que PostgreSQL supporte les sous-requetes imbriquees ?
3.2) J'ai eu tout un tas de problemes en utilisant les regles.
3.3) Il semble que l'ecriture au milieu de grands objets ne soit pas fiable.
3.4) Comment puis-je ecrire des applications clientes pour PostgreSQL ?
3.5) Comment mettre en place un pg_group ?
3.6) Quelle est la difference exacte entre les curseurs binaires et les curseurs normaux ?
3.7) Qu'est-ce qu'un index R-tree et a quoi est-il utilise ?
3.8) Quelle est la taille maximum d'un  tuple ?
3.9) J'ai defini des index mais mes requetes ne semblent pas les utiliser Pourquoi ?
3.10) Comment faire des recherches d'expressions regulieres? et des recherches regexp 
ne tenant pas compte de la casse ?
3.11) J'ai subi un crash du serveur pendant une reorganisation. Comment puis-je supprimer 
le fichier de verrouillage ?
3.12) Quelle et la difference entre les differents types caracteres ?
3.13) Dans une requete, comment puis-je detecter si un champ est NULL ?
3.14) Comment puis-je voir que l'optimiseur de requete est en train d'evaluer ma requete ?
3.15) Comment puis-je creer un champ serie ?
3.16) A quoi correspondent les fichiers pg_psort.XXX dans le repertoire de ma base 
de donnees ?
3.17) Comment puis-je me connecter a ma base de donnees a partir d'une autre machine ?
3.18) Comment puis-je voir quels sont les index ou les operations qui sont definis 
dans la base de donnees ?
3.19) Qu'est-ce que la caracteristique spacio-temporelle (time-warp) et en quoi cela 
est-il en rapport avec la reorganisation ?
3.20) Qu'est-ce qu'un oid? Qu'est-ce qu'un tid ?
3.21) Quel est le sens de quelques-uns des termes utilises dans Postgres ?
3.22) Qu'est-ce que l'Optimisation de Requete Genetique ?
3.23) Comment supprime-t-on une colonne d'une table ?
3.24) Comment faire un SELECT uniquement sur les quelques premieres lignes d'une requete ?
3.25) Pourquoi ne puis-je par creer une colonne dont le nom soit "time" ?

4) Questions sur l'extension de PostgreSQL

4.1) J'ai ecrit une fonction definie par l'utilisateur et quand je la fait tourner sous psql, 
j'ai un plantage avec vidage memoire.
4.2) J'ai des messages du type "NOTICE-PortalHeapMemoryFree- 0x402251d0 not in alloc set"!
4.3) J'ai ecrit quelques nouveaux types et quelques fonctions astucieux pour  PostgreSQL.
4.4) Comment dois-je ecrire une fonction C qui retourne un tuple ?

5) Bogues

5.1) Comment rediger un rapport de bogue ?

---------------------------------------------------------------------------

Section 1: Questions d'ordre general

1.1) Qu'est-ce que PostgreSQL ?

PostgreSQL est une amelioration du systeme de gestion de base de donnees POSTGRES,
un prototype de recherche de SGBD de la prochaine generation. Alors que  PostgreSQL 
garde le  puissant modele de donnees et les riches types de donnees de POSTGRES, il 
remplace le langage de requetes PostQuel par un sous-ensemble etendu du langage
SQL. PostgreSQL est libre et le code source est disponible.

Le developpement de PostgreSQL est effectue par une equipe de developpeurs Internet 
qui sont tous inscrits a la liste de diffusion consacree au developpement de PostgreSQL. Le
coordinateur actuel est Marc G. Fournier (<htmlurl url="mailto:scrappy@postgreSQL.org
" name="scrappy@postgreSQL.org">). (Voir ci-dessous comment le joindre). Cette equipe
est maintenant responsable de tous les developpements actuels et futurs de 
PostgreSQL.

Les auteurs de PostgreSQL 1.01sont Andrew Yu et Jolly Chen. Beaucoup d'autres ont 
contribue au portage, aux tests, au debogage et aux ameliorations du code. Le code 
original de Postgres, a partir duquel PostgreSQL est derive, est le resultat de 
l'effort de nombreux etudiants de troisieme cycle, de deuxieme cycle et d'enseignants
sous la direction du Professeur Michael Stonebraker de l'universite de Californie,
Berkeley.

     Le nom original du logiciel a Berkeley etait Postgres. Lors de l'ajout des 
fonctionnalites SQL en 1995, il fut renomme Postgres95. Ce nom fut change a la fin 
de 1996 en PostgreSQL.

1.2) Sur quelles machines tourne PostgreSQL ?

Les auteurs ont compile et teste PostgreSQL sur les plates-formes suivantes(quelques 
unes de ces compilations requierent gcc 2.7.0) :

   * aix - IBM on AIX 3.2.5 or 4.x
   * alpha - DEC Alpha AXP on Digital Unix 2.0, 3.2, 4.0
   * BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD)
   * bsdi - BSD/OS 2.0, 2.01, 2.1, 3.0
   * dgux - DG/UX 5.4R4.11
   * hpux - HP PA-RISC on HP-UX 9.0, 10
   * i386_solaris - i386 Solaris
   * irix5 - SGI MIPS on IRIX 5.3
   * linux - Intel x86 on Linux 2.0 and Linux ELF SPARC on Linux ELF PPC on
     Linux Elf (For non-ELF Linux, see LINUX_ELF below).
   * sco - SCO 3.2v5
   * sparc_solaris - SUN SPARC on Solaris 2.4, 2.5, 2.5.1
   * sunos4 - SUN SPARC on SunOS 4.1.3
   * svr4 - Intel x86 on Intel SVR4 and MIPS
   * ultrix4 - DEC MIPS on Ultrix 4.4

Pour les plates-formes suivantes, il y a des problemes/bogues connus :

   * nextstep - Motorola MC68K ou Intel x86 sous NeXTSTEP 3.2

1.3) Ou puis-je trouver PostgreSQL ?

Le premier site ftp anonyme pour PostgreSQL est :

   * ftp://ftp.postgreSQL.org/pub

Il existe un site miroir a :

   * ftp://postgres95.vnet.net/pub/postgres95
   * ftp://ftp.luga.or.at/pub/postgres95
   * ftp://cal011111.student.utwente.nl/pub/postgres95
   * ftp://ftp.uni-trier.de/pub/database/rdbms/postgres/postgres95
   * ftp://rocker.sch.bme.hu

1.4) Quel est le regime de copyright de PostgreSQL?

PostgreSQL est sujet au COPYRIGHT suivant.

Systeme de Gestion de Base de Donnees PostgreSQL

Copyright (c) 1994-6 Universite de Californie. Tous droits reserves

La permission d'utiliser, de copier, de modifier, et de distribuer ce
logiciel et sa documentation pour n'importe quel usage, gratuitement,
et sans autorisation ecrite est accordee, a la condition que cette
notice de copyright et que ce paragraphe et les deux paragraphes
suivants apparaissent dans toutes les copies.

EN AUCUN CAS L'UNIVERSITE DE CALIFORNIE NE POURRA ETRE TENUE POUR
RESPONSABLE VIS A VIS DE QUI QUE CE SOIT POUR DES DOMMAGES DIRECTS,
INDIRECTS, SPECIAUX, FORTUITS, OU CONSECUTIFS, INCLUANT LA PERTE DE
PROFITS, QUI POURRAIENT RESULTER DE L'USAGE DE CE LOGICIEL ET DE SA
DOCUMENTATION, MEME SI L'UNIVERSITE DE CALIFORNIE A ETE AVERTIE DE LA
POSSIBILITE D'UN TEL DOMMAGE.

L'UNIVERSITE DE CALIFORNIE REJETTE PARTICULIEREMENT TOUTE GARANTIES,
INCLUANT , MAIS PAS LIMITE A, LES GARANTIES IMPLICITES DE VALEUR
MARCHANDE ET D'ADAPTATION A UNE UTILISATION PARTICULIERE. LE LOGICIEL
FOURNIT CI-DESSOUS EST FOURNIT "EN L'ETAT", ET L'UNIVERSITE DE
CALIFORNIE N'A AUCUNE OBLIGATION DE FOURNIR MAINTENANCE, SUPPORT,
MISES A JOUR, AMELIORATIONS OU MODIFICATIONS.

1.5) Support pour PostgreSQL

Il n'y a aucun support officiel pour PostgreSQL de la part des de l'equipe de 
support initiale de l'Universite de Californie, Berkeley. Il est maintenu 
uniquement grace a l'effort de volontaires.

La liste de diffusion est : questions@postgreSQL.org. 
Elle est disponible pour des discussions sur 
des sujets concernants PostgreSQL, incluant les rapports 
d'erreurs et corrections, mais non limites a ceux-ci. Pour avoir des informations sur 
la maniere de s'inscrire, envoyer un courrier electronique avec les lignes suivantes 
dans le corps du message (pas dans la ligne sujet)

        subscribe
        end

a questions-request@postgreSQL.org.

Il y a aussi une liste resumee. Pour s'inscrire a cette liste, envoyez un 
courrier electronique a : questions-digest-request@postgreSQL.org avec, 
dans le CORPS du message :

        subscribe
        end

Des resumes sont envoyes aux membres de cette liste chaque fois que la liste 
principale a recu environ 30k de messages.

Il y a une liste de diffusion des erreurs. Pour s'inscrire a cette liste, 
envoyez un courrier electronique a bugs-request@postgreSQL.org avec, dans le 
CORPS du message :

Il y a aussi un forum de discussion pour les developpeurs. Pour s'inscrire a 
cette liste, envoyer un courrier electronique a hackers-request@postgreSQL.org 
avec, dans le CORPS du message :

        subscribe
        end

Des informations complementaires sur PostgreSQL peuvent etre trouvees via la 
page d'accueil WWW de PostgreSQL a :

     http://www.postgreSQL.org

1.6) Derniere version de PostgreSQL

La derniere version de PostgreSQL est la version 6.2.1, qui est disponible 
depuis le 17 octobre 1997. Pour avoir des informations sur les nouveautes 
de la version  6.2.1, consulter le fichier TODO sur notre page WWW.

Nous nous proposons de diffuser une revision majeure tous les trois mois.

1.7) Existe-t-il une version commerciale de PostgreSQL ?

Illustra Information Technology (filiale possedee totalement par Informix
Software, Inc.) vend un SGBD Relationnel Objet appele Illustra qui etait, a 
l'origine, base sur postgres. Illustra a des similarites d'aspect avec
PostgreSQL mais possede plus de fonctionnalites, est plus robuste, plus 
performant et dispose de documentation et d'un support reels. D'un autre cote, 
il coute de l'argent.
Pour de plus informations, contactez sales@illustra.com

1.8) Quelle documentation est disponible pour PostgreSQL ?

Un manuel utilisateur, des pages de manuel, et quelques petits exemples de test 
sont compris dans la distribution. Les pages de manuel concernant sql et les 
fonctions internes (built-in) sont particulierement importantes.

La page www contient des liens sur un guide d'implementation et sur cinq papiers
concernants les concepts d'architecture et les fonctionnalites de postgres .

1.9) Quelle version de SQL PostgreSQL utilise-t-il ?

PostgreSQL supporte un sous-ensemble de SQL-92. Ils en possede les constructions
les plus importantes mais manque de certaines fonctionnalites. Les differences 
les plus visibles sont :

   * les sous-requetes imbriquees ne sont pas supportees
   * pas de clause HAVING sous un GROUP BY

D'un autre cote, vous pouvez creer des types definis par l'utilisateur, des 
fonctions, de l'heritage etc. Si vous souhaitez participer a la programmation de
PostgreSQL, vous pouvez ajouter les fonctionnalites manquantes enumerees 
ci-dessus.

1.10) PostgreSQL fonctionne-t-il avec les versions precedentes de postgres?

PostgreSQL v1.09 est compatible avec les bases de donnees creees avec la version
v1.01.

Une mise a niveau de la version pre-6.2 vers la version 6.2.1  necessite de faire 
un vidage et une restauration.

Une mise a niveau de la version 6.2 vers la version 6.2.1  ne necessite pas
de faire un vidage et une restauration, mais consultez le fichier /migration
de la distribution.

Ceux qui font une mise a niveau de versions anterieures a 1.09 doivent d'abord 
faire une mise a niveau vers la version 1.09 sans vidage/restauration, puis 
vider les donnees de la version 1.09, et enfin les recharger dans la version
6.2.1.

1.11) Y-a-t'il des pilotes ODBC pour PostgreSQL?

Deux pilotes ODBC sont disponibles, PostODBC et OpenLink ODBC.

Pour tous les gens interesses par PostODBC, il y a maintenant deux
liste de diffusion consacrees aux discussions concernant PostODBC. 
Ces listes de diffusion sont :

   * postodbc-users@listserv.direct. net
   * postodbc-developers@listse rv.direct.net

ce sont des listes de diffusion ordinaires gerees par majordomo. Vous pouvez 
y souscrire en envoyant un mail a :

   * majordomo@listserv.direct.net

OpenLink ODBC est tres populaire. Vous pouvez le trouver sur
http://www.openlinksw.com/postgres.html. Il fonctionne avec notre
logiciel client standard ODBC donc, vous aurez Postgres ODBC disponible
sur chaque plate-forme client que nous supportons (Win, Mac, Unix, VMS).

Nous vendrons probablement ce produit aux gens qui ont besoin d'un support
de qualite commerciale, mais une version libre sera toujours disponible
Les questions sont a adresser a postgres95@openlink.co.uk.

1.12) Quels sont les outils disponibles pour connecter postgres aux pages Web ?

Pour l'integration au web, PHP est une excellente interface. Son URL est
http://php.iquest.net

PHP est tres bien pour des choses simples, mais pour des choses plus 
compliquees, certains utilisent encore l'interface perl interface et CGI.pm.

Une passerelle WWW basee sur WDB et utilisant perl peut etre tele-chargee de :

   * http://www.eol.ists.ca/~dunlop/wdb -p95

1.13) PostgreSQL a-t-il une interface utilisateur graphique ? Un generateur de rapport ?
Une interface de langage de requete integree ?

Non. Non. Non. Au moins, pas dans la distribution officielle. Quelques utilisateurs 
ont indique quelques succes dans l'utilisation de 'pgbrowse' et de 'onyx' comme 
frontaux a PostgreSQL. Plusieurs contributeurs travaillent sur des outils frontaux 
bases sur Tk. Posez la question dans la liste de diffusion.

---------------------------------------------------------------------------

Section 2: Questions concernant l'installation


2.1) Initdb ne tourne pas

   * verifiez que vous avez les chemins appropries
   * verifiez que l'utilisateur 'postgres' dispose des droits necessaires sur 
     les fichiers
   * assurez-vous qu'il y a des fichiers dans $ PGDATA/files, et qu'ils ne
     sont pas vides. S'ils n'y sont pas, c'est que "gmake install" a echoue pour
     une raison quelconque

2.2) Quand je demarre le postmaster, j'ai le message "FindBackend- could not find a 
backend to execute..." "postmaster- could not find backend to execute..."

Le bon chemin n'est probablement pas specifie. L'executable 'postgres'
doit etre dans vos chemins par defaut.

2.3) Le systeme parait perturbe par les virgules, les points decimaux, et le format
des dates.

Verifiez votre configuration locale. PostgreSQL utilise les options locales 
choisies par l'utilisateur qui a lance le processus postmaster. Adaptez-les 
selon votre environnement de travail.

2.4) Comment puis-je installer PostgreSQL ailleurs que dans /usr/local/pgsql?

Il vous faut editer le fichier Makefile.global et modifier POSTGRESDIR suivant 
vos souhaits, ou creer un fichier Makefile.custom et definir POSTGRESDIR ici.

2.5) Quand je lance postmaster, j'ai un message "Bad System Call core dumped".

Cela peu etre du a de nombreux problemes, mais, en premier lieu, verifiez que
vous disposez bien des extensions system V dans votre noyau. PostgreSQL 
necessite un support de la memoire partage dans le noyau.

2.6) Quand j'essaie de lancer postmaster, j'ai des messages d'erreur 
"IpcMemoryCreate".

Soit votre gestion de la memoire partagee n'est pas configuree correctement 
dans le noyau soit vous avez besoin d'etendre la memoire partagee disponible dans 
le noyau. La quantite dont vous avez besoin depend de l'architecture de votre 
systeme et du nombre de tampons avec lesquels postmaster a ete configure pour 
tourner. Pour la plupart des systemes, avec des tampons de la taille par defaut,
vous avez besoin d'un minimum de ~ 760K.

2.7) J'ai modifie un fichier source, mais une recompilation ne reflete pas les 
modifications?

Les fichiers Makefile ne contiennent pas les dependances correctes pour les 
fichiers inclus. Il vous faut executer 'make clean' puis un autre 'make'.

2.8)  Comment puis-je me premunir contre les acces a PostgreSQL a partir 
d'autres ordinateurs ?

Utilisez l'authentification des ordinateurs en modifiant le fichier $PGDATA/pg_hba
en consequence.
                                         
2.9) Je ne peux pas acceder a la base de donnees en tant qu'utilisateur 'root'.

Vous ne devez pas creer de bases de donnees utilisateurs ayant un identificateur 
utilisateur 0(root). Ils seraient incapables d'acceder a la base de donnees. 
C'est une precaution dictee par un souci de securite puisque n'importe quel 
utilisateur peut lier dynamiquement des modules objets au moteur de base de donnees.

2.10) Tous mes serveurs se crashent lors d'acces concurrents aux tables. Pourquoi ?

Ce probleme peut etre du a un noyau qui n'a pas ete configure pour supporter les
semaphores.

2.11) Comment puis-je ajuster le moteur de base de donnees pour obtenir de meilleures 
performances ?

Vous pouvez faire deux choses. Vous pouvez utiliser l'option d'Openlink pour desactiver
fsync() en lancant le postmaster avec les options '-o -F'. Ceci evitera a fsync() de
mettre a jour le disque apres chaque transaction.

Vous pouvez aussi utiliser l'option -B de postmaster -B pour augmenter le nombre de tampons
de memoire partagee partages entre les differents processus de fond de plan. Si vous
donnez une valeur trop elevee a ce parametre, les processus ne demarreront pas ou se
crasheront de maniere inattendue. Chaque tampon a une taille de 8K et il y a 64 tampons
par defaut.

Vous pouvez aussi utiliser l'option -S du postmaster pour augmenter la taille maximum
de la memoire utilisee par chaque processus de fond de plan pour les tris temporaires. 
Chaque tampon a une taille de 1K et il y a 512 tampons par defaut.

2.12) Quelles sont les dispositifs de mise au point de PostgreSQL?

PostgreSQL dispose de plusieurs fonctions qui donnent des informations sur son etat 
qui peuvent etre utiles pour des besoins de debogage.

Tout d'abord, en faisant tourner configure avec l'option -enable-cassert, de nombreux 
assert()'s permettent de suivre l'avancement du processus de fond de plan et arretent 
le programme quand quelque chose d'inattendu se produit.

A la fois le postmaster et postgres ont plusieurs options de debogage. Premierement, 
a chaque fois que lancez le postmaster, assurez-vous de rediriger la sortie standard 
et les messages d'erreurs vers un fichier d'enregistrement, comme :

        cd /usr/local/pgsql
        ./bin/postmaster >server.log 2>&1 &

Ceci creera un fichier server.log en tete de l'arborescence du repertoire de 
PostgreSQL. Ce fichier peut contenir des informations utiles concernant les problemes
et les erreurs rencontres par le serveur. Postmaster possede une option -d qui permet
d'obtenir des informations plus detaillees. L'option -d peut prendre une valeur de 1 
a 3 qui specifie le niveau de debogage. Faites attention au fait qu'un 
niveau de debogage de 3 entraine la generation de fichiers de compte-rendus 
volumineux.

Vous pouvez , en realite, faire tourner le processus de fond de plan postgres a partir 
de la ligne de commande, et taper vos instructions SQL directement. Ceci n'est 
recommande que SEULEMENT dans des situations de debogage. Notez qu'un caractere saut 
de ligne termine la requete, pas un point-virgule. Si vous avez effectue la compilation
avec l'option de debogage, vous pouvez utiliser un debogueur pour voir ce 
qui se passe. Le processus de fond de plan n'ayant pas ete lance par le postmaster,
il ne tourne pas dans un environnement identique et les problemes d'interaction 
processus de fond de plan/verrouillage peuvent ne pas etre reproduits. Quelques 
systemes d'exploitation peuvent se connecter a un processus de fond de plan 
directement pour diagnostiquer les problemes.

Le programme postgres possede les options a -s, -A, -t qui peuvent etre tres utiles 
pour la mise au point et pour la mesure de performances.

La commande EXPLAIN (Voir dans cette FAQ) permet de voir comment PostgreSQL 
interprete votre requete.

2.13) Comment puis-je activer plus de 32 frontaux concurrents ?

Editez le fichier include/storage/sinvaladt.h, et modifiez la valeur de 
MaxBackendId. Dans le futur, nous projetons de rendre ce parametre
configurable.

---------------------------------------------------------------------------

Section 3 : Fonctionnalites de PostgreSQL

3.1) Est-ce que PostgreSQL supporte les sous-requetes imbriquees?

Les sous-requetes imbriquees ne sont pas encore implantees, mais elles 
peuvent etre simulees en utilisant des fonctions sql.

3.2) J'ai eu un tas de problemes dans l'utilisation des regles.

Actuellement, le systeme de regles dans PostgreSQL n'est pratiquement pas 
fonctionnel. Il fonctionne suffisamment pour supporter le mecanismes de vue,
mais c'est tout. Vous utilisez les regles PostgreSQL a vos risques et perils.

3.3) Il ne me semble pas possible d'ecrire au milieu de grands objets de maniere fiable.

Le systeme de gestion des grands objets n'est egalement pas fonctionnel dans 
PostgreSQL. Il fonctionne juste assez pour stocker de grands paquets de donnees et 
les relire, mais l'implementation souffre de quelques problemes sous-jacents. 
Vous utilisez les grands objets PostgreSQL a vos risques et perils.

3.4) Comment puis-je ecrire une application cliente pour PostgreSQL?

PostgreSQL supporte une bibliotheque d'interfacage que l'on peut appeler a partir de 
C nommee libpq et beaucoup d'autres. Consultez le repertoire /src/interfaces.

D'autres ont contribue a une interface perl et a une passerelle WWW a PostgreSQL.
Consulter la page d'accueil PostgreSQL pour plus de details.

3.5) Comment puis-je mettre en place un pg_group?

Actuellement, il n'y a pas d'interface aisee pour mettre en place des groupes d'utilisateurs. 
Vous devez explicitement inserer/mettre a jour la table pg_group. Par exemple :

        jolly=> insert into pg_group (groname, grosysid, grolist)
        jolly=>     values ('posthackers', '1234', '(5443, 8261)');
        INSERT 548224
        jolly=> grant insert on foo to group posthackers;
        CHANGE
        jolly=>

Les champs dans le fichier pg_group sont :

   * groname : le nom de groupe. C'est un char16 et il doit etre purement alphanumerique.
               Ne pas inclure de soulignes ou d'autres ponctuations.
   * grosysid : l'identificateur de groupe. C'est un int4. Il doit etre unique pour 
                chaque groupe.
   * grolist : la liste des identificateurs de pg_user qui appartiennent au groupe. 
              C'est un int4[].

3.6) Quelle l'exacte difference entre les curseurs binaires et les curseurs normaux?

Consultez la page de manuel sur declare pour en avoir une description.

3.7) Qu'est-ce qu'un index R-tree et a quoi est-il utilise?

Un index R-tree est utilise pour indexer les donnees spatiales. Un index obtenu par 
hachage ne peut pas effectuer de recherches dans une gamme de donnees. Un index B-tree 
peut seulement effectuer des recherches dans une gamme de donnees sur une dimension. 
Les index R-tree permettent de traiter des donnees multi-dimensionnelles. Par 
exemple, si un index R-tree peut etre construit sur un attribut de type 'point' le 
systeme peut repondre plus efficacement a des requetes telles que selectionner tous 
les points a l'interieur d'un rectangle.

Le papier de reference qui decrit la conception originale du R-Tree est :

Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."
(R-Trees: une Structure d'Index Dynamique pour les Recherches Spatiales)
Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.

Vous pouvez egalement trouver ce papier dans le livre de Stonebraker "Readings in Database
Systems" (Lectures sur les Systemes de Gestion de Base de Donnees)

Les R-Trees intrinseques peuvent prendre en compte les polygones et les boites. 
En theorie, les R-trees peuvent etre etendus pour manipuler un plus grand nombre
de dimensions. En pratique, l'extension des R-Tree necessite pas mal de travail
et nous n'avons pas actuellement de documentation pour le faire.

3.8) Quelle est la taille maximum d'un tuple?

Les Tuples sont limites a 8K octets. En tenant compte des attributs du systeme et 
autres surcharges, il faut rester bien a l'ecart des 8,000 octets pour etre 
tranquille. Pour utiliser des attributs superieurs a 8K, essayez d'utiliser 
l'interface pour les grands objets.

Les Tuples ne doivent pas franchir la frontiere des 8k donc un tuple de 5k necessitera 
un espace de stockage de 8k.

3.9) J'ai defini des index, mais mes requetes ne paraissent pas en faire usage. Pourquoi?

PostgreSQL n'entretient pas automatiquement de statistiques. On doit realiser un 
appel a une "reorganisation" explicite pour mettre les statistiques a jour. Apres 
que les statistiques aient ete mises a jour, l'optimiseur fera un meilleur usage des 
index. Notez que l'optimiseur est limite et n'utilise pas les index dans certaines 
circonstances (telles que les dans les clauses OR). Pour les statistiques sur 
l'optimisation specifique aux colonnes, utilisez 'analyse de la reorganisation'.

Si le systeme ne voit toujours pas l'index, c'est probablement parce que vous avez 
cree un index sur un champ du type impropre  *_ops . Par exemple, vous avez cree un 
champ CHAR(4), mais vous avez specifie un index char_ops de type_class.

Consultez la page du manuel sur create_index pour avoir des informations sur les 
types de classes disponibles. Il doit correspondre au type de champ.

Postgres ne previent pas l'utilisateur quand un index incorrect est cree.

Les index ne sont pas utilises dans les operations ORDER BY.

3.10) 

Comment faire des recherches d'expressions regulieres ? et des recherches regexp ne tenant 
pas compte de la casse ?

Consultez la page de manuel pgbuiltin. Rechercher le terme expression reguliere.

3.11) J'ai subit un crash du serveur pendant une reorganisation. Comment puis-je supprimer 
le fichier de verrouillage?

Consultez la page de manuel sur la reorganisation.

3.12) Quelle et la difference entre les differents types caracteres?

Type            Nom Interne     Notes
--------------------------------------------------
CHAR            char            1 caractere   )
CHAR2           char2           2 caracteres  )
CHAR4           char4           4 caracteres  ) optimises pour une longueur fixe
CHAR8           char8           8 caracteres  )
CHAR16          char16          16 caracteres )
CHAR(#)         bpchar          complete par des blancs jusqu'a la longueur fixe specifiee
VARCHAR(#)      varchar         la taille specifie la longueur maximum, pas de remplissage
TEXT            text            longueur limitee seulement par la longueur maximum du tuple
BYTEA           bytea           tableau d'octets de longueur variable

Rappelez vous, il vous faut utiliser le nom interne lorsque vous  creez des index 
sur ces champs ou quand vous effectuez d'autres operations internes.

Les quatre derniers types ci-dessus sont des types "varlena" (i.e. les quatre 
premiers octets donnent la longueur, suivie par les donnees). CHAR(#) et VARCHAR(#) 
allouent le nombre maximum d'octets quelle que soient les donnees stockees dans le 
champ.
TEXT et BYTEA sont les seuls types caracteres qui ont une longueur variable sur le 
disque.

3.13) Dans une requete, comment puis-je detecter si un champ est NULL?

Vous faites un test sur la colonne en utilisant IS NULL et IS NOT NULL.

3.14) Comment puis-je voir que l'optimiseur de requete est en train d'evaluer ma requete?

Consultez la page de manuel traitant de explain

3.15) Comment puis-je creer un champ serie?

Postgres ne permet pas a l'utilisateur de specifier une colonne utilisateur comme 
ayant le type SERIAL. A la place, vous pouvez utiliser le champ oid de chaque ligne 
comme valeur unique. Cependant, si vous avez besoin de vider et de recharger la base 
de donnees, vous serez obliges d'utiliser pgdump avec l'option -o'ou COPY avec l'option 
WITH OIDS pour conserver les oids.

Il y a aussi une fonction SEQUENCE qui est similaire a SERIAL. consultez la page
de manuel sur create_sequence.

Une autre maniere valide de le faire est de creer une fonction :

        create table my_oids (f1 int4);
        insert into my_oids values (1);
        create function new_oid () returns int4 as
                'update my_oids set f1 = f1 + 1;  select f1 from my_oids; '
        language 'sql';

puis:

        create table my_stuff (my_key int4, value text);
        insert into my_stuff values (new_oid(), 'hello');

Cependant, il faut garder a l'esprit qu'il y a competition ici ou un serveur peut 
effectuer une mise a jour, puis un autre serveur en effectuer une et que 
les deux selectionnent le meme nouvel identificateur. Cette instruction doit etre 
effectuee dans le cadre d'une transaction.

Une autre maniere de le faire consiste a utiliser la fonction de declenchement generale
autoinc() de contrib/spi/autoinc.c.

3.16) Que sont les fichiers pg_psort.XXX dans le repertoire de ma base de donnees?

Ce sont les fichiers temporaires crees par l'executeur de requete. 
Par exemple, si un tri doit etre effectue pour realiser une instruction ORDER BY, 
quelques fichiers temporaires sont crees en resultat du tri.

Si vous n'avez pas de transactions ou de tri en cours a cet instant, vous pouvez 
supprimer ces fichiers temporaires pg_psort.XXX sans risques.

3.17) Pourquoi ne puis-je pas me connecter a ma base de donnees a partir d'une autre machine ?

La configuration par defaut n'autorise seulement les connexions que de l'hote
tcp/ip ordinateur-local (localhost). Vous devez ajouter une entree pour l'ordinateur
hote dans le fichier pgsql/data/pg_hba. Consultez la page de manuel sur hba_conf.

3.18) Comment puis-je trouver quels index et quelles operations sont definis dans 
la base de donnees?

Executez le fichier pgsql/src/tutorial/syscat.source. Il donne l'illustration de 
beaucoup de 'selections' ('select's) a faire pour obtenir des informations sur les 
tables du systeme de gestion de base de donnees.

3.19)  Qu'est-ce que la caracteristique spacio-temporelle (time-warp) et en quoi 
cela est-il en rapport avec la reorganisation ?

PostgreSQL traite les modifications de donnees de maniere differente de la plupart 
des systemes de gestion de bases de donnees. Quand une ligne est modifiee dans une 
table, la ligne originale est marquee avec un timbre dateur au moment ou cette 
modification est intervenue, et une nouvelle ligne est creee avec les donnees 
actuelles. Par defaut, seules les donnees actuelles sont utilisees dans une table. 
Si vous specifiez une donnee date/heure a la suite du nom de la table dans une clause
FROM, vous pouvez avoir acces aux donnees qui etaient "actuelles" a ce moment la, 
i.e.

        SELECT *
        FROM employees ['July 24, 1996 09:00:00']

affiche les lignes des employes dans la table au moment specifie. Vous pouvez 
specifier des intervalles tels que [date,date], [date,], [,date], ou [,]. Cette 
derniere option permet d'acceder a toutes les lignes qui ont existe.

L'insertion (INSERT) de lignes recoit egalement un horodatage, donc, les lignes qui 
n'etaient pas dans la table a l'instant desire ne seront pas affichees.

La reorganisation supprime les lignes qui ne sont plus "actuelles" (courantes). La 
caracteristique spacio-temporelle est utilisee par le moteur du SGBD pour l'annulation des 
modifications et pour la restauration apres un plantage. Les dates/heures 
d'expiration peut etre indiques dans la commande purge.

En 6.0, apres le nettoyage d'une table, la date de creation d'une ligne peut etre 
incorrecte, causant l'echec d'un parcours de la base de donnees base sur les dates 
(time-travel).

Cette fonctionnalite de parcours dans le temps a ete supprimee dans la version 6.3.


3.20) Qu'est-ce qu'un oid ? Qu'est-ce qu'un tid ?

Les Oid sont la reponse de Postgres a des identificateurs de ligne uniques ou a des 
colonnes serielles. Chaque ligne qui est creee dans Postgres recoit un oid unique. 
Tous les oids generes par initdb sont inferieurs a 16384 (voir 
backend/access/transam.h). Tous les oids post-initdb (crees par un utilisateur) sont 
egaux ou superieurs a cette valeur. Tous ces oids sont uniques, non pas seulement dans 
une table,  ou une base de donnees, mais uniques a l'interieur de l'installation 
postgres toute entiere.

Postgres utilise les oids dans ses tables systeme internes pour relier les lignes de 
tables separees. Ces oids peuvent etre utilises pour identifier des lignes
 specifiques a un utilisateur et dans les jointures. On recommande l'utilisation de 
colonnes de type oid pour stocker des valeurs d'oids. Consulter les pages de manuel 
sql(l) pour voir les autres colonnes internes.

Les tids sont utilises pour identifier des lignes physiques specifiques contenant des 
valeurs de bloc ou de decalage. Les tids changent apres une modification ou un 
rechargement des lignes. Ils sont utilises par des enregistrements d'index pour pointer
sur des lignes physiques. On ne peut pas y acceder par sql.

3.21) Quel est le sens de quelques termes utilises dans Postgres ?

Des parties du code source et d'anciennes documentations utilisent des termes qui sont 
d'un usage plus commun. En voici quelques uns :

   * row, record, tuple           ligne, enregistrement, tuple
   * attribute, field, column     attribut, champ, colonne
   * table, class                 table, classe
   * retrieve, select             retrouver, selectionner
   * replace, update              remplacer, mettre a jour
   * append, insert               ajouter, inserer
   * oid, serial value            oid, valeur serielle
   * portal, cursor               portail, curseur
   * range variable, table name, table alias
                                  variable indiquant une etendue, nom de la
                                  table, alias de la table

Merci de me faire savoir si vous pensez a d'autres.

3.22) Qu'est-ce que l'Optimisation de Requete Genetique ?

Le module GEQO dans PostgreSQL est sense resoudre le probleme d'optimisation de requete 
sur la jointure de plusieurs tables au moyen d'un Algorithme Genetique  (GA). Il permet 
le traitement de grandes jointures par l'intermediaire d'une recherche non--exhaustive.

Pour de plus amples informations voir README.GEQO <utesch@aut.tu-freiberg.de>.

3.23) Comment supprimer une colonne d'une table ?

Il n'est pas possible d'utiliser ALTER TABLE DROP COLUMN, mais, faites ceci :

        SELECT ...  -- selectionne toutes les colonnes sauf celle que vous voulez supprimer
        INTO TABLE new_table
        FROM old_table;
        DROP TABLE old_table;
        ALTER TABLE new_table RENAME TO old_table;

3.24) Comment faire un SELECT uniquement sur les quelques premieres lignes d'une requete ?

Consultez la page de manuel concernant fetch.

Ceci evite seulement de transferer toutes les lignes du resultat au client. 
La requete complete doit etre evaluee, meme si vous ne desirez que les 
premieres lignes. Envisageons une requete qui utilise l'instruction
ORDER BY. Il n'y a aucun moyen de donner un resultat tant que la requete
complete n'aura pas ete evaluee et triee.

3.25) Pourquoi ne puis-je par creer une colonne dont le nom soit "time" ?

La version 6.2.1 comporte quelques mots-cles reserve nouveaux pour rendre PostgreSQL 
plus conforme a ANSI-92. La prochaine version verra ces restriction supprimees. Il existe
une rustine sur ftp.postgresql.org qui offre cette possibilite des maintenant.
---------------------------------------------------------------------------


Section 4: Extension de PostgreSQL

4.1) J'ai ecrit une fonction definie par l'utilisateur et quand je la fait tourner sous psql, 
j'ai un plantage avec vidage memoire.

Ce probleme peut provenir d'un certains nombre de causes. Tout d'abord, essayez de 
tester votre fonction dans un programme de test independant. Assurez-vous egalement 
que vous n'etes pas en train d'envoyer des MESSAGES elog quand le frontal attend des 
donnees, comme dans les fonctions type_in() or type_out() 

4.2) J'ai des messages du type "NOTICE-PortalHeapMemoryFree- 0x402251d0 not in alloc set"!

Vous etes en train de liberer (pfree) quelque chose qui n'a pas ete alloue (palloc). 
Quand vous ecrivez des fonctions definies par l'utilisateur, n'incluez pas le fichier 
"libpq-fe.h". Si vous faites cela, va entrainer que votre  palloc soit un malloc a la 
place d'un free. Puis, quand la tache de fond libere (pfrees) la memoire, vous recevez 
le message d'avertissement NOTICE.

4.3) J'ai ecrit quelques nouveaux types et quelques fonctions astucieux pour  PostgreSQL.

S'il vous plait, partagez-les avec les autre utilisateurs de PostgreSQL. Envoyez vos 
extensions dans la liste de diffusion, et elles finiront peut-etre dans le 
sous-repertoire contrib/.

4.4) Comment dois-je ecrire une fonction C qui retourne un tuple?

Cela necessite beaucoup de genie, tellement que les auteurs n'ont jamais essayer, bien 
que, en principe, cela soit possible. Une reponse breve sera ... vous ne pouvez pas. 
Cette possibilite est envisagee dans le future.

---------------------------------------------------------------------------

Section 5 : Bogues

5.1) Comment dois faire un rapport de bogue?

Regardez la FAQ actuelle a http://www.postgreSQL.org

Regardez aussi a notre site ftp://ftp.postgreSQL.org/pub pour voir s'il 
n'y a pas une version plus recente de PostgreSQL.

Vous pouvez aussi remplir le fichier formulaire "bug-template" et l'envoyer a :

   * bugs@postgreSQL.org

C'est l'adresse de la liste de diffusion des developpeurs.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre