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.
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