  Database-SQL-RDBMS HOW-TO pour Linux
  Al Dev (Alavoor Vasudevan)        alavoor@yahoo.com
  v13.0,23 Octobre 1999, (version franaise 28 Octobre 1999)

  Ce document est un "guide pratique" pour la mise en place rapide d'un
  moteur de Base de Donnes SQL et des outils frontaux sur un systme
  Unix. Il traite galement du langage standard International ANSI/ISO
  SQL et passe en revue les mrites/avantages d'un moteur de Base de
  Donnes dvelopp dans le cadre mondial de l'environnement de
  dveloppement ouvert d'internet.  Ce document explique COMMENT mettre
  en place une Base de Donnes Relationnelle SQL Objet de la nouvelle
  gnration "PostgreSQL" sur votre systme unix qui pourra tre
  utilise comme Base de Donnes Serveur d'Application ou Serveur Web.
  PostgreSQL implmente un sous-ensemble des normes Internationales ISO
  et ANSI SQL 1998,92,89. Ce document donne aussi des informations sur
  les programmes d'interface  la base de donnes tels que interfaces
  utilisateur graphiques (GUI), outils RAD (Dveloppement Rapide
  d'Application ), interfaage des langages de programmation ("C",
  "C++", Java, Perl), pilotes ODBC, JDBC ainsi que sur les outils et
  programmes interfaage d'une Base de Donnes Web . L'information
  donne ici est valable pour toutes autres plates-formes unix et autres
  Bases de Donnes. Cette information sera trs utile aux nouveaux util
  isateurs des Bases de Donnes, de PostgreSQL et du langage SQL.  Ce
  document comporte aussi un didacticiel SQL et les spcifications de la
  syntaxe SQL qui devrait tre trs utile aux dbutants. Les gens
  expriments trouveront dans ce document un guide de rfrence trs
  pratique. Pour les tudiants, l'information donne ici leur permettra
  d'obtenir le code source du Systme de Gestion de Base de Donnes
  Relationnel (SGBDR) PostgreSQL  partir duquel ils pourront tudier
  comment un moteur de SGBDR SQL est crit.
  ______________________________________________________________________

  Table des matires

































  1. Introduction

  2. Autres Formats de ce Document

  3. Les lois de la Physique s'appliquent au logiciel !

  4. Qu'est-ce que PostgreSQL ?

  5. O le trouver?

  6. PostgreSQL  grands pas

     6.1 Installation et tests
     6.2 Maximum RPM
     6.3 Test de PyGreSQL - Interface Python
     6.4 Test de Perl - Interface Perl
     6.5 Test des interfaces libpq, libpq++
     6.6 Test des interfaces Java
     6.7 Test des interfaces ecpg
     6.8 Test des exemples SQL - Types and fonctions dfinis par l'utilisateur
     6.9 Test des interfaces Tcl/Tk
     6.10 Test des interfaces ODBC
     6.11 Test des interfaces de la feuille de travail Motif MPSQL
     6.12 Vrification

  7. PostgreSQL Supporte des Base de Donnes extrmement grandes > 200 Gigas

  8. PostgreSQL est-il fiable?

  9. Outil GUI frontal pour PostgreSQL (Interface Utilisateur Graphique)

  10. Pilotes d'interface pour PostgreSQL

     10.1 ODBC Pilotes pour PostgreSQL
     10.2 Pilotes UDBC pour PostgreSQL
     10.3 Pilotes JDBC pour PostgreSQL
     10.4 Java pour PostgreSQL

  11. Pilote d'interface de SGBD Perl (Database Interface  DBI) pour PostgreSQL

     11.1 interface Perl 5 pour PostgreSQL
     11.2 DBI Interface de Base de Donnes Perl
        11.2.1 Qu'est-ce que DBI ?
        11.2.2 Pilote DBI pour PostgreSQL DBD-Pg-0.89
        11.2.3 Support technique sur DBI
        11.2.4 Qu'est-ce que c'est que DBI, DBperl, Oraperl and *perl?
        11.2.5 Spcifications DBI
        11.2.6 Problmes de compilation ou "Il choue aux tests"
        11.2.7 DBI est-il support sur les plates-formes Windows 95 / NT ?
        11.2.8 Qu'est-ce que DBM? Et pourquoi dois-je utiliser DBI  sa place?
        11.2.9 Est-ce que < insrez une fonctionnalit ici > est support par DBI?
        11.2.10 Est-ce que DBI est d'une quelconque utilit pour la programmation CGI?
        11.2.11 Comment puis-je obtenir un temps de connexion plus rapide avec DBD::Oracle et CGI CGI?
        11.2.12 Comment puis-je obtenir une connexion persistante avec DBI et CGI?
        11.2.13 "Quand je lance un script perl de la ligne de commande, a marche, mais, quand je le lance sous httpd, a choue!" Pourquoi?
        11.2.14 Puis-je faire de l'excution en parallle avec DBI?
        11.2.15 Comment puis-je invoquer des procdures enregistres avec DBI?
        11.2.16 Comment puis-je rcuprer les valeurs de retour de procdures enregistres avec DBI?
        11.2.17 Comment puis-je crer ou supprimer une base de donnes avec DBI?
        11.2.18 Comment les valeurs NULL sont-elles prises en compte par DBI?
        11.2.19 Qu'est-ce que c'est que ces histoires de mthodes func?
        11.2.20 Assistance et formation payante

  12. Outils de Gestion PostgreSQL

     12.1 PGACCESS - Un GUI pour la gestion de PostgreSQL
     12.2 Outil Windows interactif de gnration de requte pour PostgreSQL
     12.3 Outil interactif de gnration de requte pour PostgreSQL - ISQL
     12.4 MPMGR - Un outil de gestion de Base de Donnes pour PostgresSQL

  13. Mise en place de plusieurs machines PostgreSQL avec un seul moniteur

  14. Outils et Applications pour PostgreSQL

     14.1 PostgreSQL 4GL pour les applications de bases de donnes web - Le systme de dveloppement AppGEN
     14.2 WWW Web interface pour PostgresSQL - DBENGINE

  15. Module Apache Webserver pour PostgreSQL - NeoSoft NeoWebScript

     15.1 HEITML, extension, ct serveur de HTML et langage 4GL pour PostgreSQL
     15.2 Serveur Web America On-line AOL pour PostgreSQL
     15.3 Outil Systme de suivi de Problme/Projet pour PostgreSQL
     15.4 Conversion de fichiers dbase dbf en fichiers PostgreSQL

  16. Outil de Conception/Implmentation pour SGBD Web pour PostgreSQL - EARPW

     16.1 EARP, c'est quoi ?
     16.2 Implantation
     16.3 Ce dont vous avez besoin pour faire fonctionner EARP
     16.4 Comment fonctionne-t-il?
     16.5 O puis-je le trouver?

  17. PHP Pr-processeur Hypertexte - Langage de script ct serveur, avec HTML intgr, pour PostgreSQL

     17.1 Fonctionnalits principales
     17.2 Crdits
     17.3 PHP 3 - Bref Historique
     17.4 Bon, que puis-je faire avec PHP/FI?
     17.5 Un simple exemple
     17.6 Redirection CGI
        17.6.1 Notes Apache 1.0.x
        17.6.2 HTTPD Netscape
        17.6.3 HTTPD NCSA
     17.7 Lancer PHP/FI  partir de la ligne de commande

  18. Interface Python pour PostgreSQL

     18.1 O le trouver PyGres ?
     18.2 Information et support

  19. Passerelle entre PostgreSQL et WWW - WDB-P95

     19.1 Le serveur PostgresSQL, pgperl, et httpd doivent-ils rsider sur le mme hte?

  20. Interfaces au langage "C", "C++", ESQL/C et Oprateurs sur les bits pour PostgreSQL

     20.1 Interface "C"
     20.2 "C++" interface
     20.3 ESQL/C
     20.4 Oprateurs sur les bits pour PostgreSQL

  21. Les Codes Kanji Japonais pour PostgreSQL

  22. Portage de PostgreSQL pour Windows 95/Windows NT

  23. Mailing Lists

     23.1 Obtenir un compte e-mail Gratuit
     23.2 Liste de Diffusion Anglaise
     23.3 Archive des listes de diffusion
     23.4 Liste de Diffusion Espagnole

  24. Livres et Documentations

     24.1 Guides utilisateur et Manuels
     24.2 Documentation en ligne
     24.3 Documents de Rfrence: Ouvrages de rfrence utiles :
     24.4 Documents de Spcifications ANSI/ISO SQL - SQL 1992, SQL 1998
     24.5 Syntaxe de l'ANSI/ISO SQL 1992
     24.6 Syntaxe de l'ANSI/ISO SQL 1998
     24.7 Didacticiel SQL pour les dbutants
     24.8 Extension Temporelle  SQL92
     24.9 Partie 0 - Acquisition des Documents ISO/ANSI SQL
     24.10 Partie 1 - Etat Actuel de l'ISO/ANSI SQL
     24.11 Partie 2 - Fondements ISO/ANSI SQL
     24.12 Partie 3 - Interface d'Appel SQL ISO/ANSI
     24.13 Partie 4 - Modules Mmoriss Persistants ISO/ANSI SQL
     24.14 Partie 5 - ISO/ANSI SQL/Liens
     24.15 Partie 6 - Interface de Spcialisation (SQL/XA) ISO/ANSI SQL XA)
     24.16 Partie 7 - ISO/ANSI SQL Temporel
        24.16.1 INTRODUCTION
        24.16.2 TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION COURANTE
        24.16.3 TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION HISTORIQUE
        24.16.4 TUDE DE CAS - PROJECTION
        24.16.5 TUDE DE CAS - JOINTURE
        24.16.6 TUDE DE CAS - AGRGATS
        24.16.7 RSUM
     24.17 Partie 8 - SQL MULTIMEDIA ISO/ANSI (SQL/MM)

  25. Support Technique pour PostgreSQL

  26. Aspects conomiques et Commerciaux

  27. Liste des autre Bases de Donnes

  28. Indications pour la recherche sur le World Wide Web Internet

  29. Conclusion

  30. FAQ - Questions sur PostgreSQL

  31. Notice de Copyright

  32. Appendice A - Syntaxe de l' ANSI/ISO SQL 1992

  33. Appendice B - Tutoriel SQL  l'usage des dbutants

     33.1 Didacticiel pour PostgreSQL
     33.2 Pointeurs URL Internet

  34. Appendix C - Instructions pour une installation rapide de Linux



  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  Le but de ce document est de fournir une liste de pointeurs/URL
  dtaille de faon  mettre rapidement en oeuvre PostgreSQL et de
  mettre en avant l'intrt des systmes  Code Source Ouvert tel que
  PostgreSQL, Linux.

  Tout systme informatique au monde a besoin d'une base de donnes pour
  stocker/retrouver les informations. La premire raison pour laquelle
  on utilise un ordinateur est de stocker, retrouver et traiter
  l'information et de faire cela trs rapidement, et donc, de faire
  conomiser du temps.  En mme temps, le systme doit tre simple,
  robuste, rapide, fiable, conomique et d'utilisation aise.  La Base
  de Donnes constitue une PPAARRTTIIEE VVIITTAALLEE DDUU SSYYSSTTMMEE des plus importantes
  car elle contient les donnes indispensables de toute compagnie au
  monde.  Les systmes de gestion de base de donnes les plus courants
  sont bass sur les spcifications ISO (International Standard
  Organisation) SQL lesquelles sont galement bases sur les normes
  amricaines ANSI SQL. Les spcifications les plus courantes
  gnralement utilises sont l'ISO/ANSI SQL 1992. La prochaine norme,
  encore en cours de dveloppement est la SQL 1998/99 aussi appele
  SQL-3. Les systmes de gestion de bases de donnes les plus rpandus
  tels que Oracle, Sybase et Informix s'appuient sur ces standards ou
  essaient de les implmenter.

  Il y a plus de 20 varits, commerciales/internet,  de systmes de
  gestion de base de donnes actuellement utiliss dans le monde et
  beaucoup plus dans un futur proche. En l'absence d'une norme telle que
  l'ANSI/ISO SQL, il serait trs difficile pour l'utilisateur de
  dvelopper une application une fois pour toutes et de l'utiliser avec
  tous les systmes de gestion de bases de donnes. L'utilisateur veut
  dvelopper son application une fois pour toutes en utilisant les
  normes ISO SQL, ODBC, JDBC afin qu'elle puisse tre dploye sur une
  grande varit de systmes de gestion de base de donnes a travers le
  monde.

  PostgreSQL est la Base de Donne LIBRE la plus populaire au monde qui
  implmente la plupart des normes ISO SQL, ANSI SQL/98, SQL/92 et ANSI
  SQL/89 RDBMS. PostgreSQL est une base de donnes relationnelle Objet
  de la nouvelle gnration et les futures normes ANSI SQL tels que le
  SQL 1998 (SQL-3) et au-del traiteront de manire croissante de bases
  de donnes Objet et de types de donnes Objet. PostgreSQL est le seul
  SGBD (RDBMS - Relational Data Base Management System) au monde qui
  supporte les bases de donnes Objet et SQL. Ce document vous explique
  comment installer le systme de gestion de base de donnes, comment
  mettre en place la base de donnes Web, la base de donnes application
  , les frontaux GUIs et les programmes interfaage. On ne saurait trop
  RECOMMANDER d'crire vos applications bases de donnes 100 %
  compatibles avec les normes ISO/ANSI SQL, ODBC, JDBC ceci rendant
  votre application portable sur de multiples SGBD (Systmes de gestion
  de Bases de Donnes) tels que PostgreSQL, Oracle, Sybase, Informix
  etc.

  La haute qualit, et un large ensemble de possibilits de PostgreSQL
  viennent du fait que ce systme est dvelopp suivant le principe du
  Modle de dveloppement  Code Source Ouvert. Les modles  Code
  Source Ouvert sont ceux ou la totalit du code source est fournie et
  ou le dveloppement se fait  travers l'internet par une trs vaste
  communaut de cerveaux humains en rseau. La tendance future des
  dveloppement logiciels rside dans ce que l'on appelle les "super
  autoroutes de l'information" qui s'tendent  travers le monde entier.
  Dans les annes  venir, la croissance d'internet va tre explosive et
  de ce fait favorisera l'adoption de PostgreSQL par la communaut des
  utilisateurs de bases de donnes.

  Par l'application des principes de la statistique, des mathmatiques
  et de la science  la qualit des logiciels, on obtient la meilleure
  qualit des logiciels  ' Code Source Ouvert' tel que PostgreSQL en
  mettant le code source des programmes  la disposition d'un grand
  nombre de cerveaux humains interconnects par les super-autoroutes de
  l'information. Plus le nombre de cerveaux au travail sera grand,
  meilleure sera la qualit du logiciel produit. Le modle " Code
  Source Ouvert" vite aussi de RRIINNVVEENNTTEERR LLAA RROOUUEE, supprime LLAA
  DDUUPPLLIICCAATTIIOONN DDUU TTRRAAVVAAIILLtout en tant particulirement conomique, en
  diminuant les dlais de distribution et en suivant les lois
  conomiques modernes d'optimisation des ressources nationales et
  globales.  Une fois qu'un logiciel a t ralis par d'autres, vous
  NN''AAVVEEZZ PPAASS  recommencer le travail. Vous ne perdrez pas un temps
  prcieux sur quelque chose qui a dj t CCOORRRREECCTTEEMMEENNTT ralis.  Votre
  temps est extrmement prcieux et il faut l'utiliser de manire
  efficace, car vous ne disposez que de 8 heures par jour pour
  travailler!!.  Dans un futur proche,  l'aube du 21-ime sicle, la
  manire de se procurer un logiciel va changer. Les utilisateurs
  accorderont en premier lieu leur prfrence aux logiciels ouverts tel
  PostgreSQL, Linux etc...

  En achetant des binaires vous n'obtenez pas la vritable proprit du
  logiciel et ce n'est pas juste. Acheter un logiciel _p_e_u_t devenir une
  attitude archaque. On a seulement besoin d'acheter un bon matriel,
  il vaut mieux dpenser de l'argent en matriel et trouver le logiciel
  sur internet.  Le point important, c'est que llee ggrrooss dduu ttrraavvaaiill est
  effectu par le matriel. Le matriel est le cheval de bataille et le
  logiciel est l pour le piloter.  Le matriel est tellement plus
  compliqu que seulement 6 pays sur 180 au monde ont dmontr leur
  capacit  concevoir et  fabriquer les composants d'ordinateurs. La
  conception et la fabrication de composants d'ordinateurs est une
  technologie avance. C'est un processus trs complexe, requrant de
  trs larges investissements en usine et en machines de production
  matrisant la technologie des 0.18 micron. Des milliards de
  transistors/circuits sont implants sur une petite puce de silicium.
  Des compagnies telles que Applied Material, AMD, Intel, Cyrix,
  Hitachi, Ibm et autres ont dpens d'importantes quantits d'hommes-
  ans de travail pour matriser des hautes technologies telles que la
  Micro-lectronique et la Nano-lectronique (Micro signifie millionime
  de mtre et Nano signifie milliardime de mtre).  La technologie
  actuelle utilise la micro-lectronique  0.35 microns avec des
  conducteurs en aluminium, celle de 0.25 microns utilise des
  conducteurs de cuivre. Dans un futur proche, la technologie des 0.10
  microns avec conducteurs de cuivre et mme la nano-lectronique sera
  utilises pour les circuits intgrs d'ordinateurs.  Les conducteurs
  en aluminium seront dtrns par ceux en cuivre sur les puces
  d'ordinateurs, car le cuivre est meilleur conducteur d'lectrons.  En
  photo-lithographie, l'extrme ultraviolet, les rayons X ou les
  techniques de faisceau d'electrons seront utilises pour graver des
  circuits de taille infrieure  0.15 microns.  Dans environ 20 ans,
  les circuits en silicium seront remplaces par des ordinateurs
  molculaires et des circuits biologiques qui seront des millions de
  fois plus rapides que les circuits en silicium.  Les molcules sont
  des groupes d'atomes, et les atomes sont de minuscules particules
  constituant la matire premire premire de tout ce qui nous entoure.
  Les ordinateurs molculaires utiliseront les molcules en tant
  qu'interrupteurs lectroniques ultra rapides. Lorsque l'interrupteur
  est ferm (ON), on obtient la valeur 1 et quand il est ouvert (OFF),
  la valeur 0. Tous les programmes d'ordinateurs au monde utilisent
  l'algbre binaire (nombres 0 et 1).  Le tableau ci-dessous montre les
  progrs et les tendances futures des puces d'ordinateurs.


















                  Progrs dans les capacits des puces dans le futur
                  **************************************************
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Item/Anne                     | 1997   | 1999   | 2001   | 2003   | 2012  |  2020   |
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Technologie (micron)           | 0.25   | 0.18   | 0.15   | 0.13   | 0.05  |< 0.00001|
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Taille de la puce(mm)          | 200    | 300    | 300    | 300    | 45    | Mol/bio |
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Tension mini. de fonctionnement| 1.8-2.5| 1.5-1.8| 1.2-1.5| 1.2-1.5|0.5-0.6| < 0.001 |
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Puissance dissipe maximum     | 70     | 90     | 110    | 130    | 175   |  600    |
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | frquence de fonct. puce  (MHz)| 750    | 1250   | 1500   | 2100   | 10000 | > 50 000|
  +--------------------------------+--------+--------+--------+--------+-------+---------+
  | Capacit mmoire DRAM          | 256 MB | 1 GB   | 2 GB   | 4 GB   | 256 GB| > 1000GB|
  +--------------------------------+--------+--------+--------+--------+-------+---------+




  Comme on peut le voir c'est le matriel qui est important et de haute
  technologie, le logiciel est une technologie moins difficile 
  matriser. Donc la fabrication de matriel est vitale pour l'conomie
  nationale!. Des compagnies comme Compaq, Dell, Sun Microsystems, HP,
  IBM qui fabriquent des ordinateurs contribuent de faon importante 
  l'conomie U.S. aujourd'hui et dans le futur!!

  D'un autre ct, chaque pays au monde dveloppe/produit du logiciel.
  En fait, n'importe qui dans le monde, avec un petit PC conomique,
  peut crer un systme serveur de base de donnes Oracle.  Mais cela
  lui prendra environ 10 ans (Le serveur de base de donnes Oracle
  correspond  plus de 10 hommes-ans de travail). Un homme-an correspond
  au travail d'un homme  temps plein pendant une anne. Si 10 personnes
  travaillent pendant un an cela correspond  10 hommes-ans.

  Les SGBD tels que Oracle, Informix, Sybase, IBM DB2 (Unix) sont crits
  en langage "C" et les binaires crs par compilation de ces sources
  sont fournis aux clients. Les SGBD Oracle,  Sybase, Informix sont des
  programmes "C"  100 %!!.

  Puisqu'une masse importante de travail a t effectue sur PostgreSQL
  au cours des 14 dernires annes, cela n'aurait aucun sens de recrer
  ex-nihilo un autre systme de gestion de base de donnes satisfaisant
  aux normes ANSI/ISO SQL. Il est bien plus intressant de prendre le
  code existant de PostgreSQL, de commencer  l'utiliser, de l'amliorer
  et d'y ajouter les fonctionnalits manquantes.

  PostgreSQL n'est pas seulement un SGBD libre mais aussi un "Produit
  Internet" de bonne qualit.

  On peut prdire que la demande de produits "Fabriqu sur Internet" va
  crotre exponentiellement. Ces produits tant de haute qualit, de
  faible cot et ayant une base d'utilisateurs et de dveloppeurs
  extrmement large.  Les pays qui n'utilisent pas  les produits
  "Fabriqu sur Internet" seront les oublis de "la Rvolution mondiale
  Internet" et resteront loin derrire les autres pays. La raison
  provient de ce "qu'Internet" lui-mme est la PPLLUUSS GGRRAANNDDEE compagnie de
  logiciels!

  22..  AAuuttrreess FFoorrmmaattss ddee ccee DDooccuummeenntt

  Ce document est publi en 10 formats diffrents qui sont - DVI,
  Postscript, Latex, LyX, GNU-info, HTML, RTF(Rich Text Format), Texte
  simple, Pages de manuel Unix et SGML.

    Vous pouvez obtenir ce document HOWTO en tant que fichier tar dans
     les formats HTML, DVI, Postscript ou SGML de -
     <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/>

    Le format texte simple se trouve dans:
     <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO>

    Des traductions dans d'autres langues telles que le Franais,
     l'Allemand, l'Espagnol, le Chinois se trouvent dans
     <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO> Toute aide que vous
     pourriez apporter pour le traduire dans d'autres langues sera la
     bienvenue.

     Ce document est rdig  l'aide d'un outil appel "SGML tool" que
     l'on peut obtenir de - <http://www.xs4all.nl/~cg/sgmltools/> Pour
     compiler le texte source, vous utilisez des commandes telles que :

    sgml2html databasehowto.sgml     (pour gnrer un fichier html)

    sgml2rtf  databasehowto.sgml     (pour gnrer un fichier RTF)

    sgml2latex databasehowto.sgml    (pour gnrer un fichier latex)

  Ce document se trouve  -

    <http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html>

  Vous pouvez galement le trouver sur les sites miroirs suivants -

    <http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html>

    <http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html>

    <http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.html>

    <http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.html>

    Vous pouvez trouver d'autres sites miroirs proches de chez vous (au
     sens d'adresse rseau)  <http://sunsite.unc.edu/LDP/hmirrors.html>
     choisissez un site et allez dans le rpertoire
     /LDP/HOWTO/PostgreSQL-HOWTO.html


  Pour visualiser le document au format dvi, utilisez le programme xdvi.
  Le programme xdvi se trouve dans le paquetage tetex-xdvi*.rpm de
  Redhat Linux que l'on trouve en choisissant les menus  : Panneau de
  contrle | Applications | Publication | TeX.  Pour lire le document,
  tapez la commande -


               xdvi -geometry 80x90 howto.dvi
         man xdvi




  Et redimensionnez l'cran  l'aide du mulot. Consultez la page de
  manuel concernant xdvi.  Pour naviguer dans le document, utilisez les
  touches Flches, Page prcdente ,Page suivante. Vous pouvez aussi
  utiliser les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour vous
  dplacer vers le haut, vers le bas, au centre, vers la page
  prcdente, Pour dsactiver le menu expert, tapez 'x'.

  Vous pouvez lire le fichier postscript en utilisant le programme 'gv'
  (ghostview) ou Le programme ghostscript se trouve dans le paquetage
  ghostscript*.rpm et le programme gv dans le paquetage gv*.rpm de Linux
  Redhat que l'on peut trouver en choisissant les menus : Panneau de
  contrle | Applications | Graphique.  Le programme gv est beaucoup
  plus convivial que ghostscript.  Les programmes ghostscript et gv sont
  disponibles sous d'autres plates-formes telles que OS/2, Windows 95 et
  NT, vous pouvez donc visualiser ce document sur ces plates-formes.
  Pour lire le document postscript tapez la commande -


                       gv howto.ps




  AATTTTEENNTTIIOONN:: ce document est volumineux, le nombre total de pages
  (postscript) imprimes est approximativement de 134.

  Vous pouvez lire ce document en format HTML en utilisant Netscape
  Navigator, Microsoft Internet explorer, Redhat Baron Web browser ou
  n'importe lequel des 10 butineurs web.

  Vous pouvez le lire en format latex de sortie de LyX en utilisant LyX,
  frontal X-Window pour latex.

  33..  LLeess llooiiss ddee llaa PPhhyyssiiqquuee ss''aapppplliiqquueenntt aauu llooggiicciieell !!

  Dans ce chapitre, on montrera comment la science joue un rle
  important dans la cration de nombreux objets comme le logiciel, cet
  univers, la masse, les atomes, les nergies et mme vous-mme !.  Ce
  chapitre montre galement pourquoi il est important d'avoir des
  connaissances en science AVANT de commencer  en utiliser les
  produits.  Tout en fait partie - par exemple PostgreSQL, le temps, la
  masse, l'nergie, les plantes, le soleil, la lune, les toiles, les
  super-amas, les humains etc... sont des objets crs par la science.
  Ce chapitre montre galement comment les lois de la science et les
  statistiques tmoignent en faveur de systmes  code source ouvert
  comme PostgreSQL et Linux.  La vitesse d'internet s'accroissant de
  jour en jour, et internet devenant de PLUS EN PLUS fiable, les
  systmes  code source ouvert gagnent rapidement de l'audience.  Et,
  si les rgles de la statistique et les lois de la physique sont
  correctes, les systmes  code source ferms sont appels 
  DISPARATRE de cette plante.

  Les paragraphes ci-dessous montreront - "combien la science est vaste,
  combien elle est importante pour les hommes et quel est son impact sur
  des projets logiciels comme PostgreSQL, Linux".

  Le dveloppement d'un projet tel que PostgreSQL requiert des
  ressources telles que de l'nergie et du temps, de ce fait, PostgreSQL
  est un produit d'nergie et de temps.  Puisque l'nergie et le temps
  ne peuvent d'expliquer que par la science, il y a une corrlation
  directe entre la physique et les projets tels que PostgreSQL, Linux.


  Les lois des sciences (Physique) s'appliquent partout, toujours, 
  tout ce que vous faites et mme aux projets logiciels.  La physique
  est en action pendant que vous parlez (ondes sonores), marchez
  (frottement entre le sol et vos pieds), lisez un livre ou crivez un
  logiciel.  Diffrentes branches des sciences, telles que la physique,
  la chimie, etc... se rejoignent toutes dans un vaste ensemble, les
  mathmatiques (galement nommes Reine des Sciences).

  Et tout, dans ce monde, a des racines profondes dans les
  mathmatiques, y compris PostgreSQL.  PostgreSQL utilise L'algbre
  moderne qui constitue une petite branche des mathmatiques. L'algbre
  moderne concerne la Thorie des ensembles , l'algbre
  relationnelle, la science des Groupes, des Anneaux, les Collections,
  Ensembles, Unions, Intersections, Exclusions,Domaines, Listes, etc...


  Un logiciel tel que PostgreSQL existe aujourd'hui grce  l'nergie et
  au temps.  C'est l'nergie qui a cr ce monde, les cerveaux humains
  et beaucoup d'autres choses!.  Et, la masse et l'nergie sont UNE et
  la MMMMEE entit!.  Il y a 100 ans, le fait que la masse et l'nergie
  soient la mme chose n'tait pas connu des gens !

  Les cellules des cerveaux humains consomment de l'nergie en
  travaillant ( la cration d'un logiciel), transformant de l'nergie
  chimique en chaleur.  Mme pendant la lecture de ce paragraphe, les
  cellules de votre cerveau consomment du carburant et utilisent de
  l'nergie. Donc INTERROMPEZ IMMDIATEMENT VOTRE LECTURE!


  L'nergie rsultant de l'activit des neurones (cellules du cerveau)
  peut tre mesure en laboratoire. Par exemple, il y a de nombreux
  instruments comme le "dtecteur de mensonge" et autres instruments
  mdicaux qui peuvent mesurer l'activit du cerveau. Tout cela sous-
  entend que le cerveau humain est une machine thermodynamique. Et comme
  le cerveau humain est une machine thermodynamique, les lois de la
  thermodynamique d'appliquent au cerveau et, par consquent, la
  thermodynamique a des effets indirects sur les logiciels comme
  PostgreSQL.

  Suivant la science, il est impossible de construire tout systme ou
  thorie (y compris un systme logiciel de gestion de base de donnes)
  qui soit parfait  100 % et sans erreur.  C'est comme poursuivre un
  mirage, nous ne pourrons JJAAMMAAIISS atteindre l'objectif d'obtenir la
  perfection dans un systme ou une thorie.  Les quations/discussions
  mathmatiques dtailles pour prouver qu'un "systme parfait" (de mme
  pour prouver qu'un "systme imparfait") est impossible sont des sujets
  avancs et hors sujet dans ce document. Et une telle tude
  mathmatique implique la prise en compte d'un nombre infini de
  dimensions (ainsi que les dimensions primaires) que l'on trouve dans
  la nature. Malheureusement, les humains ne peuvent voir et
  conceptualiser que 4 dimensions alors que les mathmatiques peuvent
  facilement en explorer beaucoup d'autres.  Les autres dimensions sont
  ""iinnffiinniimmeenntt pplluuss ppeettiitteess"" que les atomes, et les atomes eux-mmes sont
  si minuscules que les yeux humains ne peuvent pas les voir !  Pour
  analyser et expliquer la naissance et la mort de notre univers, les
  mathmatiques constituent un outil trs puissant.  Notre univers, si
  vous le regardez  partir d'un autre univers possde pratiquement une
  ttaaiillllee nnuullllee et vice versa. Ce qui signifie que notre univers n'est
  pas visible (n'existe pas) pour les gens d'un autre univers ! Et vice
  versa !  Thoriquement, il est possible de sortir de notre univers et
  de voyager sur des distances immenses (milliard d'annes lumire) en
  un temps nul et de rentrer en un point diffrent de l'espace-temps !.
  La distance entre notre univers et les autres univers est en ralit
  nulle !.

  Bien qu'il y ait un nombre infini de dimensions, celles-ci peuvent
  tre dduites/gnres  partir d'un nombre restreint de dimensions
  PRIMAIRES.  C'est--dire qu'un nombre infini de dimensions peut se
  combiner et se ramener aux dimensions primaires. Les dimensions
  primaires absorbent simplement les autres dimensions sans tre
  dtruites.  Les mathmaticiens utilisent ces dimensions primaires pour
  comprendre la naissance et la mort des univers. L'univers o vous
  vivez actuellement a commenc  exister lors d'un BBIIGG BBAANNGG, caus par
  les interactions de particules atomiques d'autres dimensions, qui
  s'est produit il y a des milliards d'annes (environ 20 milliards
  d'annes).  Juste avant le big bang il y avait un petit point o la
  longueur, la largeur, la hauteur et le temps taient NULS (
  c'est--dire que notre univers N'EXISTAIT PAS !!) alors que d'autres
  univers et les dimensions primaires existaient.  Le temps lui-mme
  n'existait PAS l et les atomes, les toiles, les plantes et les
  galaxies n'existaient PAS! Les atomes qui sont  l'intrieur de notre
  corps n'existaient PAS !!.  Tellement de choses se sont passes AVANT
  qu le temps n'existe !

  Le big bang et donc la naissance de notre univers rsulte de quelques
  atomes de dimensions primaires. QQUUEELLQQUU''UUNN, (quelque chose ?), a caus
  le fracassement de quelques atomes minuscules d'autres dimensions pour
  crer notre univers, et de nouvelles dimensions de temps, de longueur,
  de largeur et de hauteur taient nes !. Nous voyons l'effet d'une
  quelconque main dans se processus.  Ce processus nn''eesstt ppaass
  ppaarrffaaiitteemmeenntt ccoommpprriiss par les hommes. Ceux-ci essaient de gnrer un
  autre univers en laboratoire en simulant le big bang (Un acclrateur
  trs puissant est en construction en Europe, un autre, en cours de
  construction  Dallas, aux USA, a t arrt par le congrs US pour
  cause de coupes budgtaires). Il y a des atomes dans d'autres
  dimensions exactement comme nous avons des atomes dans notre univers.
  Thoriquement, on peut crer/gnrer un nombre infini d'univers !. Ce
  processus est rversible, ce qui veut dire que notre univers peut
  compltement s'effondrer sur lui-mme et disparatre en quelques
  atomes d'autres dimensions !. C'est une analogie similaire  la faon
  dont VOUS tes ns  partir de de deux cellules minuscules qui se sont
  FRACASSES l'une contre l'autre pour crer une cellule unique. Cette
  toute petite cellule s'est divise et multiplie en 6 billions de
  cellules pour devenir cet tre humain de 1.80 mtre (que vous tes !).
  Il y a une ressemblance entre les tres humains et les univers qui
  naissent puis meurent, un peu comme les humains.

  Puisqu'un tat PARFAIT (comme IMPARFAIT) est impossible, des univers
  comme le ntre sont ns et plus tard mourront selon un processus
  cyclique. MAIS il ne peut pas y avoir de mort PARFAITE, seules des
  transformations sont permises par la science !.  Actuellement notre
  univers est en expansion  un rythme formidable, il n'est pas statique
  mais trs dynamique.  Cet univers continuera son expansion jusqu' ce
  que quelque chose interfre pour entraner son effondrement par
  l'application de pressions ayant des dimensions externes qui
  l'annihileront !!. Il y a deux possibilits  : suppression de masse de
  l'univers via les trous noirs (processus lent), ou ajout de masse 
  l'univers via les trous blancs (processus rapide d'un big crunch). Des
  millions d'univers peuvent exister mais seuls trs peu d'univers
  peuvent tre btis  partir des dimensions primaires.  Vous n'tes pas
  constitus uniquement d'atomes de cet univers mais aussi d'atomes
  d'autres dimensions !.  Dans les trous noirs les atomes et les
  particules de notre univers sont engloutis et entirement transforms
  et convertis en particules d'autres dimensions !. Au centre d'un trou
  noir, le temps est nul comme le sont la longueur, la largeur et la
  hauteur !. Et le trou noir constitue la porte d'ENTRE/SORTIE pour
  d'autres univers. Ces portes d'entre/sortie peuvent s'ouvrir
  n'importe o, mme  l'intrieur de votre corps !

  Il peut y avoir un nombre infini de couleurs, de langages
  informatiques, d'architectures de circuits d'ordinateurs et de
  thories, mais il NE PEUT PAS y avoir LA PERFECTION pour UN(E) SEUL(E)
  couleur, langage informatique, architecture ou systme !  Vous ne
  pouvez obtenir qu'une couleur (longueur d'onde, qu'un systme, qu'une
  base de donnes ou une thorie PRESQUE PARFAITE !  La nature est comme
  un kalidoscope.

  En combinant les nergies de millions de personnes  travers le monde
  via internet il est possible d'obtenir un systme PPRREESSQQUUEE PPAARRFFAAIITT (y
  compris un systme logiciel de gestion de base de donnes). Prise
  individuellement, l'nergie de chacun est microscopique, mais en
  mettant en rseau un trs grand nombre de personnes, l'nergie totale
  sera norme, et elle peut tre canalise pour crer un systme presque
  parfait.  Les tres humains sont des cratures  l'nergie et aux
  ressources finies, ports  faire des erreurs allant de la plus
  triviale  la plus profonde. Puisque notre propension  faire des
  erreurs varie largement en fonction de qualifications particulires,
  d'exprience particulire et des humeurs du moment, la dcouverte et
  l'limination des erreurs logicielles dues  des erreur humaines
  ordinaires peut tre largement facilite en concentrant un grand
  nombre d'esprits humains  ce problme.

  Il est trs clair qu'internet peut mettre en rseau un grand nombre de
  personnes, ce qui implique qu'internet possde beaucoup d'nergie et
  de temps qui peuvent crer des produits logiciels de bien meilleure
  qualit, en un temps plus court, que des compagnies commerciales. Mme
  de grandes compagnies comme Microsoft, IBM ne peuvent pas s'affranchir
  des lois de la physique mais finalement SSEE PPLLIIEERR aux lois de la
  science !

  Aujourd'hui, il y a beaucoup trop de systmes de base de donnes
  relationnelles SQL RDBMS dans le monde se rfrant  une spcification
  ANSI/ISO SQL unique.  LL''hhuummaanniitt nnee ddooiitt ppaass ppeerrddrree ssoonn tteemmppss  ccrreerr
  ddee ttrroopp nnoommbbrreeuuxx ppaaqquueettaaggeess llooggiicciieellss SSIIMMIILLAAIIRREESS OOUU IIDDEENNTTIIQQUUEESS  alors
  qu'il y a trop d'autres sujets en sciences qui mriteraient
  l'attention.

  En conclusion,  cause des lois de la science, les systmes  "code
  source ouvert" comme PostgreSQL, Linux seront toujours meilleurs que
  les systmes  "code source ferm", et il est possible de prouver
  cette affirmation scientifiquement.

  44..  QQuu''eesstt--ccee qquuee PPoossttggrreeSSQQLL ??

  PostgreSQL Version 6.5.2 est un SGBD libre, son code source complet
  est fourni. De plus, c'est un SGBD Relationnel-Objet pratiquement
  conforme (de plus en plus conforme) aux normes ANSI SQL1998,92,89. Il
  fonctionne sur diverses plates-formes matrielles sous diffrents
  Systmes d'Exploitation.


               Quelquefois des corrections urgentes d'erreurs sont diffuses aprs la diffusion
               d'une rvision de PostgreSQL. Vous pouvez appliquer ces rustines optionnelles
               selon les besoins de votre application. Effectuez les tapes suivantes pour
               appliquer ces rustines -
                       cd /usr/src/postgresql6.5.2
           man patch
                       patch -p0 < patchfile
                       make clean
                       make




  Les fichiers de mise  jour se trouvent dans

    Rustines PostgreSQL :  <ftp://ftp.postgresql.org/pub/patches>

  L'objectif ultime et le but final de PostgreSQL est de devenir
  compatible  100 %  la norme ANSI/ISO SQL ainsi que de devenir le
  numro UN mondial des systmes de gestion de Base de Donnes ouverts
  gnriques. PostgreSQL guidera, conduira, contrlera, suivra et
  dictera le futur de l'ANSI/ISO SQL.  C'est--dire, l'implmentation et
  les ides apparatront en premier dans PostgreSQL puis, plus tard,
  seront incorpors dans l'ANSI/ISO SQL. PostgreSQL reprsente "l'tat
  de l'art" de la technologie des bases de donnes.

  Le serveur Informix Universal (diffus en 1997) est bas sur une
  version prcdente de PostgreSQL car Informix a achet Illustra Inc.
  et l'a intgre  Informix. La base de donnes Illustra tait
  compltement base sur Postgres (version prcdente de PostgreSQL).
  PostgreSQL est une amlioration du SGBD POSTGRES, prototype de
  recherche de SGBD de la prochaine gnration. PostgreSQL, tout en
  conservant le puissant modle de donnes et la richesse des types de
  donnes de POSTGRES, remplace le langage de requte PostQuel par un
  sous-ensemble tendu de SQL.

  Le dveloppement de PostgreSQL est ralis par une quipe de
  dveloppeurs Internet qui sont tous inscrits  la liste de diffusion
  "PostgreSQL dveloppement mailing list".  Son coordinateur actuel est
  Marc G. Fournier

    scrappy@postgreSQL.org

     Cette quipe est maintenant responsable des dveloppements actuels
     et futurs de PostgreSQL. Naturellement, l'utilisateur de la base de
     donnes est lui-mme dveloppeur de PostgreSQL!. La charge de
     dveloppement est rpartie au sein d'un grand nombre d'utilisateurs
     finaux de bases de donnes sur internet.

  Les auteurs de  PostgreSQL 1.01 sont Andrew Yu et Jolly Chen.  De
  nombreux autres ont contribu au portage, aux tests,  la mise au
  point et a l'amlioration du code. Le code original Postgres, duquel
  PostgreSQL est issu, est le rsultat de l'effort de nombreux tudiants
  de troisime cycle, de deuxime cycle et d'enseignants sous la
  direction du Professeur Michael Stonebraker de l'universit de
  Californie, Berkeley.

  Le nom original du logiciel  Berkeley tait Postgres. Lors de l'ajout
  des fonctionnalits SQL en 1995, il fut renomm Postgres95. Ce nom fut
  chang  la fin de 1996 en PostgreSQL.

  Des millions d'exemplaires du SGBD PostgreSQL sont installs comme
  serveurs, serveurs Web et serveurs d'application. Ce SGBD est trs
  avanc, c'est un SGBD Relationnel-Objet (ORDBMS).

  PostgreSQL peut stocker plus de types de donnes que les types
  traditionnels entier, caractres, etc. - L'utilisateur peut crer des
  types, des fonctions, de l'hritage de type etc. PostgreSQL fonctionne
  sur Solaris, SunOS, HPUX, AIX, Linux, Irix, Digital Unix, BSDi,
  NetBSD, FreeBSD, SCO unix, NEXTSTEP, Unixware et toutes sortes d'unix.
  Un portage pour Windows 95/NT est en cours de ralisation.

    Titre :           PostgreSQL SQL RDBMS Database (Systme de Gestion
     de Base de Donnes Relationnelle Objet)

    Version actuelle : 6.5.2

    Age :           PostgreSQL a 14 ans. En dveloppement depuis 1985

    Auteurs :         Dvelopp par des millions
     d'universits/compagnies sur internet au cours de ces 14 dernires
     ANNES

     PostgreSQL et les lments qui s'y rapportent dans ce document sont
     couverts par le COPYRIGHT de l'Universit de Californie, Berkeley.

  55..  OO llee ttrroouuvveerr??

  On peut acheter le CDROM Linux Redhat 5.0, le CDROM Linux Debian ou le
  CDROM Linux Slackware qui contiennent dj postgresql sous forme de
  paquetage (a la fois en code source et en binaires) au :

    site Web Linux System Labs :  <http://www.lsl.com/>  (7 U.S.
     dollars)


    site Web Cheap Bytes Inc :  <http://www.cheapbytes.com/> (7 U.S.
     dollars)

    site Web Principal Debian :  <http://www.debian.org/vendors.html>

  L'organisation PostgreSQL vend un 'CDROM PostgreSQL' qui contient le
  code source complet et les binaires pour de nombreux systmes
  d'exploitation Unix, ainsi que la documentation complte.

    CDROM PostgreSQL au site Web principal  :
     <http://www.postgresql.org> 30 (U.S. dollars)

  Distributions uniquement en binaire de PostgreSQL :

    On peut excuter PostgreSQL sans compiler le source. Rcuprer les
     binaires pour Intel-Linux de l'url
     <ftp://www.redhat.com/pub/contrib/i386/> le fichier se nomme
     postgresql-6.5.2.i386.rpm.  Son format est de type paquetage redhat
     'rpm'. Il contient  la fois le source et les binaires de
     PostgreSQL.

    Sites binaires pour Solaris, HPUX, AIX, IRIX, Linux :
     <ftp://ftp.postgresql.org/pub/bindist> Si vous faites une
     compilation pour n'importe laquelle des plates-formes envoyer le
     binaire  ce site, cela peut tre utile aux autres.

    site ftp : rcuprer les binaires pour Intel-Linux de
     <ftp://ftp.redhat.com/pub/contrib/i386/> le fichier se nomme
     postgresql-6.5.2.i386.rpm. Son format est de type paquetage redhat
     'rpm'. Il contient  la fois le source et les binaires de
     PostgreSQL.


  Sites WWW Web :

    Site Web primaire :    <http://www.postgresql.org/>

    Site Web secondaire :  <http://logical.thought.net/postgres95/>

    <http://www.itm.tu-clausthal.de/mirrors/postgres95/>

    <http://s2k-ftp.cs.berkeley.edu:8000/postgres95/>

    <http://xenium.pdi.net/PostgreSQL/>

    <http://s2k-ftp.cs.berkeley.edu:8000/postgres95/>


  Les sites ftp sont indiqus ci-dessous :-

    Primaire FTP :       <ftp://ftp.postgresql.org/pub>

    Secondaire FTP :     <ftp://ftp.chicks.net/pub/postgresql>

    <ftp://ftp.emsi.priv.at/pub/postgres/>

    <ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95>

    <ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL>

    <ftp://ftp.jaist.ac.jp/pub/dbms/postgres95>

    <ftp://ftp.luga.or.at/pub/postgres95>

    <ftp://postgres95.vnet.net:/pub/postgres95>

    <ftp://ftpza.co.za/mirrors/postgres>

    <ftp://sunsite.auc.dk/pub/databases/postgresql>

    <ftp://ftp.task.gda.pl/pub/software/postgresql>

    <ftp://xenium.pdi.net/pub/PostgreSQL>


  Le code source de PostgreSQL est aussi disponible sur tous les sites
  miroirs de  sunsite.unc (soit environ 1000 sites autour du globe). Il
  se trouve dans la distribution Linux Red Hat dans le fichier
  /pub/contrib/i386/postgresql.rpm.

    Pour obtenir la liste des sites miroirs aller  l'url
     <ftp://sunsite.unc.edu>

  66..  PPoossttggrreeSSQQLL  ggrraannddss ppaass

  Ce chapitre est destin  vous aider  installer et  faire tourner la
  base de donnes trs rapidement, en moins de 10 minutes.

  66..11..  IInnssttaallllaattiioonn eett tteessttss

  tapes rapides pour installer, tester, vrifier et faire tourner
  PostgreSQL Connectez-vous en tant qu'utilisateur _r_o_o_t.

  ______________________________________________________________________
  # rpm -qpl postgre*.rpm (pour consulter la liste des fichiers. Pour la documentation 'man rpm')
  # rpm -qpi postgre*.rpm (pour prendre connaissance des informations concernant le paquetage)
  # cat /etc/passwd | grep postgres
  ______________________________________________________________________


  Note: Si vous voyez un utilisateur 'postgres', vous pouvez avoir 
  faire une sauvegarde et un nettoyage du rpertoire  postgres et  sup
  primer l'utilisateur unix 'postgres', une autre solution consiste 
  renommer l'utilisateur unix 'postgres' en quelque chose du genre
  'postgres2'.  L'installation doit tre effectue dans un "rpertoire
  propre".

  ______________________________________________________________________
  # rpm -i postgre*.rpm (Doit installer tous les paquetages clients, devel, data
          et main pour que pgaccess puisse fonctionner )
  # chkconfig --add postgresql  (pour lancer pg durant le dmarrage, voir 'man
  chkconfig')
  # cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload (pour
  python)
  # /etc/rc.d/init.d/postgresql start  (pour lancer postgres)
  # su - postgres
  bash$ createdb mydatabase  (ceci va crer une base de donnes de nom  :
                   (pour lire la documentation 'man createdb')
  bash$ psql mydatabase   (pour lire la documentation 'man psql')
  ..... dans psql utilisez les flches haut/bas ou \s pour visualiser l'historique
  bash$ export DISPLAY=<hostname>:0.0; pgaccess mydatabase; (consulter 'man
  pgaccess')
  ______________________________________________________________________


  Ds maintenant, vous pouvez commencer  taper des commandes SQL pour
  pgaccess ou psql !!

  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql*
  ______________________________________________________________________

  Arriv l, lisez toutes les FAQ, les manuels du programmeur et de
  l'administrateur ainsi que les documents de prise en main (tutorials)
  existants.

  Pour obtenir des informations complmentaires concernant PostgreSQL,
  consultez  <http://www.postgresql.org>

  66..22..  MMaaxxiimmuumm RRPPMM

  Tlchargez le livre 'Maximum RPM'  l' <http://www.RPM.org>. le nom
  du fichier est maximum-rpm.ps.gz Lisez-le sous Linux en utilisant la
  commande gv -

  ______________________________________________________________________
  # gv maximum-rpm.ps.gz
  ______________________________________________________________________



  66..33..  TTeesstt ddee PPyyGGrreeSSQQLL -- IInntteerrffaaccee PPyytthhoonn


  ______________________________________________________________________
  bash$ cd /usr/lib/pgsql/python
  bash$ createdb thilo
  bash$ psql thilo
  thilo=> create table test (aa char(30), bb char(30) );
  bash$ /usr/bin/python
  >>> import _pg
  >>> db = _pg.connect('thilo', 'localhost')
  >>> db.query("INSERT INTO test VALUES ('ping', 'pong')")
  >>> db.query("SELECT * FROM test")
  eins|zwei
  ----+----
  ping|pong
  (1 row)
  >>>CTRL+D
  bash$
  ..... Wow! Cela a l'air de fonctionner - maintenant, installons-le proprement
  bash$ su - root
  # cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload
  ______________________________________________________________________



  66..44..  TTeesstt ddee PPeerrll -- IInntteerrffaaccee PPeerrll


  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql-6.5.2/examples/perl5
  ______________________________________________________________________


  Note: La variable globale @INC doit inclure le module Pg.pm dans le
  rpertoire site_perl donc utilisez l'option -I ci-dessous

  ______________________________________________________________________
  bash$ perl -I/usr/lib/perl5/site_perl/5.004/i386-linux-thread ./example.newstyle
  ______________________________________________________________________


  .... Re_Wow! Vous avez fait tourner un perl qui accde  la base de
  donnes PostgreSQL!!

  Prenez connaissance des fichiers d'exemples pour l'utilisation de
  l'interface perl.
  66..55..  TTeesstt ddeess iinntteerrffaacceess lliibbppqq,, lliibbppqq++++


  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql-6.5.2/examples/libpq++
  bash$ su root   --> to change ownership of examples
  # chown -R postgres /usr/doc/postgresql-6.5.2/examples
  # exit
  bash$ g++ testlibpq0.cc -I/usr/include/pgsql -I/usr/include/pgsql/libpq++
  -lpq++ -lpq -lcrypt
  bash$ ./a.out  (Note: Ignore Error messages if you get any - as below)
  > create table foo (aa int, bb char(4));
  No tuples returned...
  status = 1
  Error returned: fe_setauthsvc: invalid name: , ignoring...
  > insert into foo values ('4535', 'vasu');
  No tuples returned...
  status = 1
  Error returned: fe_setauthsvc: invalid name: , ignoring...
  > select * from foo;
  aa   |bb   |
  -----|-----|
  4535 |vasu |
  Query returned 1 row.
  >
  >CTRL+D
  bash$
  ______________________________________________________________________


  .... Hourra!! Vous venez de faire tourner les interfaces directes de
  C/C++  la base de donnes PostgreSQL!!

  66..66..  TTeesstt ddeess iinntteerrffaacceess JJaavvaa

  Pour pouvoir effectuer ceci vous DEVEZ installer le paquetage
  jdk-*glibc*.rpm (paquetage Java RPM)

  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql-6.5.2/examples/jdbc
  bash$ echo $CLASSPATH
   --> Devrait afficher  CLASSPATH=/usr/lib/jdk-1.1.6/lib/classes.zip
  bash$ export CLASSPATH=$CLASSPATH:.:/usr/lib/pgsql/postgresql.jar
  Editer tout le fichier psql.java et enlevez le symbole de commentaire de la ligne 'package'.
  bash$ javac psql.java
  bash$ java psql jdbc:postgresql:template1 postgres < password>[1] select * from pg_tables;
  tablename       tableowner      hasindexes      hasrules
  pg_type postgres        true    false   false
  pg_attribute    postgres        true    false   false
  [2]
  CTRL+C
  bash$
  ______________________________________________________________________


  .... Re_Hourra!! Vous venez de faire tourner les interfaces directes
  de Java  la base de donnes PostgreSQL!!

  66..77..  TTeesstt ddeess iinntteerrffaacceess eeccppgg







  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql-6.5.2/examples/ecpg
  bash$ ecpg test1.pgc -I/usr/include/pgsql
  bash$ cc test1.c -I/usr/include/pgsql -lecpg -lpq -lcrypt
  bash$ createdb mm
  bash$ ./a.out
  ______________________________________________________________________


  .... Wow!! vous venez de faire tourner le "C"-SQL / base de donnes
  PostgreSQL" intgr!!

  66..88..  TTeesstt ddeess eexxeemmpplleess SSQQLL -- TTyyppeess aanndd ffoonnccttiioonnss ddffiinniiss ppaarr ll''uuttiill
  iissaatteeuurr


  ______________________________________________________________________
  bash$ cd /usr/doc/postgresql-6.5.2/examples/sql
  Under-development..
  ______________________________________________________________________



  66..99..  TTeesstt ddeess iinntteerrffaacceess TTccll//TTkk

  Il y a un exemple d'interfaces Tcl/Tk dans le programme pgaccess.
  Lire le fichier /usr/bin/pgaccess  l'aide d'un diteur de texte -

  ______________________________________________________________________
  bash$ view /usr/bin/pgaccess
  bash$ export DISPLAY=<hostname of your machine>:0.0
  bash$ createdb mydb
  bash$ pgaccess mydb
  ______________________________________________________________________



  66..1100..  TTeesstt ddeess iinntteerrffaacceess OODDBBCC

  1. Procurez-vous le pilote win32 pgsql odbc 
  <http://www.insightdist.com/psqlodbc/> 2. Voir galement
  /usr/lib/libpsqlodbc.a

  66..1111..  TTeesstt ddeess iinntteerrffaacceess ddee llaa ffeeuuiillllee ddee ttrraavvaaiill MMoottiiff MMPPSSQQLL

  Procurez-vous les RPMs auprs de  <http://www.mutinybaysoftware.com>

  66..1122..  VVrriiffiiccaattiioonn

  Pour vrifier le parfait fonctionnement de PostgreSQL, faites tourner
  le paquetage de test de Rgression :- Connectez-vous en tant que root
  -














  ______________________________________________________________________
  # rpm -i postgresql*.src.rpm
  # cd /usr/src/redhat/SPECS
  # more postgresql*.spec   (pour savoir quels sont les paquetage RPM que
  vous devez installer)
  # rpm -bp postgresql*.spec  (.. ce qui va prparer le paquetage)

  Le test de rgression a besoin des Makefiles et de quelques fichiers en-tte
  comme *fmgr*.h
  qui peuvent tre construits par -
  # rpm --short-circuit -bc postgresql*.spec ( .. utilisez "short circuit" pour
  forcer les choses!)
  Interrompre la construction en pressant les touches CTRL+C quand vous voyez
   'make -C common  SUBSYS.o'
   ce moment l, la configuratioin est russie, tous les "makefiles" et tous les fichiers en-tte (headers) ont t crs.
  Il n'y a rien de plus  faire.
  # cd /usr/src/redhat/BUILD
  # chown -R postgres postgresql*
  # su - postgres
  bash$ cd /usr/src/redhat/BUILD/postgresql-6.5.2/src/test/regress
  bash$ more README
  bash$ make clean; make all runtest
  bash$ more regress.out
  ______________________________________________________________________




  77..  PPoossttggrreeSSQQLL SSuuppppoorrttee ddeess BBaassee ddee DDoonnnneess eexxttrrmmeemmeenntt ggrraannddeess >> 220000
  GGiiggaass

  Les performances des machines  cpu 32-bit dcroissent rapidement
  quand la taille de la base de donnes dpasse 5 GigaBytes. Vous pouvez
  faire tourner des bases de donnes de 30 gigas avec un cpu 32-bit cpu
  mais cela ne sera pas trs performant. Les machines  CPU 32 bits
  imposent une limitation de 2 GB de mmoire RAM, de 2 GB pour le
  systme de fichier et d'autres limitations dues au systme
  d'exploitation.

  Si vous avez besoin d'utiliser des bases de donnes extrmement
  grandes, il est fortement recommand d'utiliser des machines 64-bit
  telles que : Digital Alpha cpu, Sun Ultra-sparc 64-bit cpu, Silicon
  graphics 64-bit cpu, Intel Merced IA-64 cpu, machines HPUX 64bit ,
  machines IBM 64-bit. Si l'on compile PostgreSQL avec un cpu 64-bit il
  pourra supporter d'normes bases de Donnes et de grosses requtes.
  Les performances de PostgreSQL pour des interrogations sur de grandes
  tables et de grandes bases de donnes sera plus rapide de plusieurs
  ordres de grandeurs que sur des machines  cpu 32-bit . L'avantage des
  machines 64-bit est qu'elles disposent d'un grand espace d'adressage
  mmoire et que le systme d'exploitation peut grer de trs grands
  systmes de fichiers. Cela permet des meilleures performances avec de
  grandes bases de donnes, plus de mmoire centrale (RAM), plus de
  possibilits etc...

  88..  PPoossttggrreeSSQQLL eesstt--iill ffiiaabbllee??

  Le paquetage de "Test de Rgression" permet de s'assurer de son bon
  fonctionnement.  Il est inclus (src/test/regress) dans la distribution
  et permet  l'ordinateur d'effectuer la vrification des oprations
  SQL standard ainsi que des capacits de PostgreSQL.  Le paquetage de
  test contient dj des centaines de programmes SQL de test.

  L'avantage de ce test effectu par l'ordinateur vient du fait que
  celui-ci peut effectuer plusieurs millions de test SQL trs
  rapidement. La vitesse de l'ordinateur est un milliard de fois plus
  rapide que celle de l'esprit humain!  Il est donc pertinent d'utiliser
  la puissance de calcul de l'ordinateur pour valider un logiciel plutt
  celle de l'esprit humain.

  Si c'est ncessaire, vous pouvez en ajouter beaucoup d'autres. Dans ce
  cas penser  envoyer ces tests au site PostgreSQL primaire si vous
  pensez que cela peut tre utile aux autres. Le paquetage de Test de
  Rgression permet d'asseoir la confiance des utilisateurs en
  PostgreSQL et facilite le dploiement rapide de PostgreSQL sur des
  systmes en production sans inquitude majeure.

  Le paquetage "Test de Rgression" peut tre considr comme un
  document technique ""TTRRSS SSOOLLIIDDEE"" reconnu mutuellement par les
  dveloppeurs et par les utilisateurs finaux.  Les dveloppeurs de
  PostgreSQL utilisent de faon intensive ce paquetage durant la priode
  de dveloppement et galement avant de mettre le logiciel  la
  disposition des utilisateurs pour en assurer la parfaite qualit.

  99..  OOuuttiill GGUUII ffrroonnttaall ppoouurr PPoossttggrreeSSQQLL ((IInntteerrffaaccee UUttiilliissaatteeuurr
  GGrraapphhiiqquuee))

  Le navigateur Web deviendra, dans le futur, l'interface utilisateur
  graphique le (GUI) le plus populaire.  La plus grande partie du code
  doit tre crite en utilisant le langage de scripts de serveurs Web
  PHP/Zend (et en le compilant) ``'' combin avec un peu de JavaScript
  du ct du client web.  Il est recommand de migrer vos applications
  existantes sous Windows 95/NT vers PHP/Zend.

  Les meilleurs outils sont  :

    PHP et Zend (script et compilateur) ``''

    X-Designer supporte C++, Java et MFC  <http://www.ist.co.uk/xd>

    Qt pour Windows95 et Unix   <http://www.troll.no> et
     <ftp://ftp.troll.no>

    Code Crusader se trouve sur le cdrom linux, logiciel libre bas sur
     Code Warrior de  MetroWorks
     <http://www.kaze.stetson.edu/cdevel/code_crusader/about.html>

    Code Warrior de MetroWorks  <http://www.metrowerks.com>

    GNU Prof C++ IDE de Cygnus  <http://www.cygnus.com>

    Borland C++ Builder pour Linux  <http://www.inprise.com>

    Borland Java JBuilder pour Linux  <http://www.inprise.com>

  Les langages, par ordre de prfrence sont  :

  1. Le langage de script serveur Web PHP avec Javascript pour le
     client.

  2. Le langage de script Perl en utilisant Perl-Qt ou Perl-Tk ``''

  3. Le langage C++ Omniprsent avec QtEZ, QT, Lesstiff ou Motif.

  4. Java mais les programmes obtenus sont trs lents.

  D'autres outils sont disponibles  : PostgreSQL possde une
  bibliothque d'interface Tcl/Tk dans la distribution nomme 'pgTcl'.
  Il existe un Environnement de Dveloppement Intgr (EDI ou IDE pour
  integrated development environment) pour Tcl/Tk nomm SpecTcl.



    L'outil Lesstiff Motif
     <ftp://ftp.redhat.com/pub/contrib/i386/lesstiff*.rpm>

    Vibe Java/C++ se trouve t
     <http://www.LinuxMall.com/products/00487.html>

    JccWarrior  <ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm>

    Tcl/Tk  <http://www.scriptics.com>

    Une extension oriente objet de Tcl appele INCR se trouve 
     <http://www.tcltk.com>

    Le site Visual TCL  <http://www.neuron.com>

    Le rpm Visual TCL de Redhat 
     <ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm>

    <http://sunscript.sun.com/>

    <http://sunscript.sun.com/TclTkCore/>

    <ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z>

    FreeBuilder  <ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm>

    SpecTCL  <ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm>

    Kanchenjunga Java RAD Tool pour PostgreSQL
     <http://www.man.ac.uk/~whaley/kj/kanch.html>

    L'Applixware Tool  <http://www.redhat.com>

    XWPE X Windows Programming Environment
     <http://www.rpi.edu/~payned/xwpe/>
     <ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm>

    XWB X Windows Work Bench
     <ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm>

    NEdit  <ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm>

     Vous pouvez galement utiliser Borland C++ Builder, Delphi, Borland
     JBuilder, PowerBuilder sous Windows95 pour connecter PostgreSQL
     sous unix  travers des pilotes ODBC/JDBC.

  1100..  PPiillootteess dd''iinntteerrffaaccee ppoouurr PPoossttggrreeSSQQLL


  1100..11..  OODDBBCC PPiillootteess ppoouurr PPoossttggrreeSSQQLL

  ODBC signifie 'Open DataBase Connectivity'. C'est une norme rpandue
  pour accder aux informations des bases de donnes de diffrents
  vendeurs. Le fonctionnement des applications crites en utilisant les
  pilotes ODBC est garanti quelle que soient les bases de donnes
  utilises PostgreSQL, Oracle, Sybase, Informix etc..


    PostODBC <http://www.insightdist.com/psqlodbc> est dj inclus dans
     les distributions. Consultez le site web principal
     <http://www.postgresql.org>. Il est inclus dans ce CDROM
     PostgreSQL.

    <http://www.openlinksw.com> Open Link Software Corporation
     distribue des ODBC pour PostgreSQL et d'autres bases de donnes.
     Open Link dispose aussi d'ODBC gratuits (quantit limite) vrifier
     auprs d'eux.

    Insight ODBC pour PostgreSQL  <http://www.insightdist.com/psqlodbc>
     C'est le site officiel PostODBC.

  Il existe aussi un projet appel FreeODBC Pack Package . Il n'y a pas
  de version PostgreSQL, peut-tre pouvez vous y participer.

    <http://www.ids.net/~bjepson/freeODBC/> c'est une version gratuite
     d'ODBC.

  1100..22..  PPiillootteess UUDDBBCC ppoouurr PPoossttggrreeSSQQLL

  UDBC est une version statique de pilote de gestionnaire et de DLL
  d'ODBC indpendant, pour intgrer le support de la connectivit base
  de donnes directement au niveau des applications.

    <http://www.openlinksw.com> Open Link Software Corporation vends
     UDBC pour PostgreSQL et autres SGBD.  Open Link dispose aussi
     d'UDBC gratuits (quantit limite) vrifier auprs d'eux.

  1100..33..  PPiillootteess JJDDBBCC ppoouurr PPoossttggrreeSSQQLL

  JDBC signifie 'Java DataBase Connectivity'. Java est un langage de
  dveloppement indpendant de la plate-forme d'utilisation dvelopp
  par Sun Microsystems. Les programmeurs Java sont encourags  crire
  leurs applications en utilisant JDBC pour faciliter la portabilit
  entre diffrentes plates-formes telles que PostgreSQL, Oracle,
  informix, etc. Si vous crivez des applications Java applications vous
  pouvez obtenir les pilotes JDBC pour PostgreSQL  partir des sites
  suivants :

  Le pilote JDBC est inclus dans la distribution PostgreSQL.


    <http://www.demon.co.uk/finder/postgres/index.html> Sun's Java
     connectivity to PostgreSQL

    <ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz>

    <http://www.openlinksw.com> Open Link Software Corporation vends
     JDBC pour PostgreSQL et autres SGBD.  Open Link dispose aussi
     d'JDBC gratuits (quantit limite) vrifier auprs d'eux.

    Site JDBC UK  <http://www.retep.org.uk/postgres>

    Site JDBC FAQ  <http://eagle.eku.edu/tools/jdbc/faq.html>

  Le site JDBC, le guide et les FAQ sont situs  -

    JDBC HOME  <http://splash.javasoft.com/jdbc>

    JDBC guide
     <http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc>

    JDBC FAQ  <http://javanese.yoyoweb.com/JDBC/FAQ.txt>

  1100..44..  JJaavvaa ppoouurr PPoossttggrreeSSQQLL

  Ces classes pour PostgreSQL seront trs utiles au programmeur JAVA.

    <ftp://ftp.redhat.com/pub/contrib/i386> et regardez postgresql-
     jdbc-*.rpm

    <http://www.blackdown.org>

  1111..  PPiilloottee dd''iinntteerrffaaccee ddee SSGGBBDD PPeerrll ((DDaattaabbaassee IInntteerrffaaccee  DDBBII)) ppoouurr
  PPoossttggrreeSSQQLL


  1111..11..  iinntteerrffaaccee PPeerrll 55 ppoouurr PPoossttggrreeSSQQLL

  PERL est l'acronyme de 'Practical Extraction and Report Language'.
  Perl est disponible pour tous les systmes d'exploitation et toutes
  les plates-formes matrielles au monde. Vous pouvez utiliser Perl sous
  Windows95/NT, Apple Macintosh iMac, toutes les varits d'Unix
  (Solaris, HPUX, AIX, Linux, Irix, SCO etc..), ordinateur central MVS,
  ordinateur de bureau OS/2, OS/400, Amdahl UTS et beaucoup d'autres.
  Perl tourne MMMMEE sur de nombreux matriels et systmes d'exploitations
  peu courants/gnralement inconnus!!  Aussi, ne soyez pas surpris si
  vous voyez perl tourner sur un systme d'exploitation trs rarement
  utilis.

  Cette interface est incluse dans la distribution de PostgreSQL. On la
  trouve dans le rpertoire src/pgsql_perl5.

    Contact pour Pgsql_perl5 par email : E.Mergl@bawue.de

    On la trouve aussi dans -
     <ftp://ftp.kciLink.com/pub/PostgresPerl-1.3.tar.gz>

    Page d'accueil Perl :  <http://www.perl.com/perl/index.html>

    Tutoriel Perl, pour un titre de tutoriel, consultez :
     <http://reference.perl.com/>

    La FAQ Perl est  :
     http://www.yahoo.com/Computers\_and\_Internet/Programming\_Languages/Perl/

    Perl GUI Interfaces Utilisateurs Perl-Qt rpm :
     <ftp://ftp.redhat.com/pub/contrib/i386> et cherchez
     PerlQt-1.06-1.i386.rpm

    Perl GUI Interfaces Utilisateurs Perl-Qt :
     <http://www.accessone.com/~jql/perlqt.html>

    Perl GUI Interfaces Utilisateurs Perl-XForms :
     <ftp://ftp.redhat.com/pub/contrib/i386> et cherchez
     Xforms4Perl-0.8.4-1.i386.rpm

    Perl GUI Interfaces Utilisateurs Perl-Tk :
     <ftp://ftp.redhat.com/pub/contrib/i386>

    Perl GUI kits :  <http://reference.perl.com/query.cgi?ui>

    Interfaces de Base de Donnes Perl :
     <http://reference.perl.com/query.cgi?database>

    Traducteur de Perl en "C" :  <http://www.perl.com/CPAN-
     local/modules/by-module/B/> et cherchez Compiler-a3.tar.gz

    Traducteur de Bourne shell en Perl :
     <http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz>

    awk en perl "a2p" et sed en perl "s2p" sont inclus dans la
     distribution PERl.

    Consultez galement le forum PERL  comp.lang.perl.*




  1111..22..  DDBBII IInntteerrffaaccee ddee BBaassee ddee DDoonnnneess PPeerrll

  1111..22..11..  QQuu''eesstt--ccee qquuee DDBBII ??

  L'interface de SGBD Perl (Perl Database Interface - DBI) est une
  interface logicielle d'accs  un SGBD (Application Programming
  Interface - API) pour le langage PERL. Les spcifications de l'API DBI
  perl dfinissent un ensemble de fonctions, de variables et de
  conventions d'accs  un SGBD cohrent et indpendant du SGBD utilis.
  Les informations concernant cette section DBI ont t prises dans la
  "DBI FAQ" dont l'auteur est Alligator Descartes et sont reproduites
  ici avec sa permission.

    Alligator Descartes Hermetica peut tre contact 
     descarte@hermetica.com

  1111..22..22..  PPiilloottee DDBBII ppoouurr PPoossttggrreeSSQQLL DDBBDD--PPgg--00..8899

  Vous pouvez obtenir DBD-Pg-0.89.tar.gz de l'un des sites indiqus ci-
  dessous :

    DBD-Pg-0.89 :  <http://www.perl.com/CPAN/modules/by-module/DBD/>

    Comprehensive Perl Archive Network CPAN  <http://www.perl.com/CPAN>

    Liste des pilotes DBI et pages sur les modules DBI
     <http://www.hermetica.com/technologia/perl/DBI>

    L'information sur DBI se trouve   <http://www.fugue.com/dbi/>

    Site ftp primaire  <ftp://ftp.demon.co.uk/pub/perl/db>

    Liens divers sur DBI  <http://www-ccs.cs.umass.edu/db.html>

    Liens divers sur DBI
     <http://www.odmg.org/odmg93/updates_dbarry.html>

    Liens divers sur DBI  <http://www.jcc.com/sql_stnd.html>

    Base de Donnes PostgreSQL  <http://www.postgresql.org>

  CONTRAINTES :

    - Construire, tester et installer Perl 5         (au moins 5.002)

    - Construire, tester et installer le module DBI  (au moins 0.89)

    - Construire, tester et installer PostgreSQL     (au moins 6.2)

  1111..22..33..  SSuuppppoorrtt tteecchhnniiqquuee ssuurr DDBBII

  Veuillez envoyer vos commentaires et vos comptes-rendus d'erreurs 

    E.Mergl@bawue.de

  Pensez  inclure la sortie de perl -v, et perl -V, la version de
  PostgreSQL, la version de DBD-Pg, et la version de DBI dans votre
  compte-rendu d'erreur.


  1111..22..44..  QQuu''eesstt--ccee qquuee cc''eesstt qquuee DDBBII,, DDBBppeerrll,, OOrraappeerrll aanndd **ppeerrll??

  Pour citer Tim Bunce, l'architecte et l'auteur de DBI :

  ``DBI est une interface logicielle d'accs aux bases de donnes
  (Application Programming Interface  -API) pour le langage Perl. Les
  spcifications DBI API dfinissent un ensemble de fonctions, de
  variables et de conventions cohrents d'interfaage  une base de
  donnes indpendant de la base de donnes utilise.''

  En langage simple, l'interface DBI permet aux utilisateurs d'accder
  de manire transparente  de multiples base de donnes. Ainsi, Si vous
  vous connectez  une base de donnes Oracle, Informix, mSQL, Sybase ou
  n'importe quelle autre, vous n'avez pas besoin de connatre les
  mcanismes sous-jacents de la couche 3GL. L'API dfinie par DBI
  fonctionnera sur tous ces types de bases de donnes.

  On obtient un bnfice du mme ordre en ayant la possibilit de se
  connecter  deux bases de donnes de diffrents fournisseurs  l'aide
  du mme script perl, i.e., je veux lire des donnes d'une base de
  donnes Oracle et les insrer dans une Informix  partir du mme
  programme. La couche logicielle DBI permet de le raliser simplement
  et efficacement.

  DBperl est le nom ancien des spcifications de l'interface. Il est
  utilis maintenant pour dsigner les modules perl4 d'interfaage des
  bases de donnes tels que oraperl, isqlperl, ingperl et autres. Ces
  interfaces n'ont pas d'API standard et ne sont gnralement pas
  supports.

  Voici une liste des modules DBperl, de leur quivalent DBI
  correspondants et du support d'information. Notez que les auteurs
  cits ici ne maintiennent gnralement pas le module DBI de la base de
  donnes. Les adresses E-mail n'ont pas t vrifies et ne doivent
  tre utilises que pour les questions concernant les modules perl4
  lists ci-dessous. Les questions sur les pilotes DBI doivent tre
  directement adresses aux listes de diffusion des utilisateurs DBI.


         Nom du module SGBD requis         Auteur          DBI
           ----------- -----------------   ------          ---
           Sybperl     Sybase              Michael Peppler DBD::Sybase
                                           <mpeppler@itf.ch>
           Oraperl     Oracle 6 & 7        Kevin Stock     DBD::Oracle
                                           <dbi-users@fugue.com>
           Ingperl     Ingres              Tim Bunce &     DBD::Ingres
                                           Ted Lemon
                                           <dbi-users@fugue.com>
           Interperl   Interbase           Buzz Moschetti  DBD::Interbase
                                           <buzz@bear.com>
           Uniperl     Unify 5.0           Rick Wargo      None
                                           <rickers@coe.drexel.edu>
           Pgperl      Postgres            Igor Metz       DBD::Pg
                                           <metz@iam.unibe.ch>
           Btreeperl   NDBM                John Conover    SDBM?
                                           <john@johncon.com>
           Ctreeperl   C-Tree              John Conover    None
                                           <john@johncon.com>
           Cisamperl   Informix C-ISAM     Mathias Koerber None
                                           <mathias@unicorn.swi.com.sg>
           Duaperl     X.500 Directory     Eric Douglas    None
                       User Agent




  Cependant, certains modules DBI possdent des couches logicielles
  d'mulation. Ainsi DBD::Oracle est livr avec une couche d'mulation
  Oraperl, ce qui permet d'excuter d'anciens scripts oraperl sans modi
  fication. La couche logicielle d'mulation traduit les appels oraperl
  API en appels DBI et les excute.

  Voici une table des  couches d'mulation :


           Module        Couche d'mulation     tat
           ------          ---------------     ------
           DBD::Oracle     Oraperl             Complte
           DBD::Informix   Isqlperl            En cours de  dveloppement
           DBD::Sybase     Sybperl             Fonctionnelle? ( Ncessite une
                                               vrification)
           DBD::mSQL       Msqlperl            En version exprimentale avec
                                               DBD::mSQL-0.61




  L'mulation Msqlperl est un cas particulier. Msqlperl est un pilote
  perl5 pour les bases de donnes mSQL , mais il ne se conforme pas aux
  spcifications DBI. On dsapprouve son utilisation en faveur de
  DBD::mSQL. On peut tl-charger Msqlperl  partir du site CPAN via :

    <http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl>

  1111..22..55..  SSppcciiffiiccaattiioonnss DDBBII


  Il existe quelques sources d'information sur  DBI.  Spcifications DBI

    <http://www.hermetica.com/technologia/perl/DBI/doc/dbispec>

     On trouve deux spcifications disponibles  cette adresse: la
     nouvelle spcification Draft (dition provisoire) DBI qui est un
     document en volution rapide  mesure que l'quipe de dveloppement
     s'approche d'une version stable de l'interface, et l'ancienne
     spcification historique DBperl  partir de laquelle l'interface
     DBI actuelle a volu.

  Il faut considrer ce dernier document comme ne prsentant qu'un
  intrt historique et ne pas l'utiliser en tant que manuel de
  programmation ou document de rfrence. Il demeure cependant une
  source d'informations trs utile.

  Documentation POD (Plain Old Documentation) Les PODs sont des morceaux
  de documentation gnralement noys  l'intrieur des programmes perl
  qui documentent le code "sur place".  Ce sont des ressources trs
  utiles pour les programmeurs et les utilisateurs des modules. Les PODs
  pour DBI et pour les pilotes deviennent monnaie courante et la
  documentation pour les modules contenant ces PODs peut tre lue avec
  les commandes suivantes.

  La Spcification DBI Les PODs pour la spcification DBI peut tre lue
  avec la commande :

  perldoc DBI

  Oraperl Les utilisateurs de la couche d'mulation fournie avec
  DBD::Oracle, peuvent s'informer sur la manire de programmer en
  utilisant l'interface Oraperl en tapant:

  perldoc Oraperl

  Ce qui permettra d'obtenir une copie  jour de la page de manuel
  originale crite par Kevin Stock pour perl4. L'API oraperl y est
  entirement liste et dcrite.

  DBD::mSQL Les utilisateurs du module DBD::mSQL peuvent lire des
  informations sur quelques fonctions prives et bizarreries de ce
  pilote en tapant :

  perldoc DBD::mSQL

  Foire Aux Questions (FAQ) Ce document, la Foire Aux Questions, est
  aussi disponible en tant que documentation POD! Vous pouvez le lire
  sur votre propre systme en tapant :

  perldoc DBI::FAQ

  Ceci peut tre plus pratique pour ceux qui ne sont pas connects 
  l'Internet ou le sont d'une manire peu pratique.

  Les POD en gnral On peut lire des informations sur la manire
  d'crire des PODs, ainsi que sur la philosophie des PODs en gnral en
  tapant :

  perldoc perlpod

  Les utilisateurs ayant le module Tk install seront peut-tre
  intresss d'apprendre qu'il existe un lecteur de POD bas sur Tk
  nomm tkpod. Il formate les POD de manire pratique et lisible.

  Discussions, Cancans et Observations

    <http://www.hermetica.com/technologia/perl/DBI/tidbits>

  Il y a , de temps en temps, une srie de discussions de la part de
  certaines personnes, dans les listes de diffusion sur DBI.

  ``DBI -- L'interface de SGBD en perl5'' C'est un article crit par
  Alligator Descartes et Tim Bunce sur la structure de DBI. Il a t
  publi dans le numro 5 de ``The Perl Journal''.  Il est extrmement
  bon. Allez acheter ce magazine. En fait, achetez les tous.  Le site
  WWW de ``The Perl Journal'' est :

    <http://www.tpj.com>

  ``DBperl'' Cet article, publi dans l'dition de novembre 1996 du
  ``Dr. Dobbs Journal'' traitait de DBperl.

  ``The Perl5 Database Interface'' Cette rfrence est celle d'un livre
   crire par Alligator Descartes publi par O'Reilly et Associs.

  Listes de diffusion Il y a trois listes de diffusion pour DBI gres
  par Ted Lemon.  On peut s'inscrire  toutes et rsilier cette
  inscription  travers le World Wide Web  :

    Listes de diffusion  <http://www.fugue.com/dbi>

  Les listes o les utilisateurs peuvent participer sont:

  ddbbii--aannnnoouunnccee Cette liste de diffusion est rserve uniquement aux
  annonces.  Si vous n'arrivez pas  utiliser le formulaire sur la page
  WWW indique ci-dessus, inscrivez-vous  cette liste de la manire
  suivante :

    Email: dbi-announce-request@fugue.com

     avec le mot 'subscribe' dans le corps du message.

  ddbbii--ddeevv Cette liste de diffusion est  l'usage des dveloppeurs pour
  discuter des ides et des concepts de l'interface DBI, API et des
  mcanismes des pilotes. Seulement utiles pour les dveloppeurs et les
  personnes intresses. Trafic faible.  Si vous n'arrivez pas 
  utiliser le formulaire sur la page WWW indique ci-dessus, inscrivez-
  vous  cette liste de la manire suivante :

    Email: dbi-dev-request@fugue.com

     avec 'subscribe' dans le corps du message.

  ddbbii--uusseerrss Cette liste de diffusion est un lieu de discussion gnrale
  utilise pour les rapports d'erreurs, la discussion sur diffrents
  problmes et des demandes de renseignement d'intrt gnral. Si vous
  n'arrivez pas  utiliser le formulaire sur la page WWW indique ci-
  dessus, inscrivez-vous  cette liste de la manire suivante :

    Email: dbi-users-request@fugue.com

     avec 'subscribe' dans le corps du message.

  Archives des Listes de Diffusion

    Archive des listes de diffusion US
     <http://outside.organic.com/mail-archives/dbi-users/>

    Archive des listes de diffusion Europennes  <http://www.rosat.mpe-
     garching.mpg.de/mailing-lists/PerlDB-Interest>

  1111..22..66..  PPrroobbllmmeess ddee ccoommppiillaattiioonn oouu ""IIll cchhoouuee aauuxx tteessttss""

  Si vous avez un vidage mmoire, essayez le module Devel::CoreStack
  pour gnrer une trace de la pile du vidage mmoire. On peut trouver
  Devel::CoreStack  :

    <http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack>

  Envoyez un courrier lectronique sur la Liste dbi-users contenant la
  trace de la pile, les versions des modules, la version de perl, les
  situations de test, la version du systme d'exploitation et toutes
  autres informations pertinentes.  Plus vous fournirez d'informations
  plus vite les dveloppeurs pourront rsoudre les problmes. Si vous ne
  nous envoyez rien, n'attendez rien en retour.

  1111..22..77..  DDBBII eesstt--iill ssuuppppoorrtt ssuurr lleess ppllaatteess--ffoorrmmeess WWiinnddoowwss 9955 // NNTT ??

  Les portages de DBI et de DBD::Oracle pour Win32 ports font maintenant
  partie intgrante de DBI, donc, la rcupration d'une version de DBI
  suprieure  0.81 doit donner satisfaction.  Vous pouvez accder aux
  bases de donnes Microsoft Access et SQL-Server  partir de DBI via
  ODBC.  Une "couche d'mulation" DBI exprimentale est fournie avec
  DBI-0.79 (et suivants ) pour le module Win32::ODBC. Son nom est
  DBI::W32ODBC.  Vous aurez besoin du module Win32::ODBC.

    Win32 DBI    <http://www.hermetica.com/technologia/perl/DBI/win32>

    Win32 ODBC    <http://www.roth.net>

  1111..22..88..  QQuu''eesstt--ccee qquuee DDBBMM?? EEtt ppoouurrqquuooii ddooiiss--jjee uuttiilliisseerr DDBBII  ssaa
  ppllaaccee??

  A l'origine UNIX tait bienheureux avec sa "Base de Donnes" rustique
  reposant sur des fichiers, nomme systme dbm. Avec dbm vous
  enregistrez les donnes dans des fichiers et les retrouvez rapidement.
  Cependant, il souffre de srieux inconvnients.

  Verrouillage des fichiers

  Les systmes dbm ne permettent par un verrouillage particulirement
  robuste des fichiers, de mme qu'il n'y a pas de possibilit de
  corriger les problmes survenants lors d'critures [ dans la base de
  donnes ] simultanes.

  Structures de Donnes Arbitraires

  Les systmes dbm permettent seulement une simple structure de donnes
  fixe: paires cl-valeur. Cette valeur peut tre un objet complexe, tel
  qu'une structure [ C ], mais la cl doit tre unique. Ce fut une
  grande limitation dans l'utilit des systmes dbm.

  Cependant, les systmes dbm continuent d'offrir des fonctions utiles
  pour les utilisateurs ayant des ensembles de donnes simples et des
  ressources limites, puisqu'ils sont rapides, robustes et extrmement
  bien tests. Les modules Perl pour accder aux systmes dbm font
  maintenant partie intgrante de la distribution Perl via le module
  AnyDBM_File.''

  Pour rsumer, DBM est une solution parfaitement satisfaisante pour les
  bases de donnes essentiellement en lecture seule, ou pour des
  ensembles de donnes simples et rduits. Toutefois, pour des ensembles
  de donnes plus importants, sans mentionner un verrouillage des
  transactions robuste, on recommandera aux utilisateurs de prfrer
  DBI.

  1111..22..99..  EEsstt--ccee qquuee << iinnssrreezz uunnee ffoonnccttiioonnnnaalliitt iiccii >> eesstt ssuuppppoorrtt
  ppaarr DDBBII??

  Si l'on suppose que la fonctionnalit en question n'est pas, en
  standard, spcifique d'un SGBD, alors la rponse sera non.

  DBI reprsente un API qui doit fonctionner avec la plupart des SGBD,
  et n'a pas de fonctionnalit spcifique  un SGDB particulier.

  Cependant, les auteurs d'un pilote peuvent, s'ils le dsirent, ajouter
  une fonctionnalit spcifique  un SGBD  travers les mthodes func
  dfinies dans l'API DBI. Les dveloppeurs de Scripts doivent noter que
  l'utilisation de cette fonctionnalit au travers de ces mthodes func
  a de bonnes chances d'en sacrifier la portabilit entre les diffrents
  SGBD.

  1111..22..1100..  EEsstt--ccee qquuee DDBBII eesstt dd''uunnee qquueellccoonnqquuee uuttiilliitt ppoouurr llaa pprrooggrraamm
  mmaattiioonn CCGGII??

  En un mot, oui! DBI est extrmement utile pour la programmation CGI!
  En fait, la programmation CGI est une des deux principales utilisation
  de DBI.

  DBI confre aux programmeurs CGI la possibilit d'offrir des base de
  donnes WWW  leurs utilisateurs, ce qui donne  ces utilisateurs la
  possibilit d'utiliser de grandes quantits de donnes bien
  organises. DBI donne aussi la possibilit , si un site reoit un
  trafic trop important pour les performances du serveur, d'amliorer ce
  serveur de base de donnes de faon transparente, sans modifier les
  scripts CGI.

  1111..22..1111..  CCoommmmeenntt ppuuiiss--jjee oobbtteenniirr uunn tteemmppss ddee ccoonnnneexxiioonn pplluuss rraappiiddee
  aavveecc DDBBDD::::OOrraaccllee eett CCGGII CCGGII??

  Le serveur httpd Apache maintient un ensemble de processus fils httpd
  pour servir les requtes clients.

  En utilisant le module mod_perl Apache de Doug MacEachern,
  l'interprteur perl est inclus dans le processus fils httpd. Les
  modules CGI, DBI, et vos autres modules favoris peuvent tre chargs
  au lancement de chaque processus fils. Ces modules ne seront pas
  rechargs  moins d'tre modifis sur disque.

  Pour de plus amples informations sur Apache, consultez le site WWW du
  Projet Apache  :

    Site WWW du Projet Apache  <http://www.apache.org>

    Module Mod_perl  <http://www.perl.com/cgi-
     bin/cpan_mod?module=mod_perl>

  1111..22..1122..  CCoommmmeenntt ppuuiiss--jjee oobbtteenniirr uunnee ccoonnnneexxiioonn ppeerrssiissttaannttee aavveecc DDBBII
  eett CCGGII??

  En utilisant le module Apache::DBI de Edmund Mergl, les connexions 
  la base de donnes sont enregistres dans une table avec chacun des
  processus httpd fils. Si votre application utilise une base de donnes
  simple utilisateur, cette connexion peut tre lance avec chaque
  processus fils. Actuellement, les connexions  la base de donnes ne
  peuvent pas tre partages entre processus httpd fils.  Apache::DBI
  peut tre tl-charg de CPAN via :

    <http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI>

  1111..22..1133..  ""QQuuaanndd jjee llaannccee uunn ssccrriipptt ppeerrll ddee llaa lliiggnnee ddee ccoommmmaannddee,, aa
  mmaarrcchhee,, mmaaiiss,, qquuaanndd jjee llee llaannccee ssoouuss hhttttppdd,, aa cchhoouuee!!"" PPoouurrqquuooii??


  Fondamentalement, il y a une bonne chance que cela provienne du fait
  que l'utilisateur  partir duquel vous avez lanc la ligne de commande
  a un ensemble de variables d'environnement correctement configur, ce
  sont, dans le cas de DBD::Oracle, des variables telles que
  $ORACLE_HOME, $ORACLE_SID ou TWO_TASK.  Le processus httpd s'excute
  habituellement sous un utilisateur id ne correspondant pas  un
  utilisateur, ce qui implique qu'il n'y a pas d'environnement
  configur. Tous scripts essayant de s'excuter dans ces circonstances
  choueront.  Pour rsoudre ce problme, initialisez l'environnement de
  votre base de donnes dans un bloc BEGIN ( ) en tte de votre script.
  Ceci devrait rsoudre votre problme.  De mme, vous devriez regarder
  votre fichier registre d'erreurs pour y trouver des indices, ainsi que
  les guides "Idiot's Guide To Solving Perl / CGI Problems" et "Perl
  CGIProgramming FAQ" pour avoir des informations complmentaires. Il
  est peu probable que ce problme concerne DBI.  Lisez ces DEUX
  documents trs soigneusement !

    Idiot's Guide to Solving Perl / CGI problems
     <http://www.perl.com/perl/faq/index.html>

  1111..22..1144..  PPuuiiss--jjee ffaaiirree ddee ll''eexxccuuttiioonn eenn ppaarraallllllee aavveecc DDBBII??

  A la date de ce document, non. perl ne permet pas l'excution en
  parallle. Cependant, l'excution en parallle doit faire partie de la
  distribution perl de base  compter de la version 5.005, ce qui sous-
  entend que le support de l'excution en parallle pour DBI devrait
  suivre rapidement.  Pour quelques exemples de code OCI pour Oracle
  ayant des instructions SELECT avec excution en parallle, voir :

    <http://www.hermetica.com/technologia/oracle/oci/orathreads.tar.gz>


  1111..22..1155..  CCoommmmeenntt ppuuiiss--jjee iinnvvooqquueerr ddeess pprrooccdduurreess eennrreeggiissttrreess aavveecc
  DDBBII??

  En supposant que vous avez cr une procdure enregistre 
  l'intrieur de la base de donnes cible, e.g., une base de donnes
  Oracle, vous pouvez utiliser $ dbh-> do pour excuter immdiatement
  cette procdure. Par exemple,


  $ dbh-> do( "BEGIN someProcedure END" );

  1111..22..1166..  CCoommmmeenntt ppuuiiss--jjee rrccuupprreerr lleess vvaalleeuurrss ddee rreettoouurr ddee
  pprrooccdduurreess eennrreeggiissttrreess aavveecc DDBBII??

  N'oubliez pas d'effectuer un test d'erreur, strict!


           $sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" );
           $sth->bind_param(1, $a);
           $sth->bind_param_inout(2, \$path, 2000);
           $sth->bind_param_inout(3, \$success, 2000);
           $sth->execute;




  1111..22..1177..  CCoommmmeenntt ppuuiiss--jjee ccrreerr oouu ssuupppprriimmeerr uunnee bbaassee ddee ddoonnnneess aavveecc
  DDBBII??

  La cration et la suppression de bases de donnes sont des concepts
  qui sont beaucoup trop abstraits pour tre supports par DBI. Par
  exemple, Oracle ne supporte pas le concept de dtruire une base de
  donnes du tout ! Ainsi, dans Oracle, le serveur de base de donnes
  est essentiellement la base de donnes elle-mme alors que dans mSQL,
  le processus serveur s'excute tranquillement sans aucune base de
  donnes cre. C'est un problme trop htrogne pour s'y attaquer.
  Quelques pilotes, cependant, supportent la cration et la suppression
  de bases de donnes  travers des mthodes func prives. Il vous faut
  regarder dans la documentation des pilotes que vous utilisez pour
  vrifier s'ils supportent de tels mcanismes.

  1111..22..1188..  CCoommmmeenntt lleess vvaalleeuurrss NNUULLLL ssoonntt--eelllleess pprriisseess eenn ccoommppttee ppaarr
  DDBBII??

  Les valeurs NULL dans DBI sont traites comme la valeur undef. Des
  NULLs peuvent tre insrs dans les bases de donnes en tant que NULL,
  par exemple :


           $rv =
               $dbh->do( "INSERT INTO table VALUES( NULL )" );




  mais lors d'une interrogation, les NULLs devront tre tests comme des
  undef.  C'est une norme pour tous les pilotes.

  1111..22..1199..  QQuu''eesstt--ccee qquuee cc''eesstt qquuee cceess hhiissttooiirreess ddee mmtthhooddeess ffuunncc??

  Une mthode func est dfinie  l'intrieur de DBI comme tant un point
  d'entre pour une fonctionnalit d'une base de donnes spcifique, eg,
  la possibilit de crer ou supprimer des bases de donnes.
  L'invocation de ces mthodes spcifiques aux pilotes est simple. Par
  exemple, pour invoquer une mthode createDatabase qui n'a qu'un seul
  argument, on crira :


           $rv = $dbh->func( 'argument', 'createDatabase' );




  Les dveloppeurs de logiciels doivent cependant noter que ces mthodes
  func ne sont pas portables entre SGBD.
  1111..22..2200..  AAssssiissttaannccee eett ffoorrmmaattiioonn ppaayyaannttee

  L'interface aux SGBD Perl5 est un logiciel LIBRE. IL EST DISTRIBUE
  SANS GARANTIE D'AUCUNE SORTE.  Cependant, quelques organisations
  fournissent soit une assistance technique soit des programmes de
  formation pour DBI.

  PPEERRLL CCLLIINNIICC :: La socit "Perl Clinic" peut offrir des contrats
  d'assistance payants pour Perl, DBI, DBD::Oracle et Oraperl. Cette
  assistance est fournie par la compagnie o travaille Tim Bunce, auteur
  de DBI. Pour de plus amples informations concernant leurs services,
  consultez :

    <http://www.perl.co.uk/tpc>

  1122..  OOuuttiillss ddee GGeessttiioonn PPoossttggrreeSSQQLL


  1122..11..  PPGGAACCCCEESSSS -- UUnn GGUUII ppoouurr llaa ggeessttiioonn ddee PPoossttggrreeSSQQLL

  PgAccess est une interface Tcl/Tk  PostgreSQL.  Il est dj inclus
  dans la distribution de PostgreSQL.  Pour une copie plus rcente, vous
  pouvez accder au site web :

    <http://www.flex.ro/pgaccess>

    Si vous avez des commentaires, des suggestions pour des
     amliorations, n'hsitez pas  envoyer un courrier lectronique  :
     teo@flex.ro

  Fonctionnalits de PgAccess

  Fentres de PgAccess : Fentre principale, crateur de tables, vue de
  table (interrogation), crateur visuel d'interrogation .

  Tables


    - Ouverture de tables pour la visualisation, 200 enregistrements
     maximum ( modifiable dans le menu des prfrences )

    - re-dimensionnement d'une colonne en tirant la ligne verticale de
     la grille ( plus pratique  raliser  l'intrieur mme de la table
     que dans l'en-tte)

    - texte encadr dans les cellules - disposition enregistre pour
     chacune des tables)

    - importation/exportation vers des fichiers externes (SDF,CSV)

    - possibilit de filtres (filtre de saisie, tel que (prix>3.14)

    - possibilits de tri (saisie manuelle de(s) champ(s)  trier)

    - dition en ligne

    - assistant gnrateur de table amlior

    - dition de champ amliore

  Requtes

    - dfinition, dition et enregistrement de "requtes dfinies par
     l'utilisateur"


    - enregistrement de requtes en tant que vues

    - excution des requtes

    - visualisation des rsultats de requtes de type select

    - suppression et changement de nom de requte

    - crateur visuel de requtes avec possibilits de
     "glisser/dposer".  Pour tous ceux d'entre vous qui ont l'extension
     pour Netscape Navigator de Tcl/Tk installe, vous pouvez le voir au
     travail en cliquant ici

  Squences

    - dfinition de squences, ainsi que leurs suppression et
     inspection Fonctions

    - dfinition, inspection et suppression de fonctions en langage SQL

  Les futures implmentations disposeront

    - de la conception des tables (ajout de nouveaux champs, changement
     de nom, etc.)

    - de la dfinition de fonction

    - d'un gnrateur de rapport

    - d'un langage de script de base


  Si vous avez des commentaires, ou des suggestions d'amlioration,
  envoyez un courrier lectronique  :

    teo@flex.ro

  Informations concernant libgtcl

  Vous aurez galement besoin de la bibliothque d'interface de
  PostgreSQL  Tcl, disponible comme module Tcl/Tk chargeable. Son nom
  est libpgtcl et le source est situ dans le rpertoire PostgreSQL
  /src/interfaces/libpgtcl.  Prcisment, vous aurez besoin d'une
  bibliothque libpgtcl qui soit "chargeable"  partir de Tcl/Tk.  Ce
  qui est techniquement diffrent d'un fichier objet chargeable
  PostgreSQL ordinaire, car libpgtcl est constitue d'un ensemble de
  fichiers objets. Sous Linux, on l'appelle libpgtcl.so. Vous pouvez
  tl-charger  partir d'ici une version dj compile pour les
  systmes Linux i386. La seule chose  faire est de copier libpgtcl.so
  dans le rpertoire bibliothque systme (/usr/lib) et c'est tout. Une
  solution possible est de supprimer dans le source la ligne contenant
  load libpgtcl.so et de charger pgaccess.tcl non pas avec wish, mais
  avec pgwish (ou wishpg) le wish qui a t li avec la bibliothque
  libpgtcl.

  1122..22..  OOuuttiill WWiinnddoowwss iinntteerraaccttiiff ddee ggnnrraattiioonn ddee rreeqquuttee ppoouurr PPoosstt
  ggrreeSSQQLL

  ("Windows Interactive Query Tool" WISQL ou MPSQL) MPSQL offre une
  interface SQL graphique  PostgresSQL.  MPSQL est identique  la
  feuille de programmation SQL d'Oracle et au serveur de requte SQL de
  Microsoft WISQL! Il dispose d'un GUI agrable et d'un historique des
  commandes. Vous pouvez utiliser le coup/coll ainsi que d'autres
  fonctionnalits sympathiques pour accrotre votre productivit.


    <http://www.troubador.com/~keidav/index.html>

    Email : keidav@whidbey.com

    <http://www.ucolick.org/~de/> dans le fichier tcl_syb/wisql.html

    <http://www.troubador.com/~keidav/index.html>

    Email : de@ucolick.org

  1122..33..  OOuuttiill iinntteerraaccttiiff ddee ggnnrraattiioonn ddee rreeqquuttee ppoouurr PPoossttggrreeSSQQLL --
  IISSQQLL

  ISQL est destin aux terminaux fonctionnants en mode ligne de
  commande.  C'est inclus dans la distribution et nomm PSQL. Il est
  trs similaire   Sybase ISQL, et  Oracle SQLplus. A l'invite unix
  tapez la commande 'psql' qui en retour vous affichera le caractre
  d'attente de commande: psql> .


       Tapez /h pour obtenir de l'aide sur les commandes utilisables.




  C'est trs convivial et d'utilisation facile.  C'est aussi trs utile
  pour crire des scripts pour les interprteurs de commandes.

  1122..44..  MMPPMMGGRR -- UUnn oouuttiill ddee ggeessttiioonn ddee BBaassee ddee DDoonnnneess ppoouurr PPoossttggrreessSSQQLL

  MPMGR fournira un outil graphique de gestion de Base de Donnes pour
  PostgresSQL. Vous pouvez le trouver 

    <http://www.mutinybaysoftware.com/>

    Email: keidav@mutinybaysoftware.com

    <http://www.troubador.com/~keidav/index.html>

    Email: keidav@whidbey.com

    <http://www.troubador.com/~keidav/index.html>

    <http://www.ucolick.org/~de> dans le fichier tcl_syb/wisql.html

    WISQL for PostgreSQL  <http://www.ucolick.org/~de/Tcl/pictures>

    Email: de@ucolick.org

  1133..  MMiissee eenn ppllaaccee ddee pplluussiieeuurrss mmaacchhiinneess PPoossttggrreeSSQQLL aavveecc uunn sseeuull mmoonnii
  tteeuurr

  Vous pouvez empiler plusieurs cpu et les connecter  un unique
  moniteur en utilisant un commutateur KVM (Keyboard, Video, Monitor)
  pour choisir la connexion avec une unit centrale particulire. Ce qui
  conomise de l'espace et vite l'utilisation de plusieurs crans,
  claviers et mulots (conomisant environ de 100  500 US dollars par
  ensemble) et vite aussi pas mal de pagaille.

  En utilisant ce commutateur, vous pouvez empiler plusieurs serveurs
  PostgreSQL (dveloppement, test, production), serveurs Web, serveurs
  ftp, serveurs Intranet, serveur de Courrier, serveurs de Nouvelles,
  sur une tagre.  Le botier commutateur peut tre galement utilis
  pour contrler des machines Windows 95/NT ou OS/2.


  Veuillez consulter ces sites :

    DataComm Warehouse Inc.au 1-800-328-2261. Ils fournissent toutes
     sortes de matriels informatique <http://www.warehouse.com> Un
     commutateur manuel 4-ports KVM (PS/2) vaut environ $89.99.
     Rfrence de l'article : DDS1354

    Network Technologies Inc
     <http://www.networktechinc.com/servswt.html> (120 dollars/PC 8
     ports) qui propose des commutateurs de serveurs 'Server Switches'
     et des commutateurs uniquement vido

    Scene Double Inc, England
     <http://www.scene.demon.co.uk/qswitch.htm>

    Cybex corporation  <http://www.cybex.com>

    Raritan Inc  <http://www.raritan.com>

    RealStar Solutions Inc  <http://www.real-star.com/kvm.htm>

    Belkin Inc  <http://www.belkin.com>

    DataComm Warehouse Inc Appels 24 heures sur 24, 7 jours sur 7 au
     1-800-328-2261 Ils fournissent toutes sortes de matriels
     d'ordinateur  <http://www.warehouse.com>

    Better Box Communications Ltd.
     <http://www.betterbox.com/info.html>

    Allez chez votre marchand de matriel le plus proche et demandez un
     commutateur de serveur "Server Switch" galement connu sous le nom
     "KVM Auto Commutateurs".

  Utilisez le moteur de recherche yahoo pour trouver d'autres compagnies
  en utilisant la cl de recherche 'Server Switches' ou "KVM Switches".

  Pour avoir de meilleures performances, on recommande instamment
  d'avoir une machine unix pour chaque processus serveur PostgreSQL.
  Aucun autre programme/traitement ne doit tourner sur cette machine.
  Consultez la page Affaires de votre journal local pour trouver des
  vendeurs de machines intel nues, avec un moniteur monochrome de 13"
  (moniteur particulirement conomique). Les vendeurs locaux vendent
  uniquement du matriel SSAANNSS un quelconque Microsoft Windows/DOS (ce
  qui vous fait conomiser environ $ 150).  Vous n'avez pas besoin d'un
  moniteur couleur pour un serveur de base de donnes puisque vous
  pouvez en effectuer l'administration  distance  partir d'une station
  de travail PC couleur. Procurez-vous le cdrom Linux  l'adresse ci-
  dessous -

    Site Web Linux System Labs :   <http://www.lsl.com/>  7 (U.S.
     dollars)

    Site Web Cheap Bytes Inc :   <http://www.cheapbytes.com/> 7 (U.S.
     dollars)

     Assurez-vous que le matriel que vous achetez est support par le
     Linux Redhat. Vrifiez sur le site ftp de Redhat le matriel
     recommand tels que les coupleurs SCSI, les cartes video avant
     d'acheter.  Pour seulement $ 600 vous obtiendrez une machine intel
     puissante avec un Linux Redhat faisant tourner PostgreSQL.
     Utilisez odbc/jdbc/perl/tcl pour vous connecter  PostgreSQL 
     partir de Windows95, OS/2, Unix Motif ou de butineurs web (e.g.
     Redbaron, Opera, Netscape, 20 autres). (Les butineurs web sont en
     train de rapidement devenir le client standard).

  En suivant ce conseil, vous pouvez contrler de nombreux systmes 
  l'aide de seulement un clavier et un moniteur!

  On trouvera ci-dessous un eexxttrraaiitt dduu ccaattaalloogguuee ddee nneettwwoorrkktteecchhnniicc IInncc

  Commandez maintenant, appelez le  800-742-8324 (appel gratuit  partir
  des USA)

  Pour recevoir notre catalogue, veuillez envoyer votre adresse par
  courrier lectronique  : sales@networktechinc.com

  PILOTEZ PLUSIEURS PC's avec un seul clavier, cran et mulot Ces
  commutateurs lectroniques permettent de piloter jusqu' 64 PC's avec
  un unique clavier, cran et mulot. Son microprocesseur interne simule
  la prsence constante du clavier, de l'cran et du mulot pour chacun
  des PC's connects.

  Fonctionnalits et Applications


    Clavier, face avant ou commande  distance

    utilisation de connecteurs de mulots 9 broches D Srie ou 6 broches
     miniDIN

    utilisation de connecteurs de clavier 5 broches DIN ou 6 broches
     miniDIN

    rsolution vido 1600x1200 sans dgradation

    Utilisation de cbles standards

    Botier pour bureau ou pour montage en rack

  Spcifications - Clavier


    Tous les connecteurs dont femelles

    5 broches DIN ou 6 broches miniDIN

    Permettent un Re-dmarrage (boot) matriel ou logiciel de tous les
     PC's  chaque instant

  Contrles - Boutons en face avant


    Le toucher d'un bouton permet la connexion au PC correspondant

    L'appui sur un bouton pendant plus de 0.5 secondes entrane le
     fonctionnement dans les modes SCAN, BROADCAST ou COMMAND

    Les LEDs en face avant indiquent le mode d'opration du clavier

    L'appui sur CTRL+* entrane le fonctionnement en mode COMMAND

    Les modes SCAN, BROADCAST ou COMMAND sont disponibles

  Mulot

  * 9 broches D srie

    o Le commutateur NTI mule le mulot Microsoft srie pour tous les
     PC's


    o 9 broches D mle pour mulot

    o 9 broches D femelle pour PC's

  * 6 broches miniDIN

    o Le commutateur NTI mule le mulot IBM PS/2 pour tous les PC's

    o Tous les connecteurs sont femelles

  Par cble,  distance

    Optionnel--doit tre acquis sparment

    Fonctionnement identique  celui "Boutons en face avant"

  Moniteur (cran) - VGA

    Bande passante 150 MHz

    Rsolution 1600X1200 sans dgradation

    Tous les connecteurs sont des connecteurs femelles

  1144..  OOuuttiillss eett AApppplliiccaattiioonnss ppoouurr PPoossttggrreeSSQQLL

  1144..11..  LLee ssyyssttmmee ddee ddvveellooppppeemmeenntt AAppppGGEENN PPoossttggrreeSSQQLL 44GGLL ppoouurr lleess
  aapppplliiccaattiioonnss ddee bbaasseess ddee ddoonnnneess wweebb --

  AppGEN peut tre tl-charg de

    <http://www.man.ac.uk/~whaley/ag/appgen.html>

    <ftp://ftp.mcc.ac.uk/pub/linux/ALPHA/AppGEN>.

     AppGEN est un langage de haut niveau de la quatrime gnration
     ainsi qu'un gnrateur d'application pour produire des applications
     destines au World Wide Web (WWW). Ces applications sont
     typiquement utilises  travers l'internet ou dans le cadre d'un
     rseau intranet d'entreprise. Les applications AppGEN sont
     implantes en scripts C respectants la norme Common Gateway
     Interface (CGI) utilis par la plupart des serveurs Web.

  Pour utiliser AppGEN il vous faudra disposer de :-

  PostgresSQL, systme de gestion de base de donnes relationnel

  Un serveur web compatible CGI tel que HTTPD du NCSA

  D'un compilateur ANSI C tel que GCC

  AppGEN est constitu des excutables Unix (Linux) suivants :-


    defgen, qui produit une application cadre, de base,  partir de la
     structure logique des donnes. Ces applications sont capables
     d'ajouter, de mettre  jour, de supprimer et de rechercher les
     enregistrements d'une base de donnes tout en conservant
     automatiquement l'intgrit rfrentielle de cette base.


    appgen, le compilateur AppGEN qui compile le code source appgen en
     code source C CGI excutable et en documents formats HTML prts
     pour leur dploiement sur un serveur web.


    dbf2sql, un utilitaire de conversion de fichiers .dbf compatibles
     dBase III en scripts SQL excutables. Ce qui permet de migrer les
     donnes stockes dans la plupart des bases de donnes DOS/Windows
     vers un serveur SQL tel que PostgresSQL.

    De plus, AppGEN comprend un ensemble de documents HTML , de
     fichiers GIF et d'applets Java qui sont utiliss,  l'excution,
     par le systme. Et, naturellement, comme pour tout bon logiciel, la
     totalit du code source est fournie.


  L'auteur, Andrew Whaley, peut tre contact 

    andrew@arthur.smuht.nwest.nhs.uk

  1144..22..  WWWWWW WWeebb iinntteerrffaaccee ppoouurr PPoossttggrreessSSQQLL -- DDBBEENNGGIINNEE

  dbengine est une interface Web "plug 'n play" pour Postgres95 cre
  par Ingo Ciechowski. Il est  :

    <http://www.cis-computer.com/dbengine/ >

     AA pprrooppooss ddee DDBBEENNGGIINNEE :: dbengine est une interface entre le WWW et
     Postgres95 qui permet un accs simple  n'importe quelle base de
     donnes existante en seulement quelques minutes.

  PHP 3 offre une sorte de langage Perl dans vos documents, mais pas le
  vrai Perl alors que AppGen et wdb-p95 ncessite la cration d'un
  fichier de configuration pour chacune de vos bases de donnes -- c'est
  un peu comme si vous deviez apprendre un nouveau mta-langage avant de
  pouvoir commencer  travailler.

  A la diffrence des autres outils, vous n'avez pas  apprendre un
  langage de programmation particulier ou un langage de script pour
  commencer  utiliser dbengine. De plus, il n'y a pas  crer de
  fichier de configuration pour chaque base de donnes, et vous n'avez
  donc pas besoin de vous familiariser avec sa structure.  Cependant -
  au cas o vous voudriez profiter de toutes les possibilits de
  dbengine, ce serait une bonne ide de connatre le langage Perl.

  Le systme tout entier peut tre configur  l'aide de simples
  manipulations d'une base de donnes complmentaire qui contient les
  informations de dtail sur la manire de visualiser vos accs  la
  base de donnes. Vous pouvez mme spcifier des Champs Virtuels qui
  sont calculs en temps rel avant d'tre affichs  l'cran.

  LLiicceennccee ::

  dbengine est un logiciel libre selon les mmes conditions que Perl.
  Lisez sa licence si vous n'tes pas sr de ce que vous pouvez ou ne
  pouvez pas faire.  La dernire ligne indique que c'est une version
  plus gentille et plus modre que celle de la licence GNU -- une de
  celle qui n'affecte pas votre travail si vous extrayez des parties de
  dbengine ou du paquetage pour l'inclure dans un produit commercial!


  1155..  MMoodduullee AAppaacchhee WWeebbsseerrvveerr ppoouurr PPoossttggrreeSSQQLL -- NNeeooSSoofftt NNeeooWWeebbSSccrriipptt

  Apache est un serveur Web bien connu. On trouvera un module
  d'interface de PostgreSQL pour le serveur Web Apache  -

    <http://www.neosoft.com/neowebscript/>

     NeoWebScript est un langage de programmation qui permet d'inclure
     des programmes simples ou compliqus dans des fichiers HTML.

  Quand une page HTML contenant un script NeoWebScript est appele, le
  serveur Web ayant le NeoWebScript activ, excute le(s) script(s)
  inclus, produisant une page Web dont le contenu, personnalis, a t
  cr par le programme.

  NeoWebScript est un moyen rapide, sre, facile  apprendre de crer
  des programmes interactifs puissants directement en code HTML dans des
  pages Web.  Avec NeoWebScript, les compteurs, les formulaires de
  courrier lectronique, murs  graffitis, livres d'or et suivi des
  visiteurs sont aiss, mme pour un programmeur dbutant. Regardez
  comment NeoWebScript se dfend bien par rapport  PERL et JavaScript.

  Au cas o vous souhaiteriez installer NeoWebScript sur votre serveur
  web, votre webmestre doit lire notre "FAQ Sysop" pour se lancer. Le
  document "Thorie de fonctionnement" explique comment NeoWebScript
  fonctionne, celui d'Installation est un guide pas  pas des oprations
   effectuer. Le guide de Gestion traite de la manire de configurer et
  de faire fonctionner le serveur, celui de Tests permet de vrifier le
  fonctionnement correct de NeoWebScript, enfin, celui de Maintenance
  traite des problmes de serveur.

  Il n'y a aucuns frais pour l'utilisation de NeoWebScript-2.2 que ce
  soit pour votre ISP, votre intranet, ou votre extranet. Vous pourrez
  voir un licence complte quand vous vous enregistrerez pour
  tl-charger le logiciel, mais il en cote $ 99 si vous dsirez
  l'inclure dans votre propre produit ou l'utiliser dans un serveur
  commercial (eg. SSL).

  NeoWebScript est un module pour le serveur web Apache qui vous permet
  d'inclure , en tant que langage de script, pour vos pages web, le
  langage de programmation Tcl/Tk .  Il a t invent par Karl
  Lehenbauer, Directeur Technique chez NeoSoft, et document, renforc
  et tendu par les programmeurs de NeoSoft et par des rdacteurs
  techniques.

  Le serveur Apache est le serveur web le plus populaire au monde,
  totalisant 68 % des sites interrogs.

  Tcl/Tk est un langage de script puissant, libre et multi-plateformes
  dvelopp par le Dr. John Ousterhout. Selon ses propres termes :

  "Tcl/Tk permet aux dveloppeurs de logiciels de raliser un travail
  dix fois plus rapidement qu'avec des outils bass sur C ou C++. C'est
  aussi un grand langage de synthse permettant de faire travailler
  ensemble des applications existantes en les rendant plus graphiques et
  orientes Internet."

  Karl Lehenbauer, Fondateur et Directeur Technique de NeoSoft, a
  particip au dveloppement de Tcl/Tk ds le tout dbut. Avec Mark
  Diehkans, ils sont les auteurs de Tcl tendu  (Extended Tcl), connu
  galement sous le nom de TclX ou NeoSoft Tcl, qui constitue un
  ensemble puissant d'extensions au langage.  Beaucoup des commandes
  courantes essentielles de Tcl proviennent de Tcl tendu, et furent
  introduites dans le langage par le Dr. Ousterhout.

  NeoSoft Inc., 1770 St. James Place, Suite 500, Houston, TX 77056 USA

  1155..11..  HHEEIITTMMLL,, eexxtteennssiioonn,, cctt sseerrvveeuurr ddee HHTTMMLL eett llaannggaaggee 44GGLL ppoouurr
  PPoossttggrreeSSQQLL

  Heitml est un autre outil d'interfaage de postgres avec le monde du
  world wide web.  Pour plus de dtails contacter




            Helmut Emmelmann H.E.I. Informationssyteme GmbH
            Wimpfenerstrasse 23 Tel. 49-621-795141
            68259 Mannheim Germany Fax. 49-621-795161





    E-mail Mr.Helmut Emmelmann at emmel@h-e-i.de

    Heitml site web principal  <http://www.heitml.com>

    Heitml site web secondaire  <http://www.h-e-i.deom>

  Heitml est  la fois une extension, ct serveur, de HTML et un
  langage de la quatrime gnration (4GL). Avec lui, on peut crire des
  applications web dans un style HTML et en utilisant de nouvelles
  balises de style HTML.

  heitml (prononc "H-ail"-TML) est une extension de HTML et un langage
  de quatrime gnration complet permettant aux Applications utilisant
  le web d'interagir avec des donnes stockes dans des bases de donnes
  SQL, sans mriter l'criture de scripts CGI complexes.

  heitml tend HTML ct serveur, convertissant de manire dynamique les
  fichiers ".hei" au format HTML et ainsi, les rendant compatibles avec
  n'importe quel butineur web. Il englobe la syntaxe simple et familire
  de HTML et apporte un large assortiment de Balises et de Bibliothques
  pr-dveloppes pour prendre en charge les tches qui auparavant
  ncessitaient CGI. De mme que XML, heitml permet l'utilisation de
  balises dfinies par l'utilisateur. Avec heitml les marqueurs dfinis
  par l'utilisateur peuvent tre traduits en HTML et envoys  un
  butineur.

  heitml est destin  la fois aux concepteurs HTML et aux programmeurs
  professionnels. Les concepteurs HTML peuvent utiliser les Balises
  heitml pour fabriquer des pages web dynamiques, des accs aux bases de
  donnes SQL ou crer des applications web compltes. On peut crer des
  Compteurs, des bases de donnes d'inscriptions, des formulaires de
  recherche, des formulaires de courrier lectronique ou des menus
  hirarchiss en utilisant simplement des Balises de style HTML
  pr-dveloppes que l'on trouve dans les nombreuses Bibliothques de
  Composants.

  Pour les programmeurs, heitml inclut un langage de quatrime
  gnration complet en HTML


                 (e.g. <if>, <while>, et <let> Balises),




  plus un valuateur d'expression puissant pour les types de donnes
  entiers, rels, boolens chane de caractres et tuple. Les tuples ont
  une rfrence smantique comme dans les langages orients objets mod
  ernes et sont stocks sur un tas. Les variables heitml y compris
  toutes les structures de donnes complexes stockes sur le tas conser
  vent leur valeur de page en page par l'utilisation du Mode Session. Il
  vous est possible de dfinir vos propres balises ou vos balises
  d'environnement et mme de redfinir les balises HTML.

  Avec heitml il devient possible de

  - - - dvelopper des Sites Web de manire structure et modulaire,
  tout en rduisant de faon drastique la surcharge due  la
  maintenance.

  - - - dvelopper des Sites Web intelligents et interactifs, dont le
  contenu s'adapte dynamiquement aux besoins de l'utilisateur.

  - - - de visualiser le contenu de bases de donnes SQL sans autre
  programmation que l'utilisation de notre bibliothque de Balises
  pr-dfinies "dba".

  - - - de dvelopper des applications de bases de donnes complexes et
  de Catalogue d'Achat en utilisant les Variables Session

  heitml tourne sous Linux avec n'importe quel Serveur Web utilisant
  l'interface CGI, et il est particulirement rapide (mis  part la
  surcharge due  CGI) avec le Serveur Web APACHE (version 1.1.1, 1.1.3,
  ou 1.2.4) en utilisant l'API apache. Actuellement MSQL (Version 1 et
  2), PostgreSQL (Version 6), mysql, et les bases de donnes yard sont
  supports. heitml tourne sous Linux, BSDi, Solaris et SunOS, de mme
  que sous Windows NT avec CGI, ISAPI et ODBC et Windows 95.

  heitml (sous linux) est libre pour la recherche, et pour une
  utilisation prive et non commerciale. Les Sites Web commerciaux
  doivent payer une licence. La version totalement oprationnelle de
  heitml est disponible pour une priode d'essai et peut tre
  tl-charg librement. (Notez, cependant, que chaque page Web ".hei"
  que vous dvelopperez affichera un message indiquant qu'il s'agit
  d'une version  usage non commerciale. Aprs enregistrement, vous
  recevrez une cl pour effacer ce message sans avoir  rinstaller le
  programme.)

  Les nouvelles fonctionnalits de la version 1.2 sont

  - - - Bibliothque de Composants pour des Formulaires de Recherche
  dans un Base de Donnes, menus hirarchiss d'ouverture et de
  fermeture, formulaires de courrier lectronique

  - - - Le Mode Session a t re-conu et amlior pour conserver toutes
  les variables (y compris le tas tout entier) au travers des
  diffrentes pages. Cela signifie que les donnes, de n'importe quelle
  taille sont conserves  l'intrieur d'une session. Ceci offre
  l'opportunit d'un champ plus large pour crer de nouvelles
  applications, e.g. stockage complet des rsultats d'une interrogation
  dans la mmoire de la session.

  - - - Les instructions d'installation, la documentation et les
  bibliothques d'exemples ont t augmentes de manire significative,
  un cours d'auto-formation a t ajout

  - - - Des balises pour excuter des commandes shell et pour envoyer
  des courriers lectronique ont t ajoutes

  - - - Le support du formatage d'impression et de la mise au point.
  heitml affiche votre code source en couleurs dans votre butineur et
  signale les erreurs de faon intuitive. En cas d'erreur  l'excution,
  toutes les structures de donnes internes sont affiches dans le
  butineur en indiquant et prservant leurs positions dans le code
  source original.

  - - - Diverses nouvelles variables serveur et fonctions intgres ont
  t ajoutes

  - - - En mode production, heitml collecte maintenant des informations
  compltes sur les erreurs survenues lors de l'accs, par des
  utilisateurs,  votre site.


  Voici ce que dit la page d'accueil de heitml -

  heitml (prononcer "H-ail"-TML) tend et augmente de faon
  significative les fonctionnalits de HTML grce aux balises
  dfinissables et aux possibilits compltes de programmation. Ce qui
  permet de crer simplement des applications au contenu dynamique et
  orientes bases de donnes dans le monde HTML, sans CGI et sans
  scripts externes ou langages de programmation.  Cela signifie que
  vous, en tant qu'auteur HTML, vous pouvez inclure des applications
  dans vos pages web, simplement, en utilisant quelques nouvelles
  balises sans CGI et sans programmation. D'un autre ct, comme
  utilisateur avanc ou comme programmeur vous pouvez crer et
  programmer de puissantes bibliothques de balises.  Cette approche
  rend heitml souhaitable  la fois pour les utilisateurs nouveaux de
  HTML et pour les programmeurs professionnels.  heitml tourne sur le
  serveur web et gnre dynamiquement du HTML, aussi heitml est
  compatible avec les normes internet et avec n'importe quel butineur
  web. Il permet un accs total aux bases de donnes tout en vitant 
  l'utilisateur toute la complexit inutile de CGI. heitml a t
  dvelopp selon les plus rcents critres en matire de construction
  de compilateurs et de systmes transactionnels.

  Les pages heitml sont dveloppes exactement de la mme faon que les
  pages  HTML,  l'aide d'un diteur de texte ou d'un diteur HTML, et
  places comme d'habitude sur le serveur web. Cependant, maintenant,
  les pages peuvent contenir des balises heitml dynamiques et des accs
   des bibliothques de balises. Vous pouvez utiliser ces balises pour
  accder  une base de donnes, pour crer un contenu dynamique, pour
  envoyer des courriers lectronique, et mme pour crer de puissantes
  applications telles que les bases de donnes d'inscriptions ou de
  systmes d'achats.

  Les nouveaux venus  HTML et les programmeurs professionnels seront
  stupfaits de la vitesse et de la facilits avec lesquelles il peuvent
  concevoir des applications passionnantes telle que notre Livre d'Or
  Interactif sans ncessiter la complexit et l'apprentissage difficiles
  des scripts CGI, simplement en utilisant les outils fournis dans notre
  bibliothque dba.

  heitml est accompagn d'un large ventail de bibliothques de balises,
  pour crer des livres d'or, des applications de maintenance de bases
  de donnes, des formulaires puissants de courrier lectronique ou de
  structuration de votre site web  l'aide de menus hirarchiques. Ces
  outils sont prts  tre utiliss, il suffit simplement d'ajouter les
  balises correspondantes  votre site web.

  En tant que programmeur expriment, vous pouvez pleinement utiliser
  l'architecture dynamique persistante de tuple d'heitml : heitml n'est
  pas simplement un langage de script  typage dynamique, avec
  valuateur d'expression, procdures rcursives et capacits de passage
  de paramtres tendues, mais il apporte aussi des possibilits de
  tuples persistants dynamiques pour conserver automatiquement des
  donnes de session de n'importe quelle taille.

  1155..22..  SSeerrvveeuurr WWeebb AAmmeerriiccaa OOnn--lliinnee AAOOLL ppoouurr PPoossttggrreeSSQQLL

  Le serveur web commercial gratuit, AOLserver version 2.3 supporte des
  connexions  la base de donnes PostgreSQL version 6.2.1 et
  ultrieure.  Pour des informations complmentaires consultez

    AOL Web Server  <http://www.aolserver.com>





  1155..33..  OOuuttiill SSyyssttmmee ddee ssuuiivvii ddee PPrroobbllmmee//PPrroojjeett ppoouurr PPoossttggrreeSSQQLL

  Se trouve  l'url :

    <http://www.homeport.org/~shevett/pts/>

  1155..44..  CCoonnvveerrssiioonn ddee ffiicchhiieerrss ddbbaassee ddbbff eenn ffiicchhiieerrss PPoossttggrreeSSQQLL

  Le programme dbf2msql fonctionne parfaitement avec mSQL et PostgreSQL.
  Vous pouvez le trouver 

    <ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/>

    <ftp://ftp.postgresql.org/pub/incoming/dbf2pg-3.0.tar.gz>

  Ce programme a t crit par Maarten Boekhold, Faculty of Electrical
  Engineering TU Delft, NL Computer Architecture and Digital Technique
  section

    M.Boekhold@et.tudelft.nl

  Vous pouvez galement utiliser une mthode python pour lire des
  fichiers dbf et les charger dans une base de donnes postgres.

    Voir  <http://www.python.org>

  1166..  OOuuttiill ddee CCoonncceeppttiioonn//IImmppllmmeennttaattiioonn ppoouurr SSGGBBDD WWeebb ppoouurr PPoossttggrreeSSQQLL
  -- EEAARRPPWW


    <http://www.oswego.edu/Earp>

    <ftp://ftp.oswego.edu> in the directory 'pub/unix/earp'.

  1166..11..  EEAARRPP,, cc''eesstt qquuooii ??

  Le "Programme de Rponse Facilement Ajustable" ("Easily Adjustable
  Response Program" - EARP) cr par David Dougherty.  EARP est un outil
  de Conception/Implmentation pour Base De Donnes Web, ralis au-
  dessus du systme de gestion de base de donnes PostgresSQL. Ses
  fonctionnalits comprennent:


    Un systme de conception visuel.

    Une interface d'envoi de courrier lectronique. (pouvant prendre en
     charge le courrier entrant et sortant)

    Un Mcanisme de Scurit amlior.

    Un pilote cgi.

  1166..22..  IImmppllaannttaattiioonn


  L'implantation principale de EARP consiste en un binaire CGI qui
  s'excute sous le dmon http pour fournir l'accs au serveur de base
  de donnes. Tous les outils de conception sont intgrs dans le
  pilote, aucune conception ne se fait sur le web. Les outils eux-mmes
  requirent un navigateur graphique, la compatibilit des objets conus
  avec ces outils est indpendante de l'implantation, elle ne dpend
  uniquement que des prfrences de conception individuelles.




  1166..33..  CCee ddoonntt vvoouuss aavveezz bbeessooiinn ppoouurr ffaaiirree ffoonnccttiioonnnneerr EEAARRPP


  EARP est sens fonctionner sur une grande varit de plates-formes
  avec peu de modifications sinon pas du tout. Les plates-formes pour
  lesquelles le fonctionnement est connu sont les suivantes :

    Solaris 2.5

    Linux 1.2.13+

    GNU C++

    PostgreSQL (Version 1.01 / 1.02 )

    netsite server

    NCSA httpd


    GNU C++

    PostgreSQL (Version 1.01 / 1.02 )

    NCSA httpd

    Apache httpd

     La version actuelle (1.3) de Earp a t conue au-dessus de la
     version de libpq livre avec PostgreSQL v1.01/1.02.  Si vous
     utilisez une version plus rcente de Postgres, vous devez vous
     attendre  ce que le programme ncessite quelques modifications
     pour fonctionner correctement. Dans la version de dveloppement
     (Earp 2.0), la prise en charge de libpq est en cours de prise en
     compte en tant que module.

  1166..44..  CCoommmmeenntt ffoonnccttiioonnnnee--tt--iill??


  Une des fonctionnalits principales de EARP est d'utiliser une
  approche oriente objet pour produire des pages html qui s'interfacent
   la base de donnes. La plupart des pages sont constitues de
  plusieurs objets. Chaque objet est produit par une sorte d'outil et
  reoit un nom, les objets sont alors lis ensembles et appels en
  squence par l'outil de gestion de pages.  Les objets sont galement
  rutilisables  l'intrieur de plusieurs pages. Il existe des outils
  de base pour HTML, pour les Requtes, pour la saisie dans des
  formulaires, le formatage variable des requtes et des objets en
  entre, ainsi que pour lier des objets pour en former de nouveaux.  On
  trouve galement des outils plus avancs tels que l'outil de courrier
  lectronique et l'outil de cration de requtes en parallle.

  La gestion perfectionne de la scurit est une des autres
  fonctionnalits de EARP.  L'accs aux diffrentes zones du systme
  EARP peut tre limit par une grande varit de moyens. Pour faciliter
  cette scurit perfectionne, EARP effectue des contrles  chaque
  connexion au systme, et dtermine  quels "ids" et "groups"
  appartient l'agent qui se connecte. Les accs aux zones sont dfinis
  sparment, et la combinaison des deux permet de dcider si l'accs 
  une certaine zone de Earp est autoris. De plus , tout ce qui est
  requis pour raliser les fonctionnalits de scurit se trouve dans un
  serveur http qui effectue une authentification de l'utilisateur
  minimale (ou meilleure).



  1166..55..  OO ppuuiiss--jjee llee ttrroouuvveerr??


  EARP est disponible via un ftp anonyme  :

    <ftp://ftp.oswego.edu> in the directory 'pub/unix/earp'.

  1177..  PPHHPP PPrr--pprroocceesssseeuurr HHyyppeerrtteexxttee -- LLaannggaaggee ddee ssccrriipptt cctt sseerrvveeuurr,,
  aavveecc HHTTMMLL iinnttggrr,, ppoouurr PPoossttggrreeSSQQLL

  L'outil d'interfaage WWW se trouve  :

    <http://www.php.net>

    <http://www.vex.net/php>

     PHP possde galement un compilateur appel Zend qui amliore
     grandement les performances.  En premier lieu, pendant le
     dveloppement, les tests et la mise au point, vous crivez votre
     application en utilisant le langage de script PHP.  Une fois que le
     projet est prt  tre dploy, vous utilisez le compilateur Zend
     pour compiler le script PHP et crer un excutable qui tournera
     trs rapidement.

  PHP 3 est l'ancien nom des Pages d'accueil professionelles et le
  nouveau nom est Pr-Processeur Hypertexte PHP

    Des sites miroirs existent dans de nombreux pays  l'adresse
     www.COUNTRYCODE.php.org

    <http://www.fe.de.php.net>

    <http://www.sk.php.net>

    <http://php.iquest.net/>

  Pour les questions envoyer un courrier lectronique  :

    rasmus@lerdorf.on.ca

     PHP 3 est un langage de script ct serveur, avec langage HTML
     intgr.  Il vous permet d'crire des scripts simples directement
     dans vos fichiers .HTML  la manire JavaScript, sauf que,  la
     diffrence de JavaScript, PHP 3 n'est pas dpendant du butineur
     utilis. JavaScript est un langage, ct client, avec HTML intgr
     alors que PHP 3 est un langage ct serveur. PHP 3 est similaire,
     dans son concept, au produit LiveWire Pro pour Netscape. Si vous en
     avez les moyens, vous utilisez le serveur du commerce Netscape et
     l'un des systmes d'exploitation supports, et vous jetterez
     probablement un oeil sur LiveWire Pro. Si vous prfrez un logiciel
     libre, voluant rapidement, qui est disponible avec la totalit de
     son code source, vous apprcierez probablement PHP 3.

  1177..11..  FFoonnccttiioonnnnaalliittss pprriinncciippaalleess

  Support de CGI Standard, FastCGI et du module Apache.  Comme programme
  CGI standard, PHP 3 peut tre install sur n'importe quelle machine
  Unix sur laquelle tourne n'importe quel serveur web Unix. Avec le
  support de la nouvelle norme FastCGI, PHP 3 peut trouver avantage des
  gains de vitesse apports par ce mcanisme. Comme module Apache, PHP 3
  devient une alternative extrmement puissante et brillante  la
  programmation CGI.


    Enregistrement des accs Avec les possibilits d'enregistrement des
     accs de PHP 3, les utilisateurs peuvent entretenir leur propre
     compteur d'accs et l'enregistrer. Il n'utilise en aucune faon les
     fichiers de d'enregistrement des connexions du systme central, et
     il permet un suivi des accs en temps rel. Le Script du
     Visualisateur de Connexions fournit un rsum rapide des accs  un
     ensemble de pages possdes par un utilisateur individuel. De plus,
     le paquetage peut tre configur pour gnrer un pied de page, sur
     chaque page, qui montre l'information sur les accs. Regardez au
     bas de cette page pour en avoir un exemple.

    Contrle d'accs Un cran de configuration intgr, bas sur le
     web, permet la configuration du contrle des accs. Il est possible
     de crer des rgles d'accs pour toutes ou quelques unes des pages
     web possdes par une certaine personne qui met diverses
     restrictions sur qui peut voir ces pages et comment elles seront
     vues.  Les pages peuvent tre protges par un mot de passe,
     compltement interdites,  connexion dsactive et l'accs bas sur
     le domaine du client, le butineur, l'adresse de courrier
     lectronique ou mme le document auquel on se rfre.

    Support de Postgres Postgres est un SGBDR (RDBMS) avanc libre. PHP
     3 supporte les requtes Postgres95 et PostgreSQL SQL incluses
     directement dans les fichiers .html.


    RFC-1867 Support du tl-chargement de fichier Le tl-chargement
     de fichier est une nouvelle fonctionnalit de Netscape 2.0.  Il
     permet aux utilisateurs de tl-charger des fichiers vers le
     serveur web.  PHP 3 ralise le dcodage Mime rel pour faire ce
     travail et fournit aussi le cadre additionnel pour faire quelque
     chose d'utile avec le fichier tl-charg une fois que celui-ci a
     t reu.

    Contrle d'authentification bas sur HTTP PHP 3 peut tre utilis
     pour crer des mcanismes d'authentification personnaliss bass
     sur HTTP pour le serveur web Apache.

    Variables, Tableaux, Tableaux associatifs PHP 3 supporte des
     variables types, des tableaux et mme des tableaux associatifs 
     la Perl. Ils peuvent tre passs d'une page web  l'autre en
     utilisant les mthodes GET ou POST.

    Conditions, Boucles Tant que (While) PHP 3 possde un langage de
     script aux fonctionnalits compltes de style C. Vous disposez des
     instructions de tests conditionnels if/then/elseif/else/endif ainsi
     que des boucles while et des instructions switch/case pour
     contrler l'ordre logique et la manire dont les pages html doivent
     tre affiches.

    Expressions Rgulires tendues Les expressions rgulires sont
     trs utilises pour le filtrage, le remplacement de squences et
     les manipulations gnrales de chanes de caractres. PHP 3
     supporte toutes les oprations communes sur les expressions
     rgulires.

    Contrle de l'En-tte HTTP brute La possibilit d'envoyer  partir
     de pages web des en-ttes HTTP brutes personnalises en fonction
     d'une condition est essentielle pour crer un site web de haut
     niveau. Un usage frquent est l'envoi d'un emplacement: en-tte URL
     pour Rediriger le client appelant vers une autre URL.  Il peut
     aussi tre utilis pour stopper le stockage ou manipuler la
     dernire mise  jour de l'en-tte de pages.

    Cration d'images KIF  la vole PHP 3 prend en compte la
     bibliothque d'image GD de Thomas Boutell ce qui offre la
     possibilit de gnrer des images GIF  la vole.

    Prise en charge du mode scurit ("Safe Mode") ISP PHP 3 prend en
     charge un "Mode de Scurit" exceptionnel qui permet d'avoir de
     multiples utilisateurs excutant des scripts PHP en toute scurit
     sur le mme serveur.

    C'est Libre!  Pour finir, et c'est un point essentiel. Le paquetage
     est entirement libre.  Il est sous les conditions de la licence
     GPL qui vous permet d'utiliser ce logiciel pour n'importe quel
     objectif, commercial ou autre. Reportez-vous au document de la
     Licence Publique GNU pour des renseignements dtaills.

  1177..22..  CCrrddiittss


  * De grandes parties de ce code ont t dveloppes  et pour
  l'universit de Toronto. De grands Mercis  Lee Oattes du Dpartement
  de Dveloppement des Rseaux  l'universit pour ses critiques
  constructives permanentes.

  * Le code de prise en charge de Postgres95 a t crit par Adam
  Sussman

    asussman@vidya.com

  * d'autres, innombrables, ont particip aux tests et  la mise au
  point du paquetage.

  1177..33..  PPHHPP 33 -- BBrreeff HHiissttoorriiqquuee


  PHP a commenc sa vie comme simple petite enveloppe cgi crite en
  Perl.  Son utilisation en dehors d'un usage priv n'avait jamais t
  envisage. Le nom de ce premier paquetage tait "Personal Home Page
  Tools" (Outils pour Page d'Acceuil Personnelle"), qui devint plus tard
  "Kit de Construction d'une Page d'Acceuil".

  Un outil pour inclure facilement des requtes SQL dans des pages web a
  t crit. C'tait fondamentalement un autre petit programme enveloppe
  CGI qui analysait les requtes SQL et facilitait la cration de
  formulaires et de tables bass sur ces requtes. Cet outil fut appel
  FI "Interprteur de Formulaire" (Form Interpreter).

  La version 2.0 PHP/FI est une rcriture complte de ces deux
  paquetages combins pour former un simple programme. il a maintenant
  volu au point de devenir un simple langage de programmation intgr
  dans les fichiers HTML.  L'acronyme original, PHP, lui est rest. Il
  n'est plus rellement appropri.  PHP/FI est aujourd'hui plus utilis
  pour mettre en place des sites web entiers que pour de petites pages
  d'accueil personnelles. Quel que soit son nom, il limine le besoin de
  recourir  de nombreux petits programmes cgi Perl en permettant
  d'insrer de simples scripts directement dans vos fichiers HTML.  Ceci
  amliore les performances globales de vos pages web puisque la
  surcharge due au lancement de processus Perl successifs a t
  limine. La gestion de larges sites web a galement t facilite en
  plaant tous les composants d'une page web dans un fichier html
  unique. En incluant le support de diffrentes bases de donnes, il
  devient trivial de dvelopper des pages web mettant en oeuvre des
  bases de donnes. Nombreux sont ceux qui trouvent que cette
  intgration est plus facile  grer que d'essayer de crer des
  fichiers HTML et CGI spars.

  Tout au long de cette documentation, toute rfrence  PHP, FI ou
  PHP/FI traite de la mme chose. La diffrence entre PHP et FI est
  seulement conceptuelle. Les deux sont construits  partir de la mme
  distribution du code source. Maintenant, PHP/FI a t renomm PHP 3.

  1177..44..  BBoonn,, qquuee ppuuiiss--jjee ffaaiirree aavveecc PPHHPP//FFII??


  La premire chose que vous allez noter, si vous faites tourner une
  page par l'intermdiaire de PHP/FI, c'est qu'il ajoute un pied de page
  vous informant du nombre d'accs  votre page (si vous incluez le
  support des connexions d'accs dans votre binaire). C'est seulement un
  tout petit exemple de ce que PHP/FI peut faire pour vous. Il joue
  galement le rle trs important d'interprteur de formulaire cgi,
  d'o la partie FI de son nom. Par exemple si vous crez un formulaire
  dans l'une de vos pages web, vous avez besoin de quelque chose pour
  traiter l'information contenue dans ce formulaire. Mme si vous
  dsirez simplement passer l'information  une autre page web, vous
  aurez besoin d'un programme cgi pour le faire. PHP/FI facilite
  grandement le processus de prise en charge des donnes du formulaire
  pour en faire quelque chose.

  1177..55..  UUnn ssiimmppllee eexxeemmppllee


  Supposons que vous ayez le formulaire :



       <FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST>
       <INPUT TYPE="text" name="name">
       <INPUT TYPE="text" name="age">
       <INPUT TYPE="submit">
       <FORM>




  Votre fichier display.html doit contenir quelque chose du genre :


       < ?echo "Hi $ name, vous avez $ age ans!<p>" >




  C'est aussi simple que cela! PHP/FI cre automatiquement une variable
  pour chaque champ de saisie de votre formulaire. Vous pouvez alors
  utiliser ces variables dans le fichier ACTION URL.

  L'tape suivante, aprs avoir vu comment utiliser ces variables, est
  de commencer  jouer avec quelques balises de gestion du droulement
  logique de vos pages. Par exemple, si vous voulez afficher diffrents
  messages dpendants de des informations entres par l'utilisateur,
  vous pouvez utiliser la logique si/alors (if/else). Dans notre exemple
  ci-dessus, on peut afficher diffrentes choses dpendant de l'ge
  entr par l'utilisateur en modifiant notre fichier display.html en :



       <?
           if($age>50);
               echo "Hi $name, vous tes un fossile!<p>";
           elseif($age>30);
               echo "Hi $name, vous tes trs vieux!<p>";
           else;
               echo "Hi $name.";
           endif;
       >


  PHP/FI fournit un langage de script trs puissant qui peut faire
  beaucoup plus que ce qui est expos dans l'exemple ci-dessus. Regardez
  la section sur le langage de Script PHP/FI pour des informations
  complmentaires.

  Vous pouvez galement utiliser PHP/FI pour configurer qui a le droit
  d'accder  vos pages. Ceci est effectu en utilisant l'cran de
  configuration inclus.  Par son intermdiaire , vous pourrez, par
  exemple, spcifier que seulement les gens appartenant  un certain
  domaine seront autoriss  voir vos pages, vous pouvez galement crer
  une rgle protgeant certaines pages par un mot de passe. Voir la
  section Contrle d'Accs pour plus de dtails.

  PHP/FI est galement capable de recevoir des fichiers tl-chargs par
  n'importe quel butineur conforme  la norme RFC-1867. Cette
  fonctionnalit permet aux gens de tl-charger galement des fichiers
  de texte ou binaire.  Avec le contrle de PHP/FI et les fonctions
  logiques, vous disposez d'un contrle total sur qui est autoris 
  tl-charger un fichier et sur ce que l'on peut faire de ce fichier
  une fois tl-charg. Voir la section Tl-chargement de fichier pour
  de plus amples dtails.

  PHP/FI supporte le paquetage Postgres95. Il supporte les requtes SQL
  incluses dans vos fichiers .HTML. Consultez la section Support
  Postgres95 pour plus d'informations.

  PHP/FI supporte galement le paquetage du SGBD mysql. Il supporte les
  requtes SQL incluses dans vos fichiers .HTML. Consultez la section
  Support mysql pour plus d'informations.

  1177..66..  RReeddiirreeccttiioonn CCGGII


  1177..66..11..  NNootteess AAppaacchhee 11..00..xx

  Une bonne manire de faire tourner PHP/FI est d'utiliser un module de
  redirection cgi avec le serveur Apache. Veuillez noter que vous n'avez
  pas  vous soucier des modules de redirection si vous utilisez la
  version module Apache de PHP/FI. Deux de ces modules de redirection
  sont disponibles. L'un est dvelopp par Dave Andersen

    angio@aros.net

     et est disponible 

    ftp://ftp.aros.net/pub/util/apache/mod\_cgi\_redirect.c

     et l'autre est inclus avec Apache et est appel mod_actions.c. Ces
     deux modules sont extrmement similaires. Ils diffrent trs
     lgrement dans leur utilisation. Les deux ont t tests et
     fonctionnent avec PHP/FI.

  Regardez dans la documentation Apache la manire d'ajouter un module.
  En gnral vous ajoutez le nom de module dans un fichier appel
  Configuration. La ligne  ajouter si vous voulez utiliser le module
  mod_actions est :


            Module action_module mod_actions.o




  Si vous envisagez d'utiliser le module mod_cgi_redirect.c ajoutez
  cette ligne :

       Module cgi_redirect_module mod_cgi_redirect.o




  Puis compilez votre httpd et installez-le. Pour configurer la redirec
  tion cgi il vous faudra soit crer un nouveau type mime dans votre
  fichier mime.types soit utiliser la commande AddType dans votre
  fichier srm.conf pour ajouter le type mime. Le type mime  ajouter
  doit tre quelque chose comme :


            application/x-httpd-php phtml




  Si vous vous apprtez  utiliser le module mod_actions.c il vous fau
  dra ajouter la ligne suivante dans votre fichier srm.conf:


            Action application/x-httpd-php /cgi-bin/php.cgi




  Si vous vous apprtez  utiliser mod_cgi_redirect.c vous devrez
  ajouter cette ligne  srm.conf :


            CgiRedirect application/x-httpd-php /cgi-bin/php.cgi




  N'essayez pas d'utiliser en mme temps mod_actions.c et mod_cgi_redi
  rect.c .

  Une fois que vous avez l'un de ces modules de redirection cgi install
  et configur correctement, vous pouvez spcifier que vous voulez qu'un
  fichier soit filtr par php/fi en mettant simplement l'extension
  .phtml au fichier. De plus, si vous ajoutez index.phtml  votre ligne
  de configuration DirectoryIndex dans votre fichier srm.conf alors la
  page de plus haut niveau d'un rpertoire sera automatiquement filtre
  par php si vous appelez votre fichier index index.phtml.

  1177..66..22..  HHTTTTPPDD NNeettssccaappee

  Vous pouvez rediriger automatiquement les requtes pour des fichiers
  ayant une extension donne de faon  ce qu'ils soient pris en compte
  par PHP/FI en utilisant le module de Redirection du Serveur CGI
  Netscape.  Ce module est disponible dans le Fichier Archives de la
  Page d'Accueil de PHP/FI. Le fichier LISEZ_MOI (README) dans le
  paquetage explique clairement comment le configurer pour l'utiliser
  avec PHP/FI.

  1177..66..33..  HHTTTTPPDD NNCCSSAA

  Actuellement NCSA ne supporte pas les modules, donc, pour effectuer
  une redirection cgi avec ce serveur, il vous faudra modifier le code
  source de votre serveur. Une rustine pour faire cela avec NCSA 1.5 est
  disponible dans le fichier archives de PHP/FI.




  1177..77..  LLaanncceerr PPHHPP//FFII  ppaarrttiirr ddee llaa lliiggnnee ddee ccoommmmaannddee


  Si vous fabriquez la version CGI de PHP/FI, vous pouvez l'utiliser
  simplement  partir de la ligne de commande, en tapant: php.cgi
  nom_de_fichier o nom_de_fichier est le fichier que vous voulez
  filtrer. Vous pouvez galement crer des scripts PHP/FI autonomes en
  faisant ressembler la premire ligne de votre script  quelque chose
  comme :



           #!/usr/local/bin/php.cgi -q




  L'option "-q" supprime l'impression des en-ttes HTTP. Vous pouvez
  vous passer de cette option si vous le dsirez.

  1188..  IInntteerrffaaccee PPyytthhoonn ppoouurr PPoossttggrreeSSQQLL

  Python est un langage de script, interprt et orient objet.  Il est
  simple  utiliser (syntaxe lgre, instructions simples et sans
  dtours ). Il possde de nombreuses extensions pour btir des
  interfaces utilisateurs ( GUI ), pour s'interfacer au WWW, etc. Un
  butineur de web intelligent (  la HotJava ), est actuellement en
  cours de dveloppement (novembre 1995), et cela devrait ouvrir de
  nombreuses portes aux programmeurs.  Le copyrightde Python est dtenu
  par Stichting S Mathematisch Centrum, Amsterdam, Pays-Bas, et est
  librement distribuable Il supporte le chargement dynamique d'objets,
  de classes, de modules et d'exceptions. L'ajout d'interfaces  de
  nouvelles bibliothques systme,  l'aide de code C est ais, rendant
  Python facile  utiliser en cas de personnalisation. Python est un
  langage de script de trs haut niveau possdant une interface X. Le
  paquetage Python est distribu dans les cdroms Linux, et il comprend
  la plupart des modules Python standards, ainsi que des modules
  d'interfaage  l'ensemble de widgets Tix pour Tk.

  PyGresSQL est un module Python qui s'interface  une base de donnes
  PostgreSQL. Il intgre la bibliothque de requtes de PostgreSQL pour
  permettre l'utilisation aise des possibilits de PostgreSQL  partir
  d'un script Python.  PyGreSQL a t crit par D'Arcy J.M. Cain et
  Pascal Andre.

    Nouveau site de PyGreSQL  <http://www.druid.net/pygresql/>

    Maintenu par  D'Arcy   <http://www.druid.net/~darcy/>

    L'ancien site est 
     <ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.README >

    D'Arcy J.M. Cain darcy@druid.net

    Pascal Andre andre@chimay.via.ecp.fr

    Pascal Andre andre@via.ecp.fr



  1188..11..  OO llee ttrroouuvveerr PPyyGGrreess ??


  Les sites d'accueil des diffrents paquetages sont :


    Python
     <ftp://ftp.python.org:/pub/www.python.org/1.5/python1.5b2.tar.gz>

    PyGreSQL  <ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz>

    Old site
     <ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0b.tar.gz
     >

     Vous devriez cependant essayer de trouver un site miroir proche de
     votre propre site. Consultez les sources d'information pour trouver
     ces sites.  PyGres95 devrait se trouver dans les rpertoires
     contrib des sites Python et PostgresSQL.

  1188..22..  IInnffoorrmmaattiioonn eett ssuuppppoorrtt


  Si vous avez besoin d'informations concernant ces paquetages veuillez
  consulter leurs sites web:


    Python :      <http://www.python.org/>

    PostgreSQL :
     <http://epoch.cs.berkeley.edu:8000/postgres95/index.html>

    PyGreSQL  <ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz>

    Ancien site PyGreSQL :
     <http://www.via.ecp.fr/via/products/pygres.html>

  Pour un support :

    Liste de diffusion de PyGreSQL. Vous pouvez vous abonner en
     envoyant un courrier lectronique  majordomo@vex.net en mettant la
     ligne "subscribe pygresql name@domain" dans le corps du message et
     en remplaant "name@domain" par votre propre adresse lectronique.

    Forum de discussion pour Python :     newsgroup comp.lang.python

    PyGreSQL :   contacter Andre  andre@via.ecp.fr pour les comptes-
     rendus d'erreurs, ides, remarques

  1199..  PPaasssseerreellllee eennttrree PPoossttggrreeSSQQLL eett WWWWWW -- WWDDBB--PP9955

  WDB-P95 - Une interface Web interface aux bases de donnes PostgresSQL
  a t cre par J. Douglas Dunlop.  C'est  :

    La nouvelle WDB de J Rowe se trouve 
     <http://www.lava.net/beowulf/programming/wdb>

    La nouvelle version de WWW-WDB est 
     <http://www.eol.ists.ca/~dunlop/wdb-p95/>

    Pour les questions ou pour s'abonner  une liste de diffusion
     contacter : dunlop@eol.ists.ca

     C'est une version modifie de wdb-1.3a2 qui fournit une passerelle
     WWW  PostgresSQL. Cette version ncessite galement un Butineur
     capable de prendre en compte les Tables HTML pour avoir une sortie
     tabule. Ceci n'est pas requis pour le  wdb original et on peut
     facilement y revenir.

  Vous pouvez essayer ma Bande CASI et ma Requte d'Image. Vous pouvez
  jeter un coup d'oeil au Fichier de Dfinition de Formulaire (FDF) qui
  est utilis pour crer la Bande CASI et galement la Requte d'Image,
  qui comprends une jointure (JOIN) de 2 tables.

  Cette version contient tous les fichiers ncessaires pour installer et
  faire tourner WDB-P95 en tant qu'interface  vos bases de donnes
  PostgresSQL. Le portage de ce systme pour une autre base de donnes
  devrait tre relativement facile -  condition qu'elle supporte le SQL
  standard et possde une interface Perl.

  1199..11..  LLee sseerrvveeuurr PPoossttggrreessSSQQLL,, ppggppeerrll,, eett hhttttppdd ddooiivveenntt--iillss rrssiiddeerr
  ssuurr llee mmmmee hhttee??

  Non - Le serveur PostgresSQL n'a pas  tre sur le mme hte. Comme
  WDB-P95 est appel par le dmon http, ils doivent rsider sur le mme
  hte. - Et comme WDB-P95 a t crit pour utiliser Pg.pm - pgperl doit
  tre sur le mme hte galement. Pgperl a t crit en utilisant la
  bibliothque libpq, donc, il sera capable d'accder  n'importe quel
  serveur Postgres95 n'importe o sur le rseau, juste comme n'importe
  quel autre client PostgresSQL. Comme illustr ci-dessous

  {WWW Client (Netscape)} => {HTTP Server (NCSA's http) + WDB-P95 +
  pgperl + libpq}=> {PostgresSQL server}

  Les parenthses () reprsentent les machines.


  Chaque machine peut tre d'un type diffrent : NT, SUN, HP, ... mais
  il faut que vous ayez la bibliothque d'interface libpq pour le type
  de machine sur lequel  vous envisagez d'utiliser WDB-P95, puisqu'il
  vous faut compiler pgperl.  (Le systme a t conu pour utiliser les
  tables HTML donc un client WWW rcent est meilleur)


  2200..  IInntteerrffaacceess aauu llaannggaaggee ""CC"",, ""CC++++"",, EESSQQLL//CC eett OOpprraatteeuurrss ssuurr lleess
  bbiittss ppoouurr PPoossttggrreeSSQQLL


  2200..11..  IInntteerrffaaccee ""CC""

  Elle est incluse dans la distribution et s'appelle 'libpq'. Elle est
  similaire aux bibliothques OCI Oracle, DB-lib Sybase, ou CLI
  Informix.


  2200..22..  ""CC++++"" iinntteerrffaaccee

  Elle est incluse dans la distribution et est nomme 'libpq++'.


  2200..33..  EESSQQLL//CC

  C'est un pr-compilateur C intgr pour PostgreSQL ESQL/C comme Pro*C
  d'Oracle, et ESQL/C d'Informix.  ESQL/C pour PostgreSQL est une
  interface de programmation d'application SQL (API) qui permet au
  programmeur C de crer des applications personnalises avec des
  possibilits de gestion de base de donnes. ESQL/C pour PostgreSQL
  vous permet d'utiliser un langage de troisime gnration avec lequel
  vous tes familiaris tout en profitant des avantages d'un Langage de
  Requtes Structur (SQL).

  ESQL/C est compos des lments logiciels suivants:

    Les bibliothques ESQL/C de fonctions C fournissent les accs au
     serveur de base de donnes.

    Les fichiers d'en-tte ESQL/C apportent les dfinitions des
     structures de donnes, les constantes et les macros utiles dans un
     programme ESQL/C.

    Le pr-processeur ESQL/C, qui est un pr-processeur de code source,
     transforme un fichier C contenant des instructions SQL en fichier
     excutable.

     Il se trouve  :

    ESQL/C pour PostgreSQL est dj inclus dans la distribution.

    Site principal  <ftp://ftp.lysator.liu.se/pub/linus>

    Email : linus@epact.se


  2200..44..  OOpprraatteeuurrss ssuurr lleess bbiittss ppoouurr PPoossttggrreeSSQQLL

  Les oprateurs sur les bits ont t crits par Nicolas Moldavsky

    nico@overnet.com.ar

  Ce sont des fonctions "C" qui implantent les oprateurs bit-par-bit
  (AND, OR, XOR, bit complement) dans pgsql. Si quelqu'un dsire les
  utiliser, il peut les rcuprer par ftp anonyme de


    <ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz>

  De plus, il y a un "Makefile" pour Linux.

  2211..  LLeess CCooddeess KKaannjjii JJaappoonnaaiiss ppoouurr PPoossttggrreeSSQQLL

  Sont trs utiles pour les Japonais.  On les trouvera au site suivant :

    <ftp://ftp.sra.co.jp/pub/cmd/postgres/>

  2222..  PPoorrttaaggee ddee PPoossttggrreeSSQQLL ppoouurr WWiinnddoowwss 9955//WWiinnddoowwss NNTT

  Un portage pour Windows 95/Windows NT est en cours de ralisation.  Ce
  portage de fait en utilisant  gcc, gmake pour Win NT/95. Le programme
  gnu-win32 est utilis pour compiler le code source sous win32.  GNU
  gcc est disponible pour win32. Consultez ce site -

    <http://www.cygnus.com/misc/gnu-win32>

     Rcuprez-y le fichier cdk.exe (fichier auto-extractible pour gnu-
     win32)

  Le portage peut galement tre ralis en utilisant  l'outil
  "Emulateur Unix sous NT" (Unix-Emulator on NT) suivant de

    <http://www.softway.com>

  2233..  MMaaiilliinngg LLiissttss


  2233..11..  OObbtteenniirr uunn ccoommppttee ee--mmaaiill GGrraattuuiitt

  Regardez les offres gratuites - obtenez des comptes e-mail gratuit
  chez

    Yahoo  <http://www.yahoo.com> cliquer sur e-mail

    Lycos  <http://www.lycos.com> cliquer sur nouveaux comptes e-mail


    hotmail  <http://www.hotmail.com> cliquer sur nouveaux comptes e-
     mail

     Inscrivez vous  la liste de diffusion PostgreSQL et Yahoo dispose
     de la fonctionnalit complmentaire de cration d'un classeur
     spar pour les courriers lectroniques PostgreSQL e-mails, ainsi
     votre e-mail habituel ne sera pas pollu. Slectionnez le menu
     Email- > Options- > Filters et prenez un classeur spar pour e-
     mail.  Avec ce compte e-mail vous pouvez accder au courrier de
     n'importe o dans le monde  partir du moment o vous avez accs 
     une page web.

  Si vous disposez d'un autre  e-mail, vous pouvez utiliser les "Filtres
  de Courrier" pour recevoir automatiquement les courriers PostgreSQL
  dans un dossier spar. De cette faon, vous viterez de voir votre
  courrier pollu.

  2233..22..  LLiissttee ddee DDiiffffuussiioonn AAnnggllaaiissee

  Regardez les Titres des Listes de Diffusion sur la page web principale
   :

    <http://www.postgresql.org/>

    Envoyez vos questions par courrier lectronique : pgsql-
     questions@postgresql.org

    Dveloppeurs pgsql-hackers@postgresql.org

    Questions spcifiques  un portage pgsql-ports@postgresql.org

    Questions concernant la documentation pgsql-docs@postgresql.org

     Vous recevrez une rponse, par courrier lectronique, dans la
     journe qui suit!!

  Vous pouvez galement vous inscrire aux listes de diffusion.  Pour
  vous inscrire ou vous radier d'une liste, envoyez un courrier 

    pgsql-questions-request@postgresql.org

    pgsql-hackers-request@postgresql.org

    pgsql-ports-request@postgresql.org

    pgsql-docs-request@postgresql.org

     Le corps du message doit uniquement contenir la simple ligne

  subscribe

  (ou)

  unsubscribe

  2233..33..  AArrcchhiivvee ddeess lliisstteess ddee ddiiffffuussiioonn

  Il y a aussi des listes de diffusion qui sont archives au format html
   l'endroit suivant -

    Liste accessible par dates via MHonarc sur le WWW 
     <http://www.postgresql.org/mhonarc/pgsql-questions>

    <ftp://ftp.postgresql.org> dans le rpertoire /pub/majordomo


  2233..44..  LLiissttee ddee DDiiffffuussiioonn EEssppaaggnnoollee

  Il y a maintenant une liste "non officielle" pour postgreSQL en
  Espagnol.  Consultez galement la section 'Compte gratuit pour
  Organiser vos e-mails PostgreSQL e-mails' ci-dessus. Pour souscrire,
  l'utilisateur doit envoyer un message  :

    majordomo@tlali.iztacala.unam.mx

     Le corps du message doit contenir la simple ligne :

  inscripcion pgsql-ayuda

  2244..  LLiivvrreess eett DDooccuummeennttaattiioonnss


  2244..11..  GGuuiiddeess uuttiilliissaatteeuurr eett MMaannuueellss

  On trouve dans la distribution PostgreSQL aux formats postscript, HTML
  et pages de manuel unix les documents suivants. Si vous avez accs 
  l'internet, vous pouvez trouver les documents indiqus ci-dessous 
  <http://www.postgresql.org/docs>


    Le 'Guide Utilisateur' pour PostgreSQL,

    Le 'Guide de Ralisation' dtaillant la constitution interne de
     PostgreSQL.

    Les manuels "en ligne".

    Le manuels en ligne au format HTML.

    galement les manuels au format Postscript pour faire des ditions
     papier.

  2244..22..  DDooccuummeennttaattiioonn eenn lliiggnnee


    Liste et description des types de donnes et des oprateurs par
     dfaut


       Fait partie des commandes PSQL de la version 6.5.2.




    Liste des mots-cls SQL supports


       Il y a un script dans le rpertoire /tools qui fait cela




    Liste des instructions supportes -


       Utilisez la commande psql \h




    Concepts de base des bases de donnes relationnelles sous
     PostgreSQL (en implmentation) et des tonnes d'exemples en ligne
     (requtes) -


       Consultez les tests de rgression dans src/test. L, vous y trouver les
       rpertoires regress/sql et suite/*.sql.





    Didacticiel pour PostgreSQL.



       Les scripts du didacticiel SQL sont dans le rpertoire src/tutorial





  Voir galement "Didacticiel SQL pour les dbutants" dans l'appendice B
  de ce document ``''

  2244..33..  DDooccuummeennttss ddee RRffrreennccee:: OOuuvvrraaggeess ddee rrffrreennccee uuttiilleess ::


    "Understanding the New SQL: A Complete Guide" (Comprendre le
     Nouveau SQL: Un Guide Complet)- par Jim Melton et Alan R.Simon


       Morgan Kaufman Publisher. C'est un des meilleurs livres sur SQL. Il
       concerne SQL92.





    "A Guide to THE SQL STANDARD" (Un Guide du STANDARD SQL) - par
     C.J.Date


       Addison-Wesley Publishing company. C'est galement un bon livre. Trs
       populaire en ce qui concerne SQL.





    SQL - The Standard Handbook, (Le Manuel Standard) November 1992


       Stephen Cannan and Gerard Otten
       McGraw-Hill Book Company Europe , Berkshire, SL6 2QL, England





    SQL Instant Reference, (Rfrence Immdiate SQL) 1993


       Martin Gruber, Technical Editor: Joe Celko
       SYBEX Inc.  2021 Challenger Drive Alameda, CA 94501



    C.J.Date, "An introduction to Database Systems" (Une introduction
     aux Systmes de Bases de Donnes) (6th Edition), Addison-Wesley,
     1995, ISBN 0-201-82458-2


       Ce livre est la Bible des Systmes de Gestion de Bases de Donnes.
       Le livre dtaille la normalisation, SQL, la rcupration, la concurrence,
       la scurit, l'intgrit, les extensions au modle relationnel original,
       des sujets actuels tels que  les systmes client/serveur et le(s) modle(s)
       Orient(s) Objet. De nombreuses rfrences sont donnes pour des lectures
       complmentaires. Recommand pour la plupart des utilisateurs.





    Stefan Stanczyk, "Theory and Practice of Relational Databases",
     (Thorie et pratique des bases de Donnes Relationnelles) UCL Press
     Ltd, 1990, ISBN 1-857-28232-9


       Ce livre dtaille la thorie des bases de donnes relationnelles, l'algbre
       relationnelle, le calcul et la normalisation. Mais il ne couvre pas les sujets
       du mode rel et les exemples sont un peu simplistes. Recommand pour la plupart
       des utilisateurs.





    "The Practical SQL Handbook" (Le Manuel Pratique de SQL) Third
     Edition, Addison Wesley Developers Press ISBN 0-201-44787-8


       Recommand pour la plupart des utilisateurs.





    Michael Stonebraker, "Readings in Database Systems" (lectures sur
     les Systmes de Bases de Donnes), Morgan Kaufmann, 1988, ISBN
     0-934613-65-6


       Ce livre est un recueil de papiers, sur les bases de donnes, qui ont t
       publis sur plusieurs annes. Il n'est pas pour l'utilisateur occasionnel
       mais, c'est rellement une rfrence pour les tudiants en classes suprieures
       (troisime cycle) ou pour les dveloppeurs de systmes de bases de donnes.





    C.J.Date, "Relational Database - Selected Readings" (Bases de
     Donnes Relationnelles - Morceaux choisis), Addison-Wesley, 1986,
     ISBN 0-201-14196-5


       Ce livre est un recueil de papiers, sur les bases de donnes, qui ont t
       publis sur plusieurs annes. Il n'est pas pour l'utilisateur occasionnel
       mais c'est rellement une rfrence pour les tudiants en classes
       suprieures (troisime cycle) ou pour les dveloppeurs de systmes de
       bases de donnes.


    Nick Ryan and Dan Smith, "Database Systems Engineering",
     (Ingnierie de Systmes de Bases de Donnes), International Thomson
     Computer Press, 1995, ISBN 1-85032-115-9


       Ce livre traite des dtails des mthodes d'accs, et des technique de stockage.





    Bipin C. Desai, "An introduction to Database Systems", (Une
     introduction aux systmes de bases de donnes) West Publishing Co.,
     1990, ISBN 0-314-66771-7


       Il n'est pas pour l'utilisateur occasionnel mais c'est rellement une
       rfrence pour les tudiants en classes suprieures (troisime cycle)
       ou pour les dveloppeurs de systmes de bases de donnes.





    Joe Celko "INSTANT SQL Programming" (Programmation SQL IMMEDIATE)


       Wrox Press Ltd.
       Unit 16, 20 James Road, Tyseley
       Birmingham, B11 2BA, England
       1995





    Michael Gorman "Database Management Systems: Understanding and
     Applying Database" (Systmes de Gestion de Bases de Donnes :
     comprendre et appliquer les bases de donnes)


       Technology
       QED and John Wiley
       1991





    Michael Gorman "Enterprise Database for a Client/Server
     Environment" (Base de Donnes d'Entreprise pour un Environnement
     Client/Serveur) QED and John Wiley


       Prsente les exigences de construction d'applications de base de donnes
       client/server par l'intermdiaire de mta-modles d'entrept et l'utilisation
       de la norme SQL ANSI 1993





  Des centaines d'autres titres concernant SQL sont disponibles!
  Vrifiez-le dans une librairie.


  2244..44..  DDooccuummeennttss ddee SSppcciiffiiccaattiioonnss AANNSSII//IISSOO SSQQLL -- SSQQLL 11999922,, SSQQLL 11999988

  Les documents de Spcifications ANSI/ISO SQL sont situs  l'endroit
  indiqu ci-dessous.

    <http://www.naiua.org/std-orgs.html>

    <http://www.ansi.org/docs> et cliquez sur le fichier cat_c.html
     puis rechercher "Database SQL"

    Standard  SQL92  <http://www.jcc.com> et cliquez sur le fichier
     sql_stnd.html

    Spcifications ANSI/ISO SQL
     <http://www.contrib.andrew.cmu.edu/~shadow/sql.html> Vous trouverez
     la Rfrence SQL ici.

  2244..55..  SSyynnttaaxxee ddee ll''AANNSSII//IISSOO SSQQLL 11999922

  Voir l'Appendice A de ce document ``''

  2244..66..  SSyynnttaaxxee ddee ll''AANNSSII//IISSOO SSQQLL 11999988

  Les spcifications de SQL 1998 (SQL 3) sont encore en cours de
  dveloppement.  Voir le paragraphe 'Electronic Access to the SQL3
  Working Draft' de ce document document  ``''

  2244..77..  DDiiddaaccttiicciieell SSQQLL ppoouurr lleess ddbbuuttaannttss

  Voir l'Appendice B de ce document ``''

  2244..88..  EExxtteennssiioonn TTeemmppoorreellllee  SSQQLL9922


    Document pour l'Extension Temporelle  SQL-92
     <ftp://FTP.cs.arizona.edu/tsql/tsql2/>

    Spcification SQL-3 Temporelle
     <ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/>

  Ce rpertoire contient les spcifications pour une extension
  temporelle au langage SQL-92 standard. Ce nouveau langage est appel
  TSQL2.

  Les spcifications du langage prsentes ici correspondent  la
  version finale du langage.

  La correspondance doit tre adresse au bureau du Comit de Conception
  du Langage TSQL2, Richard T.Snodgrass, Department of Computer Science,
  University of Arizona, Tucson, AZ 85721,

    rts@cs.arizona.edu

     Les affiliations et les adresses lectroniques des membres du
     Comit de Conception du langage TSQL2 peuvent tre trouves, dans
     un chapitre spar,  la fin des spcifications du langage.

  Le contenu du rpertoire est le suivant :

  spec.dvi,.ps    Spcifications du langage TSQL2, publi en Septembre,
  1994

  bookspec.ps     Spcifications du langage TSQL2, telles qu'elles
  apparaissent dans le livre sur TSQL2, publi en Septembre, 1995 (voir
  ci-dessous).

  sql3            proposition de modification soumise au comits ANSI et
  ISO SQL3.

  Un ensemble de commentaires, associs aux spcifications du langage,
  parle des dcisions de conception, fournit des exemples, et traite de
  la faon dont le langage peut tre implant. Ces commentaires sont, 
  l'origine, des propositions faites au Comit de Conception du Langage
  TSQL2. Ils poursuivent actuellement un objectif diffrent: fournir des
  exemples de syntaxe, expliquer les nombreuses dcisions prises durant
  la conception du langage, et comparer TSQL2 aux nombreuses autres
  propositions de langage faites au cours des quinze dernires annes.
  Il faut insister sur le fait que ces commentaires ne font pas partie
  intgrante des spcifications du langage TSQL2 en lui-mme, mais
  plutt qu'elles le compltent et constituent un apport. Le mot de la
  fin est donn par les spcifications de TSQL2 proprement dit.

  Les commentaires, ainsi que les spcifications du langage, plusieurs
  index, et d'autres lments de support ont t publis dans un livre :

  Snodgrass, R.T., diteur, The TSQL2 Temporal Query Language, (Le
  Langage de  Requtes Temporel TSQL2) Kluwer Academic Publishers, 1995,
  674+xxiv pages.

  Les commentaires d'valuation sont donns sous forme abrge dans le
  livre; La totalit des commentaires est fournie dans le fichier
  eval.ps situ dans ce rpertoire

  Le fichier tl2tsql2.pl est un programme prolog qui traduit la logique
  temporelle autorise en TSQL2. Ce programme a t crit par Michael
  Boehlen

    boehlen@iesd.auc.dk

     On peut le contacter pour obtenir un papier qui dcrit cette
     traduction.  C'est une version tout  fait ancienne du programme.
     Les nouvelles versions sont disponibles 

    <http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software>

     (the TimeDB and Tiger systems).

  2244..99..  PPaarrttiiee 00 -- AAccqquuiissiittiioonn ddeess DDooccuummeennttss IISSOO//AANNSSII SSQQLL

  Ce document vous explique comment acqurir (lgalement) une copie de
  la norme SQL-92 et comment acqurir une copie du Brouillon de Travail
  du SQL3 "actuel".

  La norme ANSI est protge par un copyright de l'ANSI, et la norme ISO
  par un copyright de l'ISO.

  Il y a deux (2) normes SQL courantes, une  publication ANSI et une
  publication ISO. Les deux normes sont identiques mot-pour-mot except
  pour quelques sujets triviaux tel que le titre du document, les en-
  tte de page, la phrase "International Standard" au lieu de "American
  Standard", et ainsi de suite.

  Achat du Standard SQL-92

  La norme ISO, ISO/IEC 9075:1992, Information Technology - Database
  Languages - SQL, est actuellement (Mars, 1993) disponible et en stock
   l'ANSI :





       American National Standards Institute
       1430 Broadway
       New York, NY 10018 (USA)
       Phone (sales): +1.212.642.4900




  au prix de US$ 230.00. La version ANSI, ANSI X3.135-1992, American
  National Standard for Information Systems - Database Language SQL,
  n'tait pas disponible en stock au moment de la rdaction, mais il
  devrait l'tre entre fin Mars et dbut Mai, 1993). Il devrait coter
  US$ 225.00.

  Si vous achetez l'un ou l'autre document  l'ANSI, il y aura un
  supplment de 7% pour le traitement (soit environ US$ 9.10). Les frais
  d'envoi  l'tranger accrotront sans doute le cot. ANSI exige des
  socits un document de commande crit pour chaque commande; d'un
  autre ct, vous pouvez envoyer un chque tir sur une banque US en
  dollars US, qu'ils encaisseront avant d'expdier votre commande. (Il y
  a une exception : si votre organisation est membre de l'ANSI, alors
  l'ANSI enverra les documents et une facture  votre compagnie.)

  La norme ISO est aussi disponible en dehors des tats-Unis  partir de
  reprsentations nationales locales (entits de standardisation du
  pays) qui sont membres soit de l'ISO (International Organization for
  Standardization) soit de l'IEC (International Electrotechnical
  Commission). Des copies de la liste des reprsentations nationales,
  avec leurs adresses, sont disponibles de l'ANSI ou d'autres entits
  nationales.  Ils sont aussi disponibles  l'ISO :


            International Organization for Standardization
            Central Secretariat
            1, rue de Varembi
            CH-1211 Genve 20
            Switzerland




  Si vous prfrez commander la norme d'une faon plus facile et plus
  rapide, il vous faudra payer pour ce privilge. Vous pouvez commander
  le ISO/IEC 9075:1992, Information Technology - Database Languages -
  SQL,  :


            Global Engineering Documents
            2805 McGaw Ave
            Irvine, CA 92714 (USA)
            USA
            Tlphone (accessible de partout): +1.714.261.1455
            Tlphone (uniquement aux USA): (800)854-7179




  pour un prix de US$ 308.00. Je ne sais pas si le port est compris ou
  non, mais je parierais que l'envoi international (au moins) sera en
  supplment.  Ils peuvent vous envoyer un document trs rapidement et
  acceptent mme les "plus grandes cartes de crdit". Global n'a pas
  encore la version ANSI pas plus qu'un prix ou qu'une date prvisible
  de disponibilit (bien que je l'attende dans les quelques semaines
  suivant la publication par l' ANSI et  un prix aux alentours de US$
  300.00).

  Achat d'une copie du Document de Travail SQL3

  Vous pouvez acheter une copie du document de travail SQL3 au
  secrtariat de l'ANSI X3, CBEMA (Computer and Business Equipment
  Manufacturers Association). Leur objectif est d'avoir la "plus
  rcente" version du document de travail de SQL3 disponible et de la
  vendre pour environ US$ 60.00  US$ 65.00.  Vous pouvez contacter
  CBEMA :


            CBEMA, X3 Secretariat
            Attn: Lynn Barra
            1250 Eye St.
            Suite 200
            Washington, DC 20005 (USA)




  Lynn Barra peut aussi tre contacte par tlphone au +1.202.626.5738
  pour une demande de copie, bien qu'un courrier soit probablement plus
  courtois.

  Accs lectronique au Document de Travail SQL3

  La plus rcente version ( la date de rdaction) du document de
  travail SQL3 ( la fois ANSI et ISO, et de toutes ses parties) est
  disponible par "ftp anonyme" ou par "ftpmail" sur:


            gatekeeper.dec.com

         dans

            /pub/standards/sql/




  Dans ce rpertoire , il y a de nombreux fichiers.  Ce sont des
  fichiers PostScript et "texte ordinaire" (pas trs bien formats, mais
  lisibles sur un cran sans logiciel spcifique).

  En gnral, vous pouvez trouver des fichiers avec des noms tels que :


            sql-bindings-mar94.ps
            sql-bindings-mar94.txt
            sql-cli-mar94.ps
            sql-cli-mar94.txt
            sql-foundation-mar94.ps
            sql-foundation-mar94.txt
            sql-framework-mar94.ps
            sql-framework-mar94.txt
            sql-psm-mar94.ps
            sql-psm-mar94.txt




  A mesure que de nouvelles versions des documents sont produites le
  "mar94" changera pour indiquer la nouvelle date de publication (e.g.,
  "aug94" est la date attendue de la prochaine publication suivant
  "mar94").


  De plus, pour les lecteurs ne pouvant pas obtenir une liste de
  rpertoire par FTP, nous avons ajout un fichier ayant pour nom :


            ls




  dans le mme rpertoire.  Ce fichier (surprise!) contient une liste du
  rpertoire.

  Rcuprer les Fichiers Directement par Ftp

  Voici un exemple sur la faon d'utiliser FTP. Spcifiquement, il
  montre comment se connecter  gatekeeper.dec.com, aller au rpertoire
  o le document de base est gard et  transfrer ce document sur votre
  machine. Notez que votre machine doit pouvoir accder  l'internet
  pour faire cela. Le nom de connexion est 'ftp' et le mot de passe est
  votre adresse e-mail (on appelle quelquefois cela 'ftp anonyme'). La
  commande 'type binaire' est utilise pour s'assurer qu'aucuns bits ne
  seront supprims du (des) fichier(s) reu(s). La commande 'get'
  rcupre un fichier  la fois.  Les commentaires dans le script ci-
  dessous sont placs entre les signes < ... >, < comme ceci > .


         % ftp gatekeeper.dec.com
         Connected to gatekeeper.dec.com.
         220- *** /etc/motd.ftp ***
              Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research.
              <...il en va ainsi pendant un certain temps...>
         220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready.
         Name (gatekeeper.dec.com:<votre nom de connexion ici>): ftp  <anonyme fonctionne galement>
         331 Guest login ok, send ident as password.
         Password: <entrez votre adresse e-mail ici>
         230 Guest login ok, access restrictions apply.
         Remote system type is UNIX.  <ou autre>
         Using binary mode to transfer files.
         ftp> cd pub/standards/sql
         250 CWD command successful.
         ftp> dir
         200 PORT command successful.
         150 Opening ASCII mode data connection for /bin/ls.
         total 9529
         -r--r--r--  1 root     system     357782 Feb 25 10:18 x3h2-93-081.ps
         -r--r--r--  1 root     system     158782 Feb 25 10:19 x3h2-93-081.txt
         -r--r--r--  1 root     system     195202 Feb 25 10:20 x3h2-93-082.ps
         -r--r--r--  1 root     system      90900 Feb 25 10:20 x3h2-93-082.txt
         -r--r--r--  1 root     system    5856284 Feb 25 09:55 x3h2-93-091.ps
         -r--r--r--  1 root     system    3043687 Feb 25 09:57 x3h2-93-091.txt
         226 Transfer complete.
         ftp> type binary
         200 Type set to I.
         ftp> get x3h2-93-082.txt
         200 PORT command successful.
         150 Opening BINARY mode data connection for x3h2-93-082.txt (90900 bytes).
         226 Transfer complete.
         90900 bytes received in 0.53 seconds (166.11 Kbytes/s)
         ftp> quit
         % <le fichier est maintenant dans votre rpertoire sous le nom x3h2-93-082.txt>




  Rcupration de Fichiers Sans Faire un ftp Direct

  Digital Equipment Corporation, comme plusieurs autres compagnies,
  fournit un service de ftp par courrier lectronique. La rponse peut
  prendre plusieurs jours, mais cela fournit un service quivalent  ftp
  pour ceux qui n'ont pas un accs direct au ftp par Internet.
  L'adresse du serveur est:

  ftpmail@decwrl.dec.com

  Le script suivant rcuprera la dernire version PostScript du
  document SQL3 :


            reply joe.programmer@imaginary-corp.com
            connect gatekeeper.dec.com anonymous
            binary
            compress




  Le script suivant rcuprera la dernire version PostScript du docu
  ment SQL3 :


            reply joe.programmer@imaginary-corp.com
            connect gatekeeper.dec.com anonymous
            binary
            compress
            uuencode
            chdir /pub/standards/sql
            get x3h2-93-091.ps
            quit




  La premire ligne du script commande au serveur de vous retourner les
  fichiers demands; vous devrez remplacer "joe.programmer@imaginary-
  corp.com" par votre adresse Internet.  Le fichier x3h2-93-091.ps, dans
  cet exemple, est retourn sous forme de 34 messages e-mail spars,
  "compresss" et "uuencods". Si votre environnement ne dispose pas des
  outils pour reconstruire de tels fichiers, alors, il vous faudra
  rcuprer le fichier sous forme de texte pur en utilisant le script
  suivant:


            reply joe.programmer@imaginary-corp.com
            connect gatekeeper.dec.com anonymous
            chdir /pub/standards/sql
            get x3h2-93-091.ps
            quit




  Mais, attention, le fichier .ps vous sera probablement envoy en plus
  de 70 morceaux!

  Pour rcuprer un fichier particulier, autre que x3h2-93-091.ps,
  remplacez simplement "x3h2-93-091.ps" par le nom du fichier dsir.
  Pour obtenir la liste de tous les fichiers disponibles dans un
  rpertoire, remplacez "get x3h2-93-091.ps" par "dir".




  2244..1100..  PPaarrttiiee 11 -- EEttaatt AAccttuueell ddee ll''IISSOO//AANNSSII SSQQLL

  Ce chapitre constitue une source d'information  propos du processus
  de normalisation de SQL et de son tat actuel.

  tat Actuel

  Le dveloppement pour amliorer SQL afin d'en faire un langage complet
  pour la dfinition et la gestion d'objets persistants et complexes.
  Ceci comprend : les hirarchies de gnralisation et de
  spcialisation, l'hritage multiple, les types de donnes dfinies par
  l'utilisateur, les dclencheurs et les assertions, le support des
  systmes  base de connaissances, les requtes rcursives, et des
  outils complmentaires d'administration de donnes. Cela inclue
  galement la spcification des types de donnes abstraits (ADTs), des
  identificateurs d'objets, des mthodes, de l'hritage, du
  polymorphisme, de l'encapsulation et de tous les autres moyens
  normalement associs  la gestion d'objets.

  A l'automne 1996, plusieurs parties de SQL3 ont t soumises  un vote
  de l'ISO CD. Ce sont SQL/Framework, SQL/Foundation et SQL/Bindings.
  Ce vote choua (comme prvu) avec environ 900 commentaires. Fin
  Janvier, un comit de rdaction traita un grand nombre de solutions
  aux problmes qui furent soit incluses avec les commentaires du vote
  ou soumises en tant que documents spars. Depuis le comit de
  rdaction DBL n'a pas pu traiter tous les commentaires et sa dure a
  t augmente. La fin du comit de rdaction est prvue pour la fin
  Juillet 1997,  Londres.


  A la suite du comit de rdaction de Juillet, on attend qu'un vote
  final du CD soit demand pour ces parties de SQL. Le processus du CD
  Final prendra environ 6 mois et un comit de rdaction du DBL, aprs
  lesquels il y aura un vote IS et un trs rapide vote IS.

  Les procdures ISO ont chang depuis SQL/92, et les comits SQL
  travaillent encore selon les rgles du processus.

  Si tout va bien, ces parties du SQL3 deviendront une norme officielle
  ISO/IEC en fin 1998, mais le programme est trs serr.

  En 1993, les comits de dveloppement ANSI et ISO ont dcid de
  d'clater le dveloppement futur de SQL en une norme multi-parties.
  Ces parties sont :


    Partie 1: Structure Description non technique de la manire dont le
     document doit tre structur.

    Partie 2: Base Spcifications de base, incluant toutes les
     nouvelles fonctionnalits ADT.

    Partie 3: SQL/CLI Interface du niveau appel (Call Level Interface).

    Partie 4: SQL/PSM Spcifications des procdures enregistres

    Partie 5: SQL/Bindings SQL Dynamique et SQL Embedded SQL liens
     venant de SQL-92.

    Partie 6: SQL/XA Une spcialisation de l'interface populaire XA
     dveloppe par X/Open

    Partie 7:SQL/Temporal Ajoute les capacits lies au temps  la
     norme SQL.


  Aux  USA, la totalit de SQL3 est en cours de traitement  la fois
  comme projet ("D") national et comme projet ISO. La fin de SQL3 est
  attendue pour courant 1999.

  Le SQL/CLI et le SQL/PSM sont en cours de traitement aussi rapidement
  que possible comme addenda  SQL-92. Aux USA, ils sont traits
  uniquement comme projet International. SQL/CLI a t termin en 1995.
  SQL/PSM devrait tre termin fin 1996.

  En plus du travail sur SQL3, quelques projets additionnels sont
  poursuivis :


    SQL/MM Un effort en cours pour dfinir une norme multi-media
     utilisant les possibilits de SQL3 ADT.

    Accs aux donnes  distance (RDA)

  Comits et Processus de Standardisation

  Il y a effectivement de nombreux comits de normalisation de par le
  monde. Il y a un groupe international de normalisation SQL faisant
  partie de l'ISO. Un certain nombre de pays on des comits qui se
  consacrent  SQL. Ces pays (habituellement) envoient des reprsentants
  aux runions ISO/IEC JTC1/SC 21/WG3 DBL. Les pays qui participent
  activement au processus de normalisation ISO SQL sont :


    Australie

    Brsil

    Canada

    France

    Allemagne

    Japon

    Core

    Pays-Bas

    Angleterre

    tats-Unis

  Validation NIST

  Les implmentations SQL sont valides (aux tats-Unis) par le National
  Institute of Standards and Testing (NIST). Le NIST possde une suite
  de tests de validation pour le niveau de base SQL-92. Les dtails
  exacts des exigences de la validation NIST sont dfinis comme un
  Federal Information Processing Standard (FIPS). Les exigences
  actuelles pour SQL sont dfinies dans le document FIPS 127-2. Les
  versions Postscript et Texte de ce document peuvent tre obtenues au
  NIST. La Liste des Produits Valids  jour peut galement tre obtenue
  au NIST.

  Publications et Articles sur le Standard SQL

  Il y a deux versions de la norme SQL. Les deux sont disponibles 
  l'ANSI:


    ISO/IEC 9075:1992, "Information Technology --- Database Languages
     --- SQL"

    ANSI X3.135-1992, "Database Language SQL"

  Les deux versions de la norme SQL sont identiques sauf la page de
  garde et les rfrences aux autres normes. Les deux versions sont
  disponibles au :


            American National Standards Institute
            1430 Broadway
            New York, NY 10018
            USA
            Tlphone (ventes): +1.212.642.4900




  En supplment  la norme SQL-92, il y a maintenant un Technical Corri
  gendum (correction d'erreurs) :


          * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992




  Le TC 1 doit aussi tre disponible  l'ANSI. Il n'y a qu'une version
  du TC 1 -- qui s'applique  la fois aux versions ISO et ANSI de
  SQL-92.

  En supplment  ces normes, plusieurs livres ont t crits sur la
  norme SQL 1992. Ces livrent donnent une description bien plus lisible
  de la norme que celle donne par le norme elle-mme.

  Standards connexes

  Un certain nombre d'autres normes prsentent de l'intrt pour la
  communaut SQL. Cette section contient des pointeurs donnant des
  informations sur ces efforts. Ces pointeurs seront plus nombreux 
  mesure que des informations complmentaires seront disponibles sur le
  web.


    SQL Environnements (FIPS 193) - (Environnements SQL)

    Next Generation Repository Systems (X3H4) - (Systmes Dpositaires
     de la Prochaine Gnration) Une version des Nouvelles appelant 
     une participation au "Dveloppement des Standards pour les Systmes
     Dpositaires de la Prochaine Gnration."

  2244..1111..  PPaarrttiiee 22 -- FFoonnddeemmeennttss IISSOO//AANNSSII SSQQLL

  Une partie importante de l'effort pour SQL3 rside dans le document de
  base SQL :


    Capacits de Base SQL/PSM (venant de SQL/PSM-92)

    Nouveaux types de donnes

    Dclencheurs

    Sous-tables

    Types de Donnes Abstraits (ADT)

    Capacits Orientes Objets

  Il y a plusieurs pr-requis pour les capacits orientes objets :


    Capacit de pouvoir dfinir des oprations complexes

    Stockage des oprations complexes dans la base de donnes

    Appels de Procdures Externes  Quelques oprations peuvent ne pas
     exister dans SQL ou peuvent ncessiter des interactions externes

  Ces capacits sont dfinies comme faisant partie de SQL/PSM

  Une grande quantit de travail est en cours de ralisation pour
  affiner le modle objet SQL-3 et l'aligner sur le modle objet propos
  par l'ODMG. Cet effort est dcrit dans les papiers X3H2 et ISO DBL :
  Accommoder SQL3 et ODMG. Une mise  jour rcente sur le Fusionneur
  SQL3/OQL est galement disponible.

  Planification de SQL3

  Le travail sur SQL3 se poursuit normalement, mais la publication de la
  norme finale se situe encore  un horizon de plusieurs annes.


    Le vote International pour passer du Brouillon de Travail au
     Brouillon du Comit (CD) aura lieu  l'automne 1996.

    On s'attend  ce que le vote gnre de nombreux commentaires

    Un second vote sera probablement ncessaire

    Le vote pour le Brouillon du Standard International devrait avoir
     lieu  la mi-1998

    Le Standard International doit tre termin  la mi-1999.

     Le programme de la version ANSI sera similaire.

  2244..1122..  PPaarrttiiee 33 -- IInntteerrffaaccee dd''AAppppeell SSQQLL IISSOO//AANNSSII

  SQL/CLI est une interface de programmation d'appel pour les bases de
  donnes SQL.  Il est conu pour accder aux bases de donnes  partir
  d'applications fermes.  CLI a,  l'origine, t cr par un sous-
  comit du groupe SQL Access (SAG).  Les spcifications de SAG/CLI ont
  t publies, en 1992, en tant que spcifications Microsoft Open
  DataBase Connectivity (ODBC) en 1992. En 1993, le SAG a soumis le CLI
  aux comits ANSI et ISO SQL. (Le groupe "SQL Access Group" a
  maintenant t fusionn avec le consortium X/Open.)

  SQL/CLI fournit une norme internationale pour :


    Un CLI dpendant de l'implmentation pour accder aux bases de
     donnes SQL

    Des outils Client-serveur pour accder facilement  une base de
     donnes au moyen de Bibliothques de Lien Dynamique

    Supporter et encourager un riche ensemble d'outils Client-serveur

  Planification de SQL/CLI

  Le processus de normalisation de SQL/CLI se poursuit  une vitesse
  aveuglante.


    SQL/CLI est un addendum  la norme SQL de 1992 (SQL-92)

    Achev comme norme ISO en 1995

    ISO/IEC 9075-3:1995 Information technology -- Database languages --
     SQL -- Partie 3: Call-Level Interface (SQL/CLI)

    L'effort actuel porte sur l'ajout des fonctionnalits SQL3 
     SQL/CLI

  2244..1133..  PPaarrttiiee 44 -- MMoodduulleess MMmmoorriissss PPeerrssiissttaannttss IISSOO//AANNSSII SSQQLL

  SQL/PSM tend SQL en ajoutant :


    Des extensions de langage procdural

    Des procdures mmorises multi-instructions

    Des appels de procdures et de fonctions externes

  SQL/PSM apporte, en plus du fait d'tre un bon outil de dveloppement
  d'application, une base pour des fonctionnalits orientes objet dans
  SQL3.

  Procdures mmorises et multi-instructions

  Multi-instructions et procdures mmorises offrent une grande varit
  d'avantages dans un environnement client/serveur :


    Performance - Puisqu'une procdure mmorise peut effectuer de
     multiples instructions SQL, les interactions sur le rseau, avec le
     client, sont rduites.

    Scurit - On peut donner  un utilisateur le droit d'appeler une
     procdure mmorise qui met  jour une table ou un ensemble de
     tables mais lui refuser le droit de mettre  jour les tables
     directement

    Code partag - Le code d'une procdure mmorise n'a pas  tre
     rcrit ni re-test pour chaque outil d'un client qui accde  la
     base de donnes.

    Contrle - Fournit un point unique de dfinition et de contrle
     dans la logique de l'application.

  Extensions de Langage Procdural

  Le langage procdural ajoute la puissance d'un langage de
  programmation traditionnel  SQL grce  des instructions de contrle
  de flot et  d'autres constructions utilises en programmation.

  Instructions de contrle de flot


    If-then-else  (si-alors-sinon)

    Instructions de boucle

    Prise en compte de erreurs

    Instruction de choix multiple (Case)

    Blocks (Begin-End blocks)

  Les extensions de langage procdural comprennent d'autres
  constructions des langages de programmation :


    Dclaration des variables

    Instructions d'affectation de valeur

    Lecture de diagnostiques sur les processus et l'tat

  De plus, toutes les instructions SQL traditionnelles peuvent tre
  inclues dans de procdures multi-instructions.

  Appels de Fonctions et de Procdures externes

  Une fonctionnalit souvent mentionne dans la liste des souhaits pour
  de nombreuses base de donnes et produits et qui est implmente dans
  quelques-uns, est la capacit de pouvoir augmenter les fonctionnalits
  du logiciel de base de donnes d'origine par des appels  des
  procdures externes crites par les utilisateurs.


    Cela permet  un site ou a une application en particulier d'ajouter
     leurs propres fonctions base de donnes

    Peuvent tre utilises tout au long des applications bases de
     donnes

  Le bnfice de cette capacit est de donner accs, pour la base de
  donnes (et, par l, aux applications base de donnes),  un riche
  ensemble de procdures et de fonctions trop nombreuses pour tre
  dfinies par un comit de normalisation.

  Planification de SQL/PSM

  SQL/PSM volue rapidement :


    SQL/PSM est un addendum  SQL-92

    Un vote international pour faire passer SQL/PSM de Brouillon de
     Norme Internationale  Norme Internationale s'est achev en fin
     janvier 1996.

    Une runion de travail en mai 1996 n'a pas apport de solution 
     tous les commentaires

    La poursuite de la runion de travail du PSM est programme du 30
     septembre au 4 octobre 1996

    Le programme est serr, mais il y a des chances que le PSM le
     publie en 1996.

    Sa dsignation officielle sera : ISO/IEC DIS 9075-4:199?
     Information technology -- Database languages -- SQL -- Partie 4:
     SQL Persistent Stored Modules (SQL/PSM)

    L'ajout du support de SQL/PSM dans les fonctionnalits de SQL3 est
     en bonne voie.



  2244..1144..  PPaarrttiiee 55 -- IISSOO//AANNSSII SSQQLL//LLiieennss

  Pour en faciliter l'accs, la description des liens avec le langage de
  programmation a t mise dans un document spar. La version actuelle
  consiste simplement en un extrait concernant les liens dynamiques et
  intgrs de SQL-92.

  Un certain nombre de sujets concernant les liens avec le langage de
  programmation restent en suspens.

  Pour les langage de programmation traditionnels, il existe des
  transformations pour les types de donnes de SQL-92. Cependant, des
  transformations doivent tre dfinis entre les objets SQL et les
  variables des langages de programmation.

  Pour les langages orients objets, la transformation doit tre dfinie
  pour les types de donnes courants SQL et entre le modle objet SQL et
  le modle objet du langage orient objet.

  Le modle objet doit se stabiliser avant de rsoudre ces problmes.

  Les liens avec le langage feront partie intgrante de SQL3.

  2244..1155..  PPaarrttiiee 66 -- IInntteerrffaaccee ddee SSppcciiaalliissaattiioonn ((SSQQLL//XXAA)) IISSOO//AANNSSII SSQQLL
  XXAA))

  Cette spcification devrait normaliser l'interface de programmation
  d'application (API) entre un Gestionnaire de Transaction global et le
  Gestionnaire de Ressources SQL. Il devrait normaliser les appels de
  fonction, en s'appuyant sur la smantique de l'ISO/IEC 10026,
  "Distributed Transaction Processing", qu'un Gestionnaire de Ressources
  SQL devrait supporter pour la validation en deux phases. Le document
  de base est driv d'une publication de l'X/Open, avec sa permission,
  qui spcifie explicitement les paramtres d'entre, de sortie et la
  smantique, en termes de types de donnes SQL, pour les fonctions
  suivantes : xa_close, xa_commit, xa_complete, xa_end, xa_forget,
  xa_open, xa_prepare, xa_recover, xa_rollback, et xa_start.

  ISO essaye actuellement de coller aux spcifications XA de l'X/Open.
  Ce processus de suivi, au plus prs, consiste  adopter les
  spcifications de l'industrie sans changements. Le vote pour l'XA 
  l'ISO SC21, JTC 1 a dbut le 27 avril 1995 et se termine le 27
  octobre 1995. Si les spcifications XA sont approuves par 75% des
  votants, et par 2/3 des membres participants de JTC 1, cela deviendra
  une Norme Internationale. Si le vote est approuv, SQL/XA pourrait
  devenir une norme en 1996.

  2244..1166..  PPaarrttiiee 77 -- IISSOO//AANNSSII SSQQLL TTeemmppoorreell

  Le SQL Temporel traite des donnes en relation avec le temps.
  Conceptuellement, cela consiste  dire qu'il est utile d'aller
  chercher des donnes pour dcouvrir l'allure qu'elles avaient  un
  certain moment. L'origine du SQL Temporel rside dans un papier de
  dcembre 1994 de Rick Snodgrass qui en dcrivait les concepts.

  X3 Annonce l'Approbation d'un Nouveau Projet, ISO/IEC 9075 Partie 7 :
  SQL/Temporel est un communiqu de presse concernant le SQL/Temporel.


       ----------------------------------------------------------------------------
                                       SQL Temporel
                                       ************
       Rick Snodgrass (Prsident du comit TSQL2)
       31-Dec-1994


  Plusieurs personnes se sont pos la question de la ncessit de la
  prise en charge de la gestion du temps dans SQL3 (comme cela a t
  propos par DBL RIO-75, demandant qu'une nouvelle partie de SQL prenne
  en charge les bases de donnes temporelles). Le sentiment est que les
  types de donnes abstraits (ADT) sont suffisants pour grer les ques
  tions de temps. Dans ce papier, je dmontre, par des exemples con
  crets, que l'utilisation de colonnes types, avec des types de donnes
  abstraits, est inadapte pour des requtes temporelles.  En partic
  ulier, beaucoup de requtes temporelles courantes sont soit difficiles
   simuler en SQL, soit ncessitent d'intgrer SQL dans un langage
  procdural. Des solutions alternatives sont exposes dans TSQL2, une
  extension temporelle  SQL-92.

  2244..1166..11..  IINNTTRROODDUUCCTTIIOONN

  La prise en charge d'un instant de validit va au-del de celle de
  types de donnes temporels abstraits (ADT temporel). Avec ce dernier,
  on spcifie qu'une colonne sera celle consacre au domaine temporel,
  tel que la DATE ou un INTERVALLE (je donnerai des exemples bientt).
  Avec un instant de validit, les lignes d'une table varient en
  fonction du temps, refltant les modifications de la ralit. Le
  timbre dateur associ  une ligne d'une table  instant de validit
  est interprt par le langage d'interrogation comme l'instant o la
  combinaison des valeurs dans les colonnes d'une ligne tait valide.
  Ce timbre dateur implicite permet d'exprimer des requtes de manire
  simple et intuitive.

  2244..1166..22..  TTUUDDEE DDEE CCAASS -- EENNRREEGGIISSTTRREEMMEENNTT DDEE LL''IINNFFOORRMMAATTIIOONN CCOOUURRAANNTTEE

  Le bureau du personnel (BP) salari de l'universit de l'Arizona
  possde un certain nombre d'informations, dans une base de donnes,
  dont le nom de chaque employ, son salaire actuel ainsi que son titre.
  On peut reprsenter cela dans une simple table.


               Employee(Name, Salary, Title)




  tant donn cette table, retrouver le salaire d'un employ est une
  opration aise.


               SELECT Salary
               FROM Employee
               WHERE Name = 'Bob'




  Maintenant, le BP souhaite enregistrer les dates de naissance. Pour ce
  faire, on ajoute une colonne  la table, ce qui donne le schma suiv
  ant.


               Employee(Name, Salary, Title, DateofBirth DATE)




  Retrouver la date de naissance d'un employ est analogue  retrouver
  son salaire.



          SELECT DateofBirth
          FROM Employee
          WHERE Name = 'Bob'




  2244..1166..33..  TTUUDDEE DDEE CCAASS -- EENNRREEGGIISSTTRREEMMEENNTT DDEE LL''IINNFFOORRMMAATTIIOONN HHIISSTTOORRIIQQUUEE

  Le BP souhaite informatiser l'historique de l'emploi. Pour ce faire,
  ils ajoutent deux colonnes, l'une pour indiquer quand l'information
  contenue dans le ligne est devenue valide, l'autre indiquant la fin de
  validit de cette information.

  Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)

  Pour le modle de donnes, ces nouvelles colonnes sont identiques  la
  date de naissance. Cependant, leur prsence  des consquences 
  grande chelle.

  2244..1166..44..  TTUUDDEE DDEE CCAASS -- PPRROOJJEECCTTIIOONN

  Pour trouver le salaire actuel d'un salari, les choses sont plus
  difficiles.


               SELECT Salary
               FROM Employee
               WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop




  Cette requte est plus complique que la prcdente. Le coupable se
  situe, de toute vidence, dans ces deux nouvelles colonnes. Le BP veut
  fournir  chaque employ l'historique de leur salaire. Pour chaque
  personne, spcifiquement, il est ncessaire de dterminer les inter
  valles correspondants  chacun des salaires. Malheureusement, cela
  n'est pas possible en SQL. Un employ peut avoir un nombre arbitraire
  de changements de titre entre deux changements de salaire.


       Name    Salary  Title             DateofBirth   Start           Stop
       ----    ------  -----             -----------   -----           ----
       Bob     60000   Assistant Provost 1945-04-09    1993-01-01      1993-05-30
       Bob     70000   Assistant Provost 1945-04-09    1993-06-01      1993-09-30
       Bob     70000   Provost           1945-04-09    1993-10-01      1994-01-31
       Bob     70000   Professor         1945-04-09    1994-02-01      1994-12-31

                                      Figure 1




  Notez qu'il y a trois lignes pour lesquelles le salaire de Bob reste
  constant  $ 70,000. De l, le rsultat sera de deux lignes pour Bob.


       Name    Salary  Start           Stop
       ----    ------  -----           ----
       Bob     60000   1993-01-01      1993-05-30
       Bob     70000   1993-06-01      1994-12-31




  Une alternative est de donner  l'utilisateur une dition des informa
  tions Salaire et Titre, et de laisser l'utilisateur dterminer quand
  son salaire a chang. Cette alternative n'est ni trs attirante ni
  trs raliste. Une seconde alternative est d'utiliser SQL autant que
  possible.


       CREATE TABLE Temp(Salary, Start, Stop)
       AS      SELECT Salary, Start, Stop
               FROM Employee;




  rpter


               UPDATE Temp T1
               SET (T1.Stop) = (SELECT MAX(T2.Stop)
                                FROM Temp AS T2
                                WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                       AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
               WHERE EXISTS (SELECT *
                             FROM Temp AS T2
                             WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                       AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
               jusqu' ce qu'aucune ligne ne soit mise  jour;

       DELETE FROM Temp T1

       WHERE EXISTS (SELECT *
                     FROM Temp AS T2
                     WHERE T1.Salary = T2.Salary
                               AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop)
                               OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop))




  La boucle trouve des intervalles qui se chevauchent ou sont adjacents
  et, doivent donc tre fusionns. La boucle est excute log N fois
  dans le pire des cas, o N est le nombre de lignes dans une chane de
  lignes de valeur quivalente qui se chevauchent ou sont adjacentes. Le
  lecteur peut simuler cette requte sur la table de l'exemple pour se
  convaincre de sa vrit.

  Une troisime alternative consiste  utiliser SQL uniquement pour
  ouvrir un curseur sur la table. Une liste chane de priodes est
  entretenue, chacune avec un salaire. La liste chane doit tre
  initialise vide.


       DECLARE emp_cursor CURSOR FOR
               SELECT Salary, Title, Start, Stop
               FROM Employee;
       OPEN emp_cursor;
       boucle:
               FETCH emp_cursor INTO :salary, :start, :stop;
               si pas-de-donnes est retourn alors aller  fin;
               trouver la position dans la liste chane pour insrer cette information;
               aller  boucle;
       fin:
       CLOSE emp_cursor;



  Rpter tout au long de la liste chane, dition des dates et des
  salaires

  La liste chane peut ne pas tre ncessaire au cas o le curseur est
  ORDER BY Start.

  Dans tous les cas, la requte, tout ce qu'il y a de naturelle, est
  tout  fait difficile  exprimer en utilisant les possibilits
  offertes par SQL-92. La requte est triviale en TSQL2.


               SELECT Salary
               FROM Employee




  2244..1166..55..  TTUUDDEE DDEE CCAASS -- JJOOIINNTTUURREE

  Une approche plus drastique consiste  viter le problme d'extraction
  de l'historique du salaire en rorganisant le schma pour sparer les
  informations de salaire, de titre, et de date de naissance (dans ce
  qui suit, nous ignorerons la date de naissance pour raison de
  simplicit).


               Employee1 (Name, Salary, Start DATE, Stop DATE)
               Employee2 (Name, Title, Start DATE, Stop DATE)




  La table Employee1 est la suivante.


       Name    Salary  Start           Stop
       ----    ------  -----           ----
       Bob     60000   1993-01-01      1993-05-30
       Bob     70000   1993-06-01      1993-12-31




  Voici un exemple de la table Employee2.


       Name    Title                   Start           Stop
       ----    ------                  -----           ----
       Bob     Assistant Provost       1993-01-01      1993-09-30
       Bob     Provost                 1993-10-01      1994-01-31
       Bob     Professor               1994-02-01      1994-12-31




  Avec cette modification, aller chercher l'information de salaire d'un
  employ devient maintenant facile.


               SELECT Salary, Start, Stop
               FROM Employee1
               WHERE Name = 'Bob'




  Mais qu'en est-il si le BP veut une table des salaires, des inter
  valles de titre (c'est--dire, supposons que le BP veuille qu'une
  table soit calcule dans la forme de la Figure 1)? Une alternative est
  d'diter les deux tables, et de laisser l'utilisateur en calculer les
  combinaisons. Une seconde alternative est d'utiliser entirement SQL.
  Malheureusement, cette requte doit faire une tude de cas sur la
  manire dont chaque ligne de Employee1 se chevauche avec chaque ligne
  de Employee2; il y a quatre cas possibles.


       SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee1.Stop
       FROM Employee1, Employee2
       WHERE Employee1.Name = Employee2.Name
            AND Employee2.Start <= Employee1.Start AND Employee1.Stop < Employee2.Stop
       UNION
       SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee2.Stop
       FROM Employee1, Employee2
       WHERE Employee1.Name = Employee2.Name
            AND Employee1.Start >= Employee2.Start AND Employee2.Stop < Employee1.Stop
               AND Employee1.Start < Employee2.Stop
       UNION
       SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee1.Stop
       FROM Employee1, Employee2
       WHERE Employee1.Name = Employee2.Name
            AND Employee2.Start > Employee1.Start AND Employee1.Stop < Employee2.Stop
               AND Employee2.Start < Employee1.Stop
       UNION
       SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee2.Stop
       FROM Employee1, Employee2
       WHERE Employee1.Name = Employee2.Name
            AND Employee2.Start > Employee1.Start AND Employee2.Stop < Employee1.Stop




  Prendre en compte, d'une faon correcte, tous les cas constitue une
  tche qui relve du challenge. En TSQL2, raliser une jointure tem
  porelle correspond simplement  ce que l'on peut esprer.


               SELECT Employee1.Name, Salary, Dept
               FROM Employee1, Employee2
               WHERE Employee1.Name = Employee2.Name




  2244..1166..66..  TTUUDDEE DDEE CCAASS -- AAGGRRGGAATTSS

  Maintenant, on demande au BP quel est le salaire maximum ? Avant
  d'ajouter les donnes de temps, c'tait facile.


               SELECT MAX(Salary)
               FROM Employee




  Maintenant que l'historique du salaire est enregistr, nous obtien
  drons quelque chose comme l'historique du salaire maximum  travers le
  temps. Le problme est que, naturellement, SQL ne fournit pas
  d'agrgats temporels. Le moyen simple de raliser cela consiste 
  diter l'information, et  chercher,  la main, le maximum. Une alter
  native consiste  tre plus astucieux et  convertir l'instantan de
  la requte agrge en une requte non agrge, puis  convertir le
  rsultat en requte temporelle. La requte non agrge retrouve les
  salaires pour lesquels un salaire plus lev n'existe pas.


               SELECT Salary
               FROM Employee AS E1
               WHERE NOT EXISTS (SELECT *
                                 FROM Employee AS E2
                                 WHERE E2.Salary > E1.Salary)




  Convertir cette requte en une requte temporelle est loin d'tre
  vident. Ce qui suit constitue une approche possible.


       CREATE TABLE Temp (Salary, Start, Stop)
       AS      SELECT Salary, Start, Stop
               FROM Employee;
       INSERT INTO Temp
               SELECT T.Salary, T.Start, E.Start
               FROM Temp AS T, Employee AS E
               WHERE E.Start >= T.Start AND E.Start < T.Stop AND E.Salary > T.Salary;

       INSERT INTO Temp
               SELECT T.Salary, T.Stop, E.Stop
               FROM Temp AS T, Employee AS E
               WHERE E.Stop > T.Start AND E.Stop <= T.Stop AND E.Salary > T.Salary;
       DELETE FROM Temp T
       WHERE EXISTS (SELECT *
                     FROM Employee AS E
                     WHERE ((T.Start => E.Start AND T.Start < E.Stop)
                               OR (E.Start >= T.Start AND E.Start < T.Stop))
                           AND E.Salary > T.Salary;




  Cette approche cre une table auxiliaire. Nous ajoutons  cette table
  la priode infrieure soustraite d'une priode et la partie suprieure
  soustraite d'une priode. Nous supprimons alors toutes les priodes
  qui se chevauchent avec une ligne dfinie dans la sous-requte, de ce
  fait ralisant le NOT EXISTS(n'existe pas). Finalement nous gnrons 
  partir de la table auxiliaire les priodes maximales, de la mme faon
  que l'information de salaire avait t calcule ci-dessus. Comme on
  peut l'imaginer, un tel code SQLest extrmement inefficace 
  l'excution, compte tenu des requtes complexes imbriques contenant
  des prdicats d'ingalit.

  Une troisime alternative consiste  utiliser le moins possible SQL,
  et plutt de calculer le maximum dsir dans un langage hte en
  utilisant des curseurs.

  La requte en TSQL2 est de nouveau simple et intuitive.


               SELECT MAX(Salary)
               FROM Employee







  2244..1166..77..  RRSSUUMM

  Dans la plupart des applications de base de donnes on manipule des
  donnes qui changent en fonction du temps. La prise en compte de
  l'instant de validit est absente de SQL. Beaucoup de requtes
  temporelles ordinaires sont difficiles  simuler en SQL, ou requirent
  du SQL intgr dans un langage procdural, ceci tant d au manque de
  support des tables avec instant de validit dans son modle de donnes
  et dans la structure des requtes.

  Ailleurs, nous avons montr que l'ajout du support de l'instant de
  validit ne requiert que peu de modifications dans l'implmentation
  des SGDB, peut radicalement simplifier un certain nombre de requtes
  et en permettre d'autres, et peut, plus tard, permettre des
  optimisations dans les structures de mmoires, les mthodes
  d'indexation et les stratgies d'optimisation qui peuvent entraner
  des amliorations notables dans les performances.

  Avec une nouvelle partie de SQL3 supportant les informations qui
  varient avec le temps, permettant une meilleure gestion des donnes
  temporelles par SQL3, nous pouvons commencer  apporter une rponse 
  de telles application.


       ----------------------------------------------------------------------------
                  Comit de Normalisation Accrdit* X3, Technologie de L'Information
       COMMUNIQUE

       Doc. No.:       PR/96-0002

       Reply to:       Barbara Bennett at bbennett@itic.nw.dc.us

                    X3 Annonce l'approbation d'un Nouveau Projet, ISO/IEC

                                9075 Partie 7:  SQL/Temporal

       Washington D.C., Janvier 1996
       ----------------------------------------------------------------------------




  -- Le Comit de Normalisation Accrdit X3, Technologie de l'Informa
  tion, annonce l'approbation d'un nouveau projet concernant le support
  de SQL/Temporel , ISO/IEC 9075 Partie 7, le travail devant tre
  ralis au sein du Comit Technique X3H2, Bases de Donnes.  Cette
  proposition de norme concerne un nouvelle partie de la norme naissante
  SQL3, e.g., Partie 7, SQL Temporel, et spcifie les extensions au lan
  gage SQL pour grer le stockage, l'extraction et la manipulation des
  donnes temporelles dans un environnement de base de donnes SQL.

  La prochaine runion du comit X3H2 est planifi pour la priode du 11
  au 14 Mars 1996 dans le Kansas.

  Les questions concernant ce projet doivent tre envoyes au prsident
  de X3H2 :


               Chairman of X3H2,
               Dr. Donald R. Deutsch,
               Sybase, Inc., Suite 800,
               6550 Rock Spring
               Drive, Bethesda, MD  20817.
               Email: deutsch@sybase.com.


  Un appel initial pour de possibles brevets ou autres sujets pertinents
  (copyrights, trademarks) est sur le point d'tre mis. Soumettez, s'il
  vous plat, les informations  ce propos au secrtariat de X3  :


               X3 Secretariat
               1250 Eye Street
               NW, Suite 200,
               Washington DC  20005.
               Email: x3sec@itic.nw.dc.us
               FAX:  (202)638-4922.




  2244..1177..  PPaarrttiiee 88 -- SSQQLL MMUULLTTIIMMEEDDIIAA IISSOO//AANNSSII ((SSQQLL//MMMM))

  Un nouveau projet international de normalisation ISO/IEC pour le
  dveloppement d'une bibliothque de classe SQL pour les applications
  multi-media a t approuv dbut 1993. Cette nouvelle activit de
  normalisation, appele SQL Multi-media (SQL/MM), spcifiera les
  paquetages de dfinition de types de donnes abstraites SQL (ADT) en
  utilisant les fonctions fournies dans les spcifications SQL3
  naissantes pour ADT.  SQL/MM a pour objectif de normaliser des
  bibliothques de classes pour la science et l'ingnierie, le
  traitement des textes et des documents, ainsi que des mthodes pour la
  gestion d'objets multi-media tels que les images, les sons, les
  animations, la musique et la vido. Il fournira vraisemblablement un
  lien entre le langage SQL et les objets multi-media dfinis par les
  autres entits de normalisation du JTC1 (e.g. SC18 pour les documents,
  SC24 pour les images, et SC29 pour les photographies et les images
  animes).

  Le Plan du Projet pour SQL/MM prvoit que ce sera une norme multi-
  parties dont le nombre de parties pourra voluer. La partie 1
  consistera en un cadre spcifiant comment les autres parties doivent
  tre architectur.  Chacune de ces autres parties sera consacre  un
  paquetage d'application SQL spcifique. En aot 1994, la structure
  existante tait la suivante :


    Partie 1: Cadre - Description non technique de la manire dont le
     document est structur.

    Partie 2: Mthodes pour le Texte et ADT (types de donnes
     abstraits) pour le traitement des textes. Environ 45 pages.

    Partie 3: Mthodes Spatiales et ADT pour la gestion des donnes
     spatiales Environ 200 pages avec l'active contribution d'experts en
     Donnes Spatiales de 3 entits nationales.

    Partie 4: Mthode  Usage Gnral et ADT pour les nombres
     complexes, et des fonctionnalits incluant la trigonomtrie et les
     fonctions exponentielles les vecteurs, les ensembles etc.
     Actuellement environ 90 pages.

  On assiste  des efforts de normalisation dans le domaine des
  informations Spatiales et Gographiques :


    ANSI X3L1 - Systmes d'Information Gographique.  Mark Ashworth de
     Unisys est charg de la liaison entre X3L1 et ANSI X3H2. Il est
     galement le rdacteur des parties 1, 3, and 4 du brouillon de
     SQL/MM.


    ISO TC 211 - Information gographique/Gomatique.

  2255..  SSuuppppoorrtt TTeecchhnniiqquuee ppoouurr PPoossttggrreeSSQQLL

  Si vous avez des questions techniques ou si vous rencontrez des
  problmes vous pouvez envoyer un courrier lectronique  :

    pgsql-questions@postgresql.org

     et vous recevrez par courrier lectronique une rponse dans la
     journe qui suit.  Comme le nombre de produits internet est trs
     large, et que les utilisateurs aident les autres utilisateurs,
     internet est capable d'apporter facilement un support technique 
     des millions d'utilisateurs. Le support par Email est de loin
     beaucoup plus adapt que celui effectu par tlphone car on peut
     rcuprer les messages d'erreur, les sorties de programme etc... et
     les transmettre facilement dans les listes de diffusion ou les
     forums.

  Dans un futur proche, l'organisation PostgreSQL vendra un support
  technique aux petites et grandes compagnies, les revenus de cette
  activit serviront  entretenir plusieurs sites miroirs (web et ftp)
  partout dans le monde. Ces revenus pourront aussi servir  crer une
  documentation imprime, des guides, des livres pour aider les clients.
  Les profits seront galement utiliss  construire des
  immeubles/salles de classe et  offrir des cours techniques sur
  l'administration et la gestion des bases de donnes et  organiser des
  confrences annuelles pour les utilisateurs.  Ceci devrait aider
  l'organisation PostgreSQL  se dbrouiller toute seule.

  Vous pouvez aussi vous faire aider par des socits de conseil
  professionnelles telles que Anderson, WGS (Work Group Solutions). Pour
  de l'aide, puisqu'ils ont une trs bonne expertise en "C", "C++"
  (PostgreSQL est crit en "C"), contactez les  -

    Work Group Solutions  <http://www.wgs.com>

    Anderson Consulting  <http://www.ac.com>

  2266..  AAssppeeccttss ccoonnoommiiqquueess eett CCoommmmeerrcciiaauuxx

  Les bases de donnes commerciales paient de nombreuses taxes telles
  que des taxes fdrales, d'tat, sur les ventes, sur les salaris, la
  scurit sociale, les taxes pour les soins mdicaux, des indemnits
  pour les employs, des cots de marketing et de publicit. Tous ces
  cots ne sont pas destins directement au dveloppement de la base de
  donne. Quand vous achetez une base de donnes commerciale une partie
  du montant est destin aux taxes, aux dpenses de recherche et
  dveloppement ( R&D ). Donc la valeur relle pour la base de donnes
  est beaucoup plus faible.

  De plus les bases de donnes commerciales doivent payer pour leurs
  immeubles/biens et pour l'achat de machines Unix, leur installation et
  leur maintenance. Tous ces cots sont rpercuts sur les clients.

  PostgreSQL possde l'avantage, sur les bases de donnes commerciales,
  de ne pas supporter de taxes puisque dveloppe sur l'internet. Un
  trs grand nombre de personnes contribuent  son dveloppement. Par
  exemple, cas hypothtique, s'il y a un million de compagnies aux U.S.A
  et que chacune contribue pour environ $ 10 (en valeur de logiciel pour
  PostgreSQL) alors, chaque compagnie recevra dix millions de dollars!!
  C'est cela la
   GGRRAANNDDEE MMAAGGIIEE  du dveloppement sur internet.

  Actuellement, le code source de PostgreSQL est constitu d'environ 200
  000 lignes de code "C" et "C++". Si le cot de chaque ligne de code
  "C" est valu  $ 10, alors le cot total de PostgreSQL, tel qu'il
  est aujourd'hui est de $ 2 000 000 (deux millions de dollars!!).

  De nombreuses compagnies ont dj dvelopp de grandes quantits de
  code "C", "C++" maison. Donc, en prenant le code source de PostgreSQL
  et en collaborant avec les autres compagnies sur internet, cela leur
  bnficierait beaucoup en leur faisant conomiser du temps et des
  efforts.

  2277..  LLiissttee ddeess aauuttrree BBaasseess ddee DDoonnnneess

  On trouvera ci-dessous la liste des autres bases de donnes SQL pour
  Unix, Linux.

    Cliquez et allez  Applications->databases.
     <http://www.caldera.com/tech-ref/linuxapps/linapps.html>

    Cliquez et allez  Applications->databases.
     <http://www.xnet.com/~blatura/linapps.shtml>

    Ressources pour Bases de Donnes <http://linas.org/linux/db.html>

    Liste des Bases de Donnes libres
     <http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html>

    Liste des SGBDR de Browne <http://www.hex.net/~cbbrowne/rdbms.html>
     crit par Christopher B. Browne cbbrowne@hex.net

    Liste des SGBDR de SAL <http://SAL.KachinaTech.COM/H/1/>

    Liste des SGBD Orients Objets de SAL
     <http://SAL.KachinaTech.COM/H/2/>

    Liste des Utilitaires et d'Autres SGDB de SAL
     <http://SAL.KachinaTech.COM/H/3/>

    Index des Logiciels de Base de Donnes Publics  de l'ACM SIGMOD
     <http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/>

  2288..  IInnddiiccaattiioonnss ppoouurr llaa rreecchheerrcchhee ssuurr llee WWoorrlldd WWiiddee WWeebb IInntteerrnneett

  Internet est immense, recle un trs grand nombre de logiciels et un
  ocan d'informations. Il s'accrot  la vitesse de 500% par an. On
  estime le nombre de sites Web  environ 90 million dans le monde
  entier!

  Utilisez des moteurs de recherche tels que "Yahoo", "Netscape",
  "Lycos" etc. pour trouver une information. Allez sur Yahoo, et cliquez
  sur recherche. Utilisez les options de filtrage pour affiner vos
  critres de recherche. La mthode de recherche par dfaut consiste en
  une "recherche intelligente" qui est plus gnrale et donne toutes les
  possibilits. Cliquez sur "Options" et slectionnez la recherche par
  "EXACT phrase" , par "AND" , par "OR" , etc... De cette manire vous
  trouverez l'information que vous cherchez beaucoup plus rapidement.
  Dans le menu de recherche, il y a galement des boutons pour une
  recherche dans Usenet, dans les sites Web et les sites Yahoo.

  2299..  CCoonncclluussiioonn

  Aprs avoir cherch toutes les bases de donnes disponibles qui soient
  libres et dont le code source soit disponible, j'ai trouv que SEUL
  PostgreSQL, le SGBDR (Relationnel Objet)SQL libre, est le PLUS mature
  et le plus largement utilis au monde. PostgreSQL est trs attractif
  en ce que beaucoup de travail a dj t effectu et qu'il possde des
  pilotes ODBC et JDBC permettant d'crire des applications
  indpendantes des bases de donnes. Les applications crites en
  PostgreSQL qui utilisent les pilotes ODBC, JDBC sont facilement
  portables sur d'autres systmes tels que Oracle, Sybase et Informix et
  vice versa.

  Vous pouvez vous demander "Mais pourquoi PostgreSQL ?" La rponse 
  cela est que puisqu'il faut pas mal de temps pour dvelopper un
  systme de gestion de base de donnes ex nihilo, il est plus
  raisonnable d'en utiliser un qui satisfasse aux conditions suivantes -

  Un systme de gestion de base de donnes

    Dont le code source soit disponible, ce doit tre un systme 
     "code source ouvert"

    Qui ne ncessite pas de licence, qui n'a pas de doits de proprit

    Qui puisse tre distribu sur internet

    Qui a ncessit plusieurs annes de dveloppement.

    Qui satisfasse des standards tels que ISO/ANSI SQL 92 (and SQL 89)

    Qui puisse rpondre aux besoins futurs telles que SQL 3 (SQL 98)

    Qui possde des fonctionnalits avances

     Et, justement, il appert que c'est 'PostgreSQL' qui rpond  tous
     ces critres et que c'est un logiciel appropri dans ce cas.

  3300..  FFAAQQ -- QQuueessttiioonnss ssuurr PPoossttggrreeSSQQLL

  Veuillez vous rfrer  la dernire version de la FAQ pour les
  questions gnrales, celles concernant Linux et Irix  :

    <http://www.postgresql.org/docs/faq-english.shtml>

  3311..  NNoottiiccee ddee CCooppyyrriigghhtt

  Copyright (c) 1997 Al Dev (Alavoor Vasudevan). Tous droits rservs.

  AUCUNE RESPONSABILIT NE SAURAIT TRE RETENUE POUR DES DOMMAGES
  CONSCUTIFS A L'UTILISATION DE TOUT OU PARTIE DE CE DOCUMENT. En aucun
  cas l'auteur ou le traducteur de ce document ne pourra tre tenu pour
  responsable vis--vis de de qui que ce soit pour tous dommages quels
  qu'ils soient (y compris et sans limitation, spcial, fortuit,
  conscutif, blessures directes ou indirectes pour les personnes,
  pertes financires dues au manque  gagner,  l'interruption
  d'activit, pertes d'informations commerciales  ou toutes autres
  pertes financires) rsultant de l'utilisation de ce document.

  L'auteur et le traducteur n'offrent aucunes garanties sur
  l'adquation, l'utilit ou la valeur marchande de ce document. Les
  marques, les compagnies et les noms de produits mentionns dans ce
  document sont des marques de fabrique ou des marques dposes de leurs
  propritaires respectifs. Veuillez vous rfrer aux notices de
  copyright individuelles des marques, compagnies et produits mentionns
  dans ce document. Il est de votre responsabilit de lire et de
  comprendre les notices de copyright des
  organisations/compagnies/produits/auteurs mentionns dans ce document
  avant d'utiliser leurs informations respectives.

  AAFF..  AAppppeennddiiccee AA -- SSyynnttaaxxee ddee ll'' AANNSSII//IISSOO SSQQLL 11999922




  Ce fichier contient la grammaire en BNF du langage, arborescence
  explore d'abord en profondeur, ralise le 27-AOT-1992 11:03:41.64.
  La version spcifique de BNF donne ici est :
  ANSI et SQL2-seulement.


  <SQL terminal character> ::=
        <SQL language character>
      | <SQL embedded language character>

  <SQL language character> ::=
        <simple Latin letter>
      | <digit>
      | <SQL special character>

  <simple Latin letter> ::=
        <simple Latin upper case letter>
      | <simple Latin lower case letter>

  <simple Latin upper case letter> ::=
            A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
      | P | Q | R | S | T | U | V | W | X | Y | Z

  <simple Latin lower case letter> ::=
            a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
      | p | q | r | s | t | u | v | w | x | y | z

  <digit> ::=
      0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  <SQL special character> ::=
        <space>
      | <double quote>
      | <percent>
      | <ampersand>
      | <quote>
      | <left paren>
      | <right paren>
      | <asterisk>
      | <plus sign>
      | <comma>
      | <minus sign>
      | <period>
      | <solidus>
      | <colon>
      | <semicolon>
      | <less than operator>
      | <equals operator>
      | <greater than operator>
      | <question mark>
      | <underscore>
      | <vertical bar>

  <space> ::= !! <EMPHASIS>(space character in character set in use)

  <double quote> ::= "

  <percent> ::= %

  <ampersand> ::= &

  <quote> ::= '

  <left paren> ::= (

  <right paren> ::= )
  <asterisk> ::= *

  <plus sign> ::= +

  <comma> ::= ,

  <minus sign> ::= -

  <period> ::= .

  <solidus> ::= /

  <colon> ::= :

  <semicolon> ::= ;

  <less than operator> ::= <

  <equals operator> ::= =

  <greater than operator> ::= >

  <question mark> ::= ?

  <underscore> ::= _

  <vertical bar> ::= |

  <SQL embedded language character> ::=
        <left bracket>
      | <right bracket>

  <left bracket> ::= [

  <right bracket> ::= ]

  <token> ::=
        <nondelimiter token>
      | <delimiter token>

  <nondelimiter token> ::=
        <regular identifier>
      | <key word>
      | <unsigned numeric literal>
      | <national character string literal>
      | <bit string literal>
      | <hex string literal>

  <regular identifier> ::= <identifier body>

  <identifier body> ::=
      <identifier start> [ ( <underscore> | <identifier part> )... ]

  <identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)

  <identifier part> ::=
        <identifier start>
      | <digit>

  <key word> ::=
        <reserved word>
      | <non-reserved word>

  <reserved word> ::=
        ABSOLUTE | ACTION | ADD | ALL
      | ALLOCATE | ALTER | AND
      | ANY | ARE
      | AS | ASC
      | ASSERTION | AT
      | AUTHORIZATION | AVG
      | BEGIN | BETWEEN | BIT | BIT_LENGTH
      | BOTH | BY
      | CASCADE | CASCADED | CASE | CAST
      | CATALOG
      | CHAR | CHARACTER | CHAR_LENGTH
      | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
      | COLLATE | COLLATION
      | COLUMN | COMMIT
      | CONNECT
      | CONNECTION | CONSTRAINT
      | CONSTRAINTS | CONTINUE
      | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
      | CURRENT
      | CURRENT_DATE | CURRENT_TIME
      | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
      | DATE | DAY | DEALLOCATE | DEC
      | DECIMAL | DECLARE | DEFAULT | DEFERRABLE
      | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
      | DIAGNOSTICS
      | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
      | ELSE | END | END-EXEC | ESCAPE
      | EXCEPT | EXCEPTION
      | EXEC | EXECUTE | EXISTS
      | EXTERNAL | EXTRACT
      | FALSE | FETCH | FIRST | FLOAT | FOR
      | FOREIGN | FOUND | FROM | FULL
      | GET | GLOBAL | GO | GOTO
      | GRANT | GROUP
      | HAVING | HOUR
      | IDENTITY | IMMEDIATE | IN | INDICATOR
      | INITIALLY | INNER | INPUT
      | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
      | INTERVAL | INTO | IS
      | ISOLATION
      | JOIN
      | KEY
      | LANGUAGE | LAST | LEADING | LEFT
      | LEVEL | LIKE | LOCAL | LOWER
      | MATCH | MAX | MIN | MINUTE | MODULE
      | MONTH
      | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
      | NOT | NULL
      | NULLIF | NUMERIC
      | OCTET_LENGTH | OF
      | ON | ONLY | OPEN | OPTION | OR
      | ORDER | OUTER
      | OUTPUT | OVERLAPS
      | PAD | PARTIAL | POSITION | PRECISION | PREPARE
      | PRESERVE | PRIMARY
      | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
      | READ | REAL | REFERENCES | RELATIVE | RESTRICT
      | REVOKE | RIGHT
      | ROLLBACK | ROWS
      | SCHEMA | SCROLL | SECOND | SECTION
      | SELECT
      | SESSION | SESSION_USER | SET
      | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
      | SQLERROR | SQLSTATE
      | SUBSTRING | SUM | SYSTEM_USER
      | TABLE | TEMPORARY
      | THEN | TIME | TIMESTAMP
      | TIMEZONE_HOUR | TIMEZONE_MINUTE
      | TO | TRAILING | TRANSACTION
      | TRANSLATE | TRANSLATION | TRIM | TRUE
      | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
      | USER | USING
      | VALUE | VALUES | VARCHAR | VARYING | VIEW
      | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
      | YEAR
      | ZONE

  <non-reserved word> ::=

        ADA
      | C | CATALOG_NAME
      | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
      | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
      | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
      | COMMITTED
      | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
      | CONSTRAINT_SCHEMA | CURSOR_NAME
      | DATA | DATETIME_INTERVAL_CODE
      | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
      | FORTRAN
      | LENGTH
      | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
      | NAME | NULLABLE | NUMBER
      | PASCAL | PLI
      | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
      | ROW_COUNT
      | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
      | TABLE_NAME | TYPE
      | UNCOMMITTED | UNNAMED

  <unsigned numeric literal> ::=
        <exact numeric literal>
      | <approximate numeric literal>

  <exact numeric literal> ::=
        <unsigned integer> [ <period> [ <unsigned integer> ] ]
      | <period> <unsigned integer>

  <unsigned integer> ::= <digit>...

  <approximate numeric literal> ::= <mantissa> E <exponent>

  <mantissa> ::= <exact numeric literal>

  <exponent> ::= <signed integer>

  <signed integer> ::= [ <sign> ] <unsigned integer>

  <sign> ::= <plus sign> | <minus sign>

  <national character string literal> ::=
      N <quote> [ <character representation>... ] <quote>
        [ ( <separator>... <quote> [ <character representation>... ] <quote> )... ]

  <character representation> ::=
        <nonquote character>
      | <quote symbol>

  <nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <quote symbol> ::= <quote><quote>

  <separator> ::= ( <comment> | <space> | <newline> )...

  <comment> ::=
      <comment introducer> [ <comment character>... ] <newline>

  <comment introducer> ::= <minus sign><minus sign>[<minus sign>...]

  <comment character> ::=
        <nonquote character>
      | <quote>

  <newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)

  <bit string literal> ::=
      B <quote> [ <bit>... ] <quote>
        [ ( <separator>... <quote> [ <bit>... ] <quote> )... ]

  <bit> ::= 0 | 1

  <hex string literal> ::=
      X <quote> [ <hexit>... ] <quote>
        [ ( <separator>... <quote> [ <hexit>... ] <quote> )... ]

  <hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f

  <delimiter token> ::=
        <character string literal>
      | <date string>
      | <time string>
      | <timestamp string>
      | <interval string>
      | <delimited identifier>
      | <SQL special character>
      | <not equals operator>
      | <greater than or equals operator>
      | <less than or equals operator>
      | <concatenation operator>
      | <double period>
      | <left bracket>
      | <right bracket>

  <character string literal> ::=
      [ <introducer><character set specification> ]
      <quote> [ <character representation>... ] <quote>
        [ ( <separator>... <quote> [ <character representation>... ] <quote> )... ]

  <introducer> ::= <underscore>

  <character set specification> ::=
        <standard character repertoire name>
      | <implementation-defined character repertoire name>
      | <user-defined character repertoire name>
      | <standard universal character form-of-use name>
      | <implementation-defined universal character form-of-use name>

  <standard character repertoire name> ::= <character set name>

  <character set name> ::= [ <schema name> <period> ]
        <SQL language identifier>

  <schema name> ::=
      [ <catalog name> <period> ] <unqualified schema name>

  <catalog name> ::= <identifier>

  <identifier> ::=
      [ <introducer><character set specification> ] <actual identifier>

  <actual identifier> ::=
        <regular identifier>
      | <delimited identifier>

  <delimited identifier> ::=
      <double quote> <delimited identifier body> <double quote>

  <delimited identifier body> ::= <delimited identifier part>...

  <delimited identifier part> ::=
        <nondoublequote character>
      | <doublequote symbol>

  <nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)

  <doublequote symbol> ::= <double quote><double quote>

  <unqualified schema name> ::= <identifier>

  <SQL language identifier> ::=
      <SQL language identifier start>
         [ ( <underscore> | <SQL language identifier part> )... ]

  <SQL language identifier start> ::= <simple Latin letter>

  <SQL language identifier part> ::=
        <simple Latin letter>
      | <digit>

  <implementation-defined character repertoire name> ::=
      <character set name>

  <user-defined character repertoire name> ::= <character set name>

  <standard universal character form-of-use name> ::=
      <character set name>

  <implementation-defined universal character form-of-use name> ::=
      <character set name>

  <date string> ::=
      <quote> <date value> <quote>

  <date value> ::=
      <years value> <minus sign> <months value>
          <minus sign> <days value>

  <years value> ::= <datetime value>

  <datetime value> ::= <unsigned integer>

  <months value> ::= <datetime value>

  <days value> ::= <datetime value>

  <time string> ::=
      <quote> <time value> [ <time zone interval> ] <quote>

  <time value> ::=
      <hours value> <colon> <minutes value> <colon> <seconds value>

  <hours value> ::= <datetime value>

  <minutes value> ::= <datetime value>

  <seconds value> ::=
        <seconds integer value> [ <period> [ <seconds fraction> ] ]

  <seconds integer value> ::= <unsigned integer>

  <seconds fraction> ::= <unsigned integer>

  <time zone interval> ::=
      <sign> <hours value> <colon> <minutes value>

  <timestamp string> ::=
      <quote> <date value> <space> <time value>
          [ <time zone interval> ] <quote>

  <interval string> ::=
      <quote> ( <year-month literal> | <day-time literal> ) <quote>

  <year-month literal> ::=
        <years value>
      | [ <years value> <minus sign> ] <months value>

  <day-time literal> ::=
        <day-time interval>
      | <time interval>

  <day-time interval> ::=
      <days value>
        [ <space> <hours value> [ <colon> <minutes value>
          [ <colon> <seconds value> ] ] ]

  <time interval> ::=
        <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
      | <minutes value> [ <colon> <seconds value> ]
      | <seconds value>

  <not equals operator> ::= <>

  <greater than or equals operator> ::= >=

  <less than or equals operator> ::= <=

  <concatenation operator> ::= ||

  <double period> ::= ..

  <module> ::=
      <module name clause>
      <language clause>
      <module authorization clause>
      [ <temporary table declaration>... ]
      <module contents>...

  <module name clause> ::=
      MODULE [ <module name> ]
        [ <module character set specification> ]

  <module name> ::= <identifier>

  <module character set specification> ::=
      NAMES ARE <character set specification>

  <language clause> ::=
      LANGUAGE <language name>

  <language name> ::=
      ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI

  <module authorization clause> ::=
        SCHEMA <schema name>
      | AUTHORIZATION <module authorization identifier>
      | SCHEMA <schema name>
            AUTHORIZATION <module authorization identifier>

  <module authorization identifier> ::=
      <authorization identifier>

  <authorization identifier> ::= <identifier>

  <temporary table declaration> ::=
      DECLARE LOCAL TEMPORARY TABLE
          <qualified local table name>
        <table element list>
        [ ON COMMIT ( PRESERVE | DELETE ) ROWS ]

  <qualified local table name> ::=
      MODULE <period> <local table name>

  <local table name> ::= <qualified identifier>

  <qualified identifier> ::= <identifier>

  <table element list> ::=
        <left paren> <table element> [ ( <comma> <table element> )... ] <right paren>

  <table element> ::=
        <column definition>
      | <table constraint definition>

  <column definition> ::=
      <column name> ( <data type> | <domain name> )
      [ <default clause> ]
      [ <column constraint definition>... ]
      [ <collate clause> ]

  <column name> ::= <identifier>

  <data type> ::=
        <character string type>
             [ CHARACTER SET <character set specification> ]
      | <national character string type>
      | <bit string type>
      | <numeric type>
      | <datetime type>
      | <interval type>

  <character string type> ::=
        CHARACTER [ <left paren> <length> <right paren> ]
      | CHAR [ <left paren> <length> <right paren> ]
      | CHARACTER VARYING <left paren> <length> <right paren>
      | CHAR VARYING <left paren> <length> <right paren>
      | VARCHAR <left paren> <length> <right paren>

  <length> ::= <unsigned integer>

  <national character string type> ::=
        NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
      | NATIONAL CHAR [ <left paren> <length> <right paren> ]
      | NCHAR [ <left paren> <length> <right paren> ]
      | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
      | NATIONAL CHAR VARYING <left paren> <length> <right paren>
      | NCHAR VARYING <left paren> <length> <right paren>

  <bit string type> ::=
        BIT [ <left paren> <length> <right paren> ]
      | BIT VARYING <left paren> <length> <right paren>

  <numeric type> ::=
        <exact numeric type>
      | <approximate numeric type>

  <exact numeric type> ::=
        NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
      | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
      | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
      | INTEGER
      | INT
      | SMALLINT

  <precision> ::= <unsigned integer>

  <scale> ::= <unsigned integer>

  <approximate numeric type> ::=
        FLOAT [ <left paren> <precision> <right paren> ]
      | REAL
      | DOUBLE PRECISION

  <datetime type> ::=
        DATE
      | TIME [ <left paren> <time precision> <right paren> ]
            [ WITH TIME ZONE ]
      | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
            [ WITH TIME ZONE ]

  <time precision> ::= <time fractional seconds precision>

  <time fractional seconds precision> ::= <unsigned integer>

  <timestamp precision> ::= <time fractional seconds precision>

  <interval type> ::= INTERVAL <interval qualifier>

  <interval qualifier> ::=
        <start field> TO <end field>
      | <single datetime field>

  <start field> ::=
      <non-second datetime field>
          [ <left paren> <interval leading field precision> <right paren> ]

  <non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
      | MINUTE

  <interval leading field precision> ::= <unsigned integer>

  <end field> ::=
        <non-second datetime field>
      | SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]

  <interval fractional seconds precision> ::= <unsigned integer>

  <single datetime field> ::=
        <non-second datetime field>
            [ <left paren> <interval leading field precision> <right paren> ]
      | SECOND [ <left paren> <interval leading field precision>
            [ <comma> <interval fractional seconds precision> ] <right paren> ]

  <domain name> ::= <qualified name>

  <qualified name> ::=
      [ <schema name> <period> ] <qualified identifier>

  <default clause> ::=
        DEFAULT <default option>

  <default option> ::=
        <literal>
      | <datetime value function>
      | USER
      | CURRENT_USER
      | SESSION_USER
      | SYSTEM_USER
      | NULL

  <literal> ::=
        <signed numeric literal>
      | <general literal>

  <signed numeric literal> ::=
      [ <sign> ] <unsigned numeric literal>

  <general literal> ::=
        <character string literal>
      | <national character string literal>
      | <bit string literal>
      | <hex string literal>
      | <datetime literal>
      | <interval literal>

  <datetime literal> ::=
        <date literal>
      | <time literal>
      | <timestamp literal>

  <date literal> ::=
      DATE <date string>

  <time literal> ::=
      TIME <time string>

  <timestamp literal> ::=
      TIMESTAMP <timestamp string>

  <interval literal> ::=
      INTERVAL [ <sign> ] <interval string> <interval qualifier>

  <datetime value function> ::=
        <current date value function>
      | <current time value function>
      | <current timestamp value function>

  <current date value function> ::= CURRENT_DATE

  <current time value function> ::=
        CURRENT_TIME [ <left paren> <time precision> <right paren> ]

  <current timestamp value function> ::=
        CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]

  <column constraint definition> ::=
      [ <constraint name definition> ]
      <column constraint>
        [ <constraint attributes> ]

  <constraint name definition> ::= CONSTRAINT <constraint name>
  <constraint name> ::= <qualified name>

  <column constraint> ::=
        NOT NULL
      | <unique specification>
      | <references specification>
      | <check constraint definition>

  <unique specification> ::=
      UNIQUE | PRIMARY KEY

  <references specification> ::=
      REFERENCES <referenced table and columns>
        [ MATCH <match type> ]
        [ <referential triggered action> ]

  <referenced table and columns> ::=
       <table name> [ <left paren> <reference column list> <right paren> ]

  <table name> ::=
        <qualified name>
      | <qualified local table name>

  <reference column list> ::= <column name list>

  <column name list> ::=
      <column name> [ ( <comma> <column name> )... ]

  <match type> ::=
        FULL
      | PARTIAL

  <referential triggered action> ::=
        <update rule> [ <delete rule> ]
      | <delete rule> [ <update rule> ]

  <update rule> ::= ON UPDATE <referential action>

  <referential action> ::=
        CASCADE
      | SET NULL
      | SET DEFAULT
      | NO ACTION

  <delete rule> ::= ON DELETE <referential action>

  <check constraint definition> ::=
      CHECK
          <left paren> <search condition> <right paren>

  <search condition> ::=
        <boolean term>
      | <search condition> OR <boolean term>

  <boolean term> ::=
        <boolean factor>
      | <boolean term> AND <boolean factor>

  <boolean factor> ::=
      [ NOT ] <boolean test>

  <boolean test> ::=
      <boolean primary> [ IS [ NOT ]
            <truth value> ]

  <boolean primary> ::=
        <predicate>
      | <left paren> <search condition> <right paren>

  <predicate> ::=
        <comparison predicate>
      | <between predicate>
      | <in predicate>
      | <like predicate>
      | <null predicate>
      | <quantified comparison predicate>
      | <exists predicate>
      | <unique predicate>
      | <match predicate>
      | <overlaps predicate>

  <comparison predicate> ::=
      <row value constructor> <comp op>
          <row value constructor>

  <row value constructor> ::=
         <row value constructor element>
      | <left paren> <row value constructor list> <right paren>
      | <row subquery>

  <row value constructor element> ::=
        <value expression>
      | <null specification>
      | <default specification>

  <value expression> ::=
        <numeric value expression>
      | <string value expression>
      | <datetime value expression>
      | <interval value expression>

  <numeric value expression> ::=
        <term>
      | <numeric value expression> <plus sign> <term>
      | <numeric value expression> <minus sign> <term>

  <term> ::=
        <factor>
      | <term> <asterisk> <factor>
      | <term> <solidus> <factor>

  <factor> ::=
      [ <sign> ] <numeric primary>

  <numeric primary> ::=
        <value expression primary>
      | <numeric value function>

  <value expression primary> ::=
        <unsigned value specification>
      | <column reference>
      | <set function specification>
      | <scalar subquery>
      | <case expression>
      | <left paren> <value expression> <right paren>
      | <cast specification>

  <unsigned value specification> ::=
        <unsigned literal>
      | <general value specification>

  <unsigned literal> ::=
        <unsigned numeric literal>
      | <general literal>

  <general value specification> ::=
        <parameter specification>
      | <dynamic parameter specification>
      | <variable specification>
      | USER
      | CURRENT_USER
      | SESSION_USER
      | SYSTEM_USER
      | VALUE

  <parameter specification> ::=
      <parameter name> [ <indicator parameter> ]

  <parameter name> ::= <colon> <identifier>

  <indicator parameter> ::=
      [ INDICATOR ] <parameter name>

  <dynamic parameter specification> ::= <question mark>

  <variable specification> ::=
      <embedded variable name> [ <indicator variable> ]

  <embedded variable name> ::=
      <colon><host identifier>

  <host identifier> ::=
        <Ada host identifier>
      | <C host identifier>
      | <COBOL host identifier>
      | <Fortran host identifier>
      | <MUMPS host identifier>
      | <Pascal host identifier>
      | <PL/I host identifier>

  <Ada host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <C host identifier> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

  <COBOL host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <Fortran host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <MUMPS host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <Pascal host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <PL/I host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <indicator variable> ::=
      [ INDICATOR ] <embedded variable name>

  <column reference> ::= [ <qualifier> <period> ] <column name>

  <qualifier> ::=
        <table name>
      | <correlation name>

  <correlation name> ::= <identifier>

  <set function specification> ::=
        COUNT <left paren> <asterisk> <right paren>
      | <general set function>

  <general set function> ::=
        <set function type>
            <left paren> [ <set quantifier> ] <value expression> <right paren>

  <set function type> ::=
      AVG | MAX | MIN | SUM | COUNT

  <set quantifier> ::= DISTINCT | ALL

  <scalar subquery> ::= <subquery>

  <subquery> ::= <left paren> <query expression> <right paren>

  <query expression> ::=
        <non-join query expression>
      | <joined table>

  <non-join query expression> ::=
        <non-join query term>
      | <query expression> UNION  [ ALL ]
            [ <corresponding spec> ] <query term>
      | <query expression> EXCEPT [ ALL ]
            [ <corresponding spec> ] <query term>

  <non-join query term> ::=
        <non-join query primary>
      | <query term> INTERSECT [ ALL ]
            [ <corresponding spec> ] <query primary>

  <non-join query primary> ::=
        <simple table>
      | <left paren> <non-join query expression> <right paren>

  <simple table> ::=
        <query specification>
      | <table value constructor>
      | <explicit table>

  <query specification> ::=
      SELECT [ <set quantifier> ] <select list> <table expression>

  <select list> ::=
        <asterisk>
      | <select sublist> [ ( <comma> <select sublist> )... ]

  <select sublist> ::=
        <derived column>
      | <qualifier> <period> <asterisk>

  <derived column> ::= <value expression> [ <as clause> ]

  <as clause> ::= [ AS ] <column name>

  <table expression> ::=
      <from clause>
      [ <where clause> ]
      [ <group by clause> ]
      [ <having clause> ]

  <from clause> ::= FROM <table reference>
      [ ( <comma> <table reference> )... ]

  <table reference> ::=
        <table name> [ [ AS ] <correlation name>
            [ <left paren> <derived column list> <right paren> ] ]
      | <derived table> [ AS ] <correlation name>
            [ <left paren> <derived column list> <right paren> ]
      | <joined table>

  <derived column list> ::= <column name list>

  <derived table> ::= <table subquery>

  <table subquery> ::= <subquery>

  <joined table> ::=
        <cross join>
      | <qualified join>
      | <left paren> <joined table> <right paren>

  <cross join> ::=
      <table reference> CROSS JOIN <table reference>

  <qualified join> ::=
      <table reference> [ NATURAL ] [ <join type> ] JOIN
        <table reference> [ <join specification> ]

  <join type> ::=
        INNER
      | <outer join type> [ OUTER ]
      | UNION

  <outer join type> ::=
        LEFT
      | RIGHT
      | FULL

  <join specification> ::=
        <join condition>
      | <named columns join>

  <join condition> ::= ON <search condition>

  <named columns join> ::=
      USING <left paren> <join column list> <right paren>

  <join column list> ::= <column name list>

  <where clause> ::= WHERE <search condition>

  <group by clause> ::=
      GROUP BY <grouping column reference list>

  <grouping column reference list> ::=
      <grouping column reference>
          [ ( <comma> <grouping column reference> )... ]

  <grouping column reference> ::=
      <column reference> [ <collate clause> ]

  <collate clause> ::= COLLATE <collation name>

  <collation name> ::= <qualified name>

  <having clause> ::= HAVING <search condition>

  <table value constructor> ::=
      VALUES <table value constructor list>

  <table value constructor list> ::=
      <row value constructor> [ ( <comma> <row value constructor> )... ]

  <explicit table> ::= TABLE <table name>

  <query term> ::=
        <non-join query term>
      | <joined table>

  <corresponding spec> ::=
      CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]

  <corresponding column list> ::= <column name list>

  <query primary> ::=
        <non-join query primary>
      | <joined table>

  <case expression> ::=
        <case abbreviation>
      | <case specification>

  <case abbreviation> ::=
        NULLIF <left paren> <value expression> <comma>
              <value expression> <right paren>
      | COALESCE <left paren> <value expression>
              ( <comma> <value expression> )... <right paren>

  <case specification> ::=
        <simple case>
      | <searched case>

  <simple case> ::=
      CASE <case operand>
        <simple when clause>...
        [ <else clause> ]
      END

  <case operand> ::= <value expression>

  <simple when clause> ::= WHEN <when operand> THEN <result>

  <when operand> ::= <value expression>

  <result> ::= <result expression> | NULL

  <result expression> ::= <value expression>

  <else clause> ::= ELSE <result>

  <searched case> ::=
      CASE
        <searched when clause>...
        [ <else clause> ]
      END

  <searched when clause> ::= WHEN <search condition> THEN <result>

  <cast specification> ::=
      CAST <left paren> <cast operand> AS
          <cast target> <right paren>

  <cast operand> ::=
        <value expression>
      | NULL

  <cast target> ::=
        <domain name>
      | <data type>

  <numeric value function> ::=
        <position expression>
      | <extract expression>
      | <length expression>

  <position expression> ::=
      POSITION <left paren> <character value expression>
          IN <character value expression> <right paren>

  <character value expression> ::=
        <concatenation>
      | <character factor>

  <concatenation> ::=
      <character value expression> <concatenation operator>
          <character factor>

  <character factor> ::=
      <character primary> [ <collate clause> ]

  <character primary> ::=
        <value expression primary>
      | <string value function>

  <string value function> ::=
        <character value function>
      | <bit value function>

  <character value function> ::=
        <character substring function>
      | <fold>
      | <form-of-use conversion>
      | <character translation>
      | <trim function>

  <character substring function> ::=
      SUBSTRING <left paren> <character value expression> FROM <start position>
                  [ FOR <string length> ] <right paren>

  <start position> ::= <numeric value expression>

  <string length> ::= <numeric value expression>

  <fold> ::= ( UPPER | LOWER )
       <left paren> <character value expression> <right paren>

  <form-of-use conversion> ::=
      CONVERT <left paren> <character value expression>
          USING <form-of-use conversion name> <right paren>

  <form-of-use conversion name> ::= <qualified name>

  <character translation> ::=
      TRANSLATE <left paren> <character value expression>
          USING <translation name> <right paren>

  <translation name> ::= <qualified name>

  <trim function> ::=
      TRIM <left paren> <trim operands> <right paren>

  <trim operands> ::=
      [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>
  <trim specification> ::=
        LEADING
      | TRAILING
      | BOTH

  <trim character> ::= <character value expression>

  <trim source> ::= <character value expression>

  <bit value function> ::=
      <bit substring function>

  <bit substring function> ::=
      SUBSTRING <left paren> <bit value expression> FROM <start position>
          [ FOR <string length> ] <right paren>

  <bit value expression> ::=
        <bit concatenation>
      | <bit factor>

  <bit concatenation> ::=
      <bit value expression> <concatenation operator> <bit factor>

  <bit factor> ::= <bit primary>

  <bit primary> ::=
        <value expression primary>
      | <string value function>

  <extract expression> ::=
      EXTRACT <left paren> <extract field>
          FROM <extract source> <right paren>

  <extract field> ::=
        <datetime field>
      | <time zone field>

  <datetime field> ::=
        <non-second datetime field>
      | SECOND

  <time zone field> ::=
        TIMEZONE_HOUR
      | TIMEZONE_MINUTE

  <extract source> ::=
        <datetime value expression>
      | <interval value expression>

  <datetime value expression> ::=
        <datetime term>
      | <interval value expression> <plus sign> <datetime term>
      | <datetime value expression> <plus sign> <interval term>
      | <datetime value expression> <minus sign> <interval term>

  <interval term> ::=
        <interval factor>
      | <interval term 2> <asterisk> <factor>
      | <interval term 2> <solidus> <factor>
      | <term> <asterisk> <interval factor>

  <interval factor> ::=
      [ <sign> ] <interval primary>

  <interval primary> ::=
        <value expression primary> [ <interval qualifier> ]
  <interval term 2> ::= <interval term>

  <interval value expression> ::=
        <interval term>
      | <interval value expression 1> <plus sign> <interval term 1>
      | <interval value expression 1> <minus sign> <interval term 1>
      | <left paren> <datetime value expression> <minus sign>
            <datetime term> <right paren> <interval qualifier>

  <interval value expression 1> ::= <interval value expression>

  <interval term 1> ::= <interval term>

  <datetime term> ::=
        <datetime factor>

  <datetime factor> ::=
        <datetime primary> [ <time zone> ]

  <datetime primary> ::=
        <value expression primary>
      | <datetime value function>

  <time zone> ::=
      AT <time zone specifier>

  <time zone specifier> ::=
        LOCAL
      | TIME ZONE <interval value expression>

  <length expression> ::=
        <char length expression>
      | <octet length expression>
      | <bit length expression>

  <char length expression> ::=
      ( CHAR_LENGTH | CHARACTER_LENGTH )
          <left paren> <string value expression> <right paren>

  <string value expression> ::=
        <character value expression>
      | <bit value expression>

  <octet length expression> ::=
      OCTET_LENGTH <left paren> <string value expression> <right paren>

  <bit length expression> ::=
      BIT_LENGTH <left paren> <string value expression> <right paren>

  <null specification> ::=
      NULL

  <default specification> ::=
      DEFAULT

  <row value constructor list> ::=
      <row value constructor element>
          [ ( <comma> <row value constructor element> )... ]

  <row subquery> ::= <subquery>

  <comp op> ::=
        <equals operator>
      | <not equals operator>
      | <less than operator>
      | <greater than operator>
      | <less than or equals operator>
      | <greater than or equals operator>

  <between predicate> ::=
      <row value constructor> [ NOT ] BETWEEN
        <row value constructor> AND <row value constructor>

  <in predicate> ::=
      <row value constructor>
        [ NOT ] IN <in predicate value>

  <in predicate value> ::=
        <table subquery>
      | <left paren> <in value list> <right paren>

  <in value list> ::=
      <value expression> ( <comma> <value expression> )...

  <like predicate> ::=
      <match value> [ NOT ] LIKE <pattern>
        [ ESCAPE <escape character> ]

  <match value> ::= <character value expression>

  <pattern> ::= <character value expression>

  <escape character> ::= <character value expression>

  <null predicate> ::= <row value constructor>
      IS [ NOT ] NULL

  <quantified comparison predicate> ::=
      <row value constructor> <comp op> <quantifier> <table subquery>

  <quantifier> ::= <all> | <some>

  <all> ::= ALL

  <some> ::= SOME | ANY

  <exists predicate> ::= EXISTS <table subquery>

  <unique predicate> ::= UNIQUE <table subquery>

  <match predicate> ::=
      <row value constructor> MATCH [ UNIQUE ]
          [ PARTIAL | FULL ] <table subquery>

  <overlaps predicate> ::=
      <row value constructor 1> OVERLAPS <row value constructor 2>

  <row value constructor 1> ::= <row value constructor>

  <row value constructor 2> ::= <row value constructor>

  <truth value> ::=
        TRUE
      | FALSE
      | UNKNOWN

  <constraint attributes> ::=
        <constraint check time> [ [ NOT ] DEFERRABLE ]
      | [ NOT ] DEFERRABLE [ <constraint check time> ]

  <constraint check time> ::=
        INITIALLY DEFERRED
      | INITIALLY IMMEDIATE

  <table constraint definition> ::=
      [ <constraint name definition> ]
      <table constraint> [ <constraint attributes> ]

  <table constraint> ::=
        <unique constraint definition>
      | <referential constraint definition>
      | <check constraint definition>

  <unique constraint definition> ::=
              <unique specification> even in SQL3)
      <unique specification>
        <left paren> <unique column list> <right paren>

  <unique column list> ::= <column name list>

  <referential constraint definition> ::=
      FOREIGN KEY
          <left paren> <referencing columns> <right paren>
        <references specification>

  <referencing columns> ::=
      <reference column list>

  <module contents> ::=
        <declare cursor>
      | <dynamic declare cursor>
      | <procedure>

  <declare cursor> ::=
      DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
        FOR <cursor specification>

  <cursor name> ::= <identifier>

  <cursor specification> ::=
      <query expression> [ <order by clause> ]
        [ <updatability clause> ]

  <order by clause> ::=
      ORDER BY <sort specification list>

  <sort specification list> ::=
      <sort specification> [ ( <comma> <sort specification> )... ]

  <sort specification> ::=
      <sort key> [ <collate clause> ] [ <ordering specification> ]

  <sort key> ::=
        <column name>
      | <unsigned integer>

  <ordering specification> ::= ASC | DESC

  <updatability clause> ::=
      FOR
          ( READ ONLY |
            UPDATE [ OF <column name list> ] )

  <dynamic declare cursor> ::=
      DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
          FOR <statement name>

  <statement name> ::= <identifier>
  <procedure> ::=
      PROCEDURE <procedure name>
          <parameter declaration list> <semicolon>
        <SQL procedure statement> <semicolon>

  <procedure name> ::= <identifier>

  <parameter declaration list> ::=
        <left paren> <parameter declaration>
            [ ( <comma> <parameter declaration> )... ] <right paren>
      | <parameter declaration>...

  <parameter declaration> ::=
        <parameter name> <data type>
      | <status parameter>

  <status parameter> ::=
      SQLCODE | SQLSTATE

  <SQL procedure statement> ::=
        <SQL schema statement>
      | <SQL data statement>
      | <SQL transaction statement>
      | <SQL connection statement>
      | <SQL session statement>
      | <SQL dynamic statement>
      | <SQL diagnostics statement>

  <SQL schema statement> ::=
        <SQL schema definition statement>
      | <SQL schema manipulation statement>

  <SQL schema definition statement> ::=
        <schema definition>
      | <table definition>
      | <view definition>
      | <grant statement>
      | <domain definition>
      | <character set definition>
      | <collation definition>
      | <translation definition>
      | <assertion definition>

  <schema definition> ::=
      CREATE SCHEMA <schema name clause>
        [ <schema character set specification> ]
        [ <schema element>... ]

  <schema name clause> ::=
        <schema name>
      | AUTHORIZATION <schema authorization identifier>
      | <schema name> AUTHORIZATION
            <schema authorization identifier>

  <schema authorization identifier> ::=
      <authorization identifier>

  <schema character set specification> ::=
      DEFAULT CHARACTER
          SET <character set specification>

  <schema element> ::=
        <domain definition>
      | <table definition>
      | <view definition>
      | <grant statement>
      | <assertion definition>
      | <character set definition>
      | <collation definition>
      | <translation definition>

  <domain definition> ::=
      CREATE DOMAIN <domain name>
          [ AS ] <data type>
        [ <default clause> ]
        [ <domain constraint>... ]
        [ <collate clause> ]

  <domain constraint> ::=
      [ <constraint name definition> ]
      <check constraint definition> [ <constraint attributes> ]

  <table definition> ::=
      CREATE [ ( GLOBAL | LOCAL ) TEMPORARY ] TABLE
          <table name>
        <table element list>
        [ ON COMMIT ( DELETE | PRESERVE ) ROWS ]

  <view definition> ::=
      CREATE VIEW <table name> [ <left paren> <view column list>
                                    <right paren> ]
        AS <query expression>
        [ WITH [ <levels clause> ] CHECK OPTION ]

  <view column list> ::= <column name list>

  <levels clause> ::=
      CASCADED | LOCAL

  <grant statement> ::=
     GRANT <privileges> ON <object name>
       TO <grantee> [ ( <comma> <grantee> )... ]
         [ WITH GRANT OPTION ]

  <privileges> ::=
        ALL PRIVILEGES
      | <action list>

  <action list> ::= <action> [ ( <comma> <action> )... ]

  <action> ::=
        SELECT
      | DELETE
      | INSERT [ <left paren> <privilege column list> <right paren> ]
      | UPDATE [ <left paren> <privilege column list> <right paren> ]
      | REFERENCES [ <left paren> <privilege column list> <right paren> ]
      | USAGE

  <privilege column list> ::= <column name list>

  <object name> ::=
        [ TABLE ] <table name>
      | DOMAIN <domain name>
      | COLLATION <collation name>
      | CHARACTER SET <character set name>
      | TRANSLATION <translation name>

  <grantee> ::=
        PUBLIC
      | <authorization identifier>

  <assertion definition> ::=
      CREATE ASSERTION <constraint name> <assertion check>
        [ <constraint attributes> ]

  <assertion check> ::=
      CHECK
          <left paren> <search condition> <right paren>

  <character set definition> ::=
      CREATE CHARACTER SET <character set name>
          [ AS ]
        <character set source>
        [ <collate clause> | <limited collation definition> ]

  <character set source> ::=
        GET <existing character set name>

  <existing character set name> ::=
        <standard character repertoire name>
      | <implementation-defined character repertoire name>
      | <schema character set name>

  <schema character set name> ::= <character set name>

  <limited collation definition> ::=
      COLLATION FROM <collation source>

  <collation source> ::=
        <collating sequence definition>
      | <translation collation>

  <collating sequence definition> ::=
        <external collation>
      | <schema collation name>
      | DESC <left paren> <collation name> <right paren>
      | DEFAULT

  <external collation> ::=
      EXTERNAL <left paren> <quote> <external collation name> <quote> <right paren>

  <external collation name> ::=
        <standard collation name>
      | <implementation-defined collation name>

  <standard collation name> ::= <collation name>

  <implementation-defined collation name> ::= <collation name>

  <schema collation name> ::= <collation name>

  <translation collation> ::=
      TRANSLATION <translation name>
          [ THEN COLLATION <collation name> ]

  <collation definition> ::=
      CREATE COLLATION <collation name> FOR
          <character set specification>
        FROM <collation source>
          [ <pad attribute> ]

  <pad attribute> ::=
        NO PAD
      | PAD SPACE

  <translation definition> ::=
      CREATE TRANSLATION <translation name>
        FOR <source character set specification>
          TO <target character set specification>
        FROM <translation source>

  <source character set specification> ::= <character set specification>

  <target character set specification> ::= <character set specification>

  <translation source> ::=
        <translation specification>

  <translation specification> ::=
        <external translation>
      | IDENTITY
      | <schema translation name>

  <external translation> ::=
      EXTERNAL <left paren> <quote> <external translation name> <quote> <right paren>

  <external translation name> ::=
        <standard translation name>
      | <implementation-defined translation name>

  <standard translation name> ::= <translation name>

  <implementation-defined translation name> ::= <translation name>

  <schema translation name> ::= <translation name>

  <SQL schema manipulation statement> ::=
        <drop schema statement>
      | <alter table statement>
      | <drop table statement>
      | <drop view statement>
      | <revoke statement>
      | <alter domain statement>
      | <drop domain statement>
      | <drop character set statement>
      | <drop collation statement>
      | <drop translation statement>
      | <drop assertion statement>

  <drop schema statement> ::=
      DROP SCHEMA <schema name> <drop behavior>

  <drop behavior> ::= CASCADE | RESTRICT

  <alter table statement> ::=
      ALTER TABLE <table name> <alter table action>

  <alter table action> ::=
        <add column definition>
      | <alter column definition>
      | <drop column definition>
      | <add table constraint definition>
      | <drop table constraint definition>

  <add column definition> ::=
      ADD [ COLUMN ] <column definition>

  <alter column definition> ::=
      ALTER [ COLUMN ] <column name> <alter column action>

  <alter column action> ::=
        <set column default clause>
      | <drop column default clause>

  <set column default clause> ::=
      SET <default clause>

  <drop column default clause> ::=
      DROP DEFAULT

  <drop column definition> ::=
      DROP [ COLUMN ] <column name> <drop behavior>

  <add table constraint definition> ::=
      ADD <table constraint definition>

  <drop table constraint definition> ::=
      DROP CONSTRAINT <constraint name> <drop behavior>

  <drop table statement> ::=
      DROP TABLE <table name> <drop behavior>

  <drop view statement> ::=
      DROP VIEW <table name> <drop behavior>

  <revoke statement> ::=
      REVOKE [ GRANT OPTION FOR ]
          <privileges>
          ON <object name>
        FROM <grantee> [ ( <comma> <grantee> )... ] <drop behavior>

  <alter domain statement> ::=
      ALTER DOMAIN <domain name> <alter domain action>

  <alter domain action> ::=
        <set domain default clause>
      | <drop domain default clause>
      | <add domain constraint definition>
      | <drop domain constraint definition>

  <set domain default clause> ::= SET <default clause>

  <drop domain default clause> ::= DROP DEFAULT

  <add domain constraint definition> ::=
      ADD <domain constraint>

  <drop domain constraint definition> ::=
      DROP CONSTRAINT <constraint name>

  <drop domain statement> ::=
      DROP DOMAIN <domain name> <drop behavior>

  <drop character set statement> ::=
      DROP CHARACTER SET <character set name>

  <drop collation statement> ::=
      DROP COLLATION <collation name>

  <drop translation statement> ::=
      DROP TRANSLATION <translation name>

  <drop assertion statement> ::=
      DROP ASSERTION <constraint name>

  <SQL data statement> ::=
        <open statement>
      | <fetch statement>
      | <close statement>
      | <select statement: single row>
      | <SQL data change statement>

  <open statement> ::=
      OPEN <cursor name>

  <fetch statement> ::=
      FETCH [ [ <fetch orientation> ] FROM ]
        <cursor name> INTO <fetch target list>

  <fetch orientation> ::=
        NEXT
      | PRIOR
      | FIRST
      | LAST
      | ( ABSOLUTE | RELATIVE ) <simple value specification>

  <simple value specification> ::=
        <parameter name>
      | <embedded variable name>
      | <literal>

  <fetch target list> ::=
      <target specification> [ ( <comma> <target specification> )... ]

  <target specification> ::=
        <parameter specification>
      | <variable specification>

  <close statement> ::=
      CLOSE <cursor name>

  <select statement: single row> ::=
      SELECT [ <set quantifier> ] <select list>
        INTO <select target list>
          <table expression>

  <select target list> ::=
      <target specification> [ ( <comma> <target specification> )... ]

  <SQL data change statement> ::=
        <delete statement: positioned>
      | <delete statement: searched>
      | <insert statement>
      | <update statement: positioned>
      | <update statement: searched>

  <delete statement: positioned> ::=
      DELETE FROM <table name>
        WHERE CURRENT OF <cursor name>

  <delete statement: searched> ::=
      DELETE FROM <table name>
        [ WHERE <search condition> ]

  <insert statement> ::=
      INSERT INTO <table name>
        <insert columns and source>

  <insert columns and source> ::=
        [ <left paren> <insert column list> <right paren> ]
              <query expression>
      | DEFAULT VALUES

  <insert column list> ::= <column name list>

  <update statement: positioned> ::=
      UPDATE <table name>
        SET <set clause list>
          WHERE CURRENT OF <cursor name>

  <set clause list> ::=
      <set clause> [ ( <comma> <set clause> )... ]

  <set clause> ::=
      <object column> <equals operator> <update source>

  <object column> ::= <column name>

  <update source> ::=
        <value expression>
      | <null specification>
      | DEFAULT

  <update statement: searched> ::=
      UPDATE <table name>
        SET <set clause list>
        [ WHERE <search condition> ]

  <SQL transaction statement> ::=
        <set transaction statement>
      | <set constraints mode statement>
      | <commit statement>
      | <rollback statement>

  <set transaction statement> ::=
      SET TRANSACTION <transaction mode>
          [ ( <comma> <transaction mode> )... ]

  <transaction mode> ::=
        <isolation level>
      | <transaction access mode>
      | <diagnostics size>

  <isolation level> ::=
      ISOLATION LEVEL <level of isolation>

  <level of isolation> ::=
        READ UNCOMMITTED
      | READ COMMITTED
      | REPEATABLE READ
      | SERIALIZABLE

  <transaction access mode> ::=
        READ ONLY
      | READ WRITE

  <diagnostics size> ::=
      DIAGNOSTICS SIZE <number of conditions>

  <number of conditions> ::= <simple value specification>

  <set constraints mode statement> ::=
      SET CONSTRAINTS <constraint name list>
          ( DEFERRED | IMMEDIATE )

  <constraint name list> ::=
        ALL
      | <constraint name> [ ( <comma> <constraint name> )... ]

  <commit statement> ::=
      COMMIT [ WORK ]

  <rollback statement> ::=
      ROLLBACK [ WORK ]

  <SQL connection statement> ::=
        <connect statement>
      | <set connection statement>
      | <disconnect statement>

  <connect statement> ::=
      CONNECT TO <connection target>

  <connection target> ::=
        <SQL-server name>
          [ AS <connection name> ]
            correspondence with Tony Gordon)
          [ USER <user name> ]
      | DEFAULT

  <SQL-server name> ::= <simple value specification>

  <connection name> ::= <simple value specification>

  <user name> ::= <simple value specification>

  <set connection statement> ::=
      SET CONNECTION <connection object>

  <connection object> ::=
        DEFAULT
      | <connection name>

  <disconnect statement> ::=
      DISCONNECT <disconnect object>

  <disconnect object> ::=
        <connection object>
      | ALL
      | CURRENT

  <SQL session statement> ::=
        <set catalog statement>
      | <set schema statement>
      | <set names statement>
      | <set session authorization identifier statement>
      | <set local time zone statement>

  <set catalog statement> ::=
      SET CATALOG <value specification>

  <value specification> ::=
        <literal>
      | <general value specification>

  <set schema statement> ::=
      SET SCHEMA <value specification>

  <set names statement> ::=
      SET NAMES <value specification>

  <set session authorization identifier statement> ::=
      SET SESSION AUTHORIZATION
          <value specification>

  <set local time zone statement> ::=
      SET TIME ZONE
          <set time zone value>
  <set time zone value> ::=
        <interval value expression>
      | LOCAL

  <SQL dynamic statement> ::=
        <system descriptor statement>
      | <prepare statement>
      | <deallocate prepared statement>
      | <describe statement>
      | <execute statement>
      | <execute immediate statement>
      | <SQL dynamic data statement>

  <system descriptor statement> ::=
        <allocate descriptor statement>
      | <deallocate descriptor statement>
      | <set descriptor statement>
      | <get descriptor statement>

  <allocate descriptor statement> ::=
      ALLOCATE DESCRIPTOR <descriptor name>
         [ WITH MAX <occurrences> ]

  <descriptor name> ::=
      [ <scope option> ] <simple value specification>

  <scope option> ::=
        GLOBAL
      | LOCAL

  <occurrences> ::= <simple value specification>

  <deallocate descriptor statement> ::=
      DEALLOCATE DESCRIPTOR <descriptor name>

  <set descriptor statement> ::=
      SET DESCRIPTOR <descriptor name>
          <set descriptor information>

  <set descriptor information> ::=
        <set count>
      | VALUE <item number>
          <set item information> [ ( <comma> <set item information> )... ]

  <set count> ::=
      COUNT <equals operator> <simple value specification 1>

  <simple value specification 1> ::= <simple value specification>

  <item number> ::= <simple value specification>

  <set item information> ::=
      <descriptor item name> <equals operator> <simple value specification 2>

  <descriptor item name> ::=
        TYPE
      | LENGTH
      | OCTET_LENGTH
      | RETURNED_LENGTH
      | RETURNED_OCTET_LENGTH
      | PRECISION
      | SCALE
      | DATETIME_INTERVAL_CODE
      | DATETIME_INTERVAL_PRECISION
      | NULLABLE
      | INDICATOR
      | DATA
      | NAME
      | UNNAMED
      | COLLATION_CATALOG
      | COLLATION_SCHEMA
      | COLLATION_NAME
      | CHARACTER_SET_CATALOG
      | CHARACTER_SET_SCHEMA
      | CHARACTER_SET_NAME

  <simple value specification 2> ::= <simple value specification>

  <item number> ::= <simple value specification>

  <get descriptor statement> ::=
      GET DESCRIPTOR <descriptor name> <get descriptor information>

  <get descriptor information> ::=
        <get count>
      | VALUE <item number>
          <get item information> [ ( <comma> <get item information> )... ]

  <get count> ::=
      <simple target specification 1> <equals operator>
           COUNT

  <simple target specification 1> ::= <simple target specification>

  <simple target specification> ::=
        <parameter name>
      | <embedded variable name>

  <get item information> ::=
      <simple target specification 2> <equals operator> <descriptor item name>>

  <simple target specification 2> ::= <simple target specification>

  <prepare statement> ::=
      PREPARE <SQL statement name> FROM <SQL statement variable>

  <SQL statement name> ::=
        <statement name>
      | <extended statement name>

  <extended statement name> ::=
      [ <scope option> ] <simple value specification>

  <SQL statement variable> ::= <simple value specification>

  <deallocate prepared statement> ::=
      DEALLOCATE PREPARE <SQL statement name>

  <describe statement> ::=
        <describe input statement>
      | <describe output statement>

  <describe input statement> ::=
      DESCRIBE INPUT <SQL statement name> <using descriptor>

  <using descriptor> ::=
      ( USING | INTO ) SQL DESCRIPTOR <descriptor name>

  <describe output statement> ::=
      DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>

  <execute statement> ::=
      EXECUTE <SQL statement name>
        [ <result using clause> ]
        [ <parameter using clause> ]

  <result using clause> ::= <using clause>

  <using clause> ::=
        <using arguments>
      | <using descriptor>

  <using arguments> ::=
      ( USING | INTO ) <argument> [ ( <comma> <argument> )... ]

  <argument> ::= <target specification>

  <parameter using clause> ::= <using clause>

  <execute immediate statement> ::=
      EXECUTE IMMEDIATE <SQL statement variable>

  <SQL dynamic data statement> ::=
        <allocate cursor statement>
      | <dynamic open statement>
      | <dynamic fetch statement>
      | <dynamic close statement>
      | <dynamic delete statement: positioned>
      | <dynamic update statement: positioned>

  <allocate cursor statement> ::=
      ALLOCATE <extended cursor name> [ INSENSITIVE ]
          [ SCROLL ] CURSOR
        FOR <extended statement name>

  <extended cursor name> ::=
      [ <scope option> ] <simple value specification>

  <dynamic open statement> ::=
      OPEN <dynamic cursor name> [ <using clause> ]

  <dynamic cursor name> ::=
        <cursor name>
      | <extended cursor name>

  <dynamic fetch statement> ::=
      FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
          <using clause>

  <dynamic close statement> ::=
      CLOSE <dynamic cursor name>

  <dynamic delete statement: positioned> ::=
      DELETE FROM <table name>
        WHERE CURRENT OF
            <dynamic cursor name>

  <dynamic update statement: positioned> ::=
      UPDATE <table name>
        SET <set clause>
            [ ( <comma> <set clause> )... ]
          WHERE CURRENT OF
              <dynamic cursor name>

  <SQL diagnostics statement> ::=
      <get diagnostics statement>

  <get diagnostics statement> ::=
      GET DIAGNOSTICS <sql diagnostics information>

  <sql diagnostics information> ::=
        <statement information>
      | <condition information>

  <statement information> ::=
      <statement information item> [ ( <comma> <statement information item> )... ]

  <statement information item> ::=
      <simple target specification> <equals operator> <statement information item name>

  <statement information item name> ::=
        NUMBER
      | MORE
      | COMMAND_FUNCTION
      | DYNAMIC_FUNCTION
      | ROW_COUNT

  <condition information> ::=
      EXCEPTION <condition number>
        <condition information item> [ ( <comma> <condition information item> )... ]

  <condition number> ::= <simple value specification>

  <condition information item> ::=
      <simple target specification> <equals operator> <condition information item name>

  <condition information item name> ::=
        CONDITION_NUMBER
      | RETURNED_SQLSTATE
      | CLASS_ORIGIN
      | SUBCLASS_ORIGIN
      | SERVER_NAME
      | CONNECTION_NAME
      | CONSTRAINT_CATALOG
      | CONSTRAINT_SCHEMA
      | CONSTRAINT_NAME
      | CATALOG_NAME
      | SCHEMA_NAME
      | TABLE_NAME
      | COLUMN_NAME
      | CURSOR_NAME
      | MESSAGE_TEXT
      | MESSAGE_LENGTH
      | MESSAGE_OCTET_LENGTH

  <embedded SQL host program> ::=
        <embedded SQL Ada program>
      | <embedded SQL C program>
      | <embedded SQL COBOL program>
      | <embedded SQL Fortran program>
      | <embedded SQL MUMPS program>
      | <embedded SQL Pascal program>
      | <embedded SQL PL/I program>

  <embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL C program> ::=
        !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL Fortran program> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL Pascal program> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)

  <embedded SQL declare section> ::=
        <embedded SQL begin declare>
          [ <embedded character set declaration> ]
          [ <host variable definition>... ]
        <embedded SQL end declare>
      | <embedded SQL MUMPS declare>

  <embedded SQL begin declare> ::=
      <SQL prefix> BEGIN DECLARE SECTION
          [ <SQL terminator> ]

  <SQL prefix> ::=
        EXEC SQL
      | <ampersand>SQL<left paren>

  <SQL terminator> ::=
        END-EXEC
      | <semicolon>
      | <right paren>

  <embedded character set declaration> ::=
      SQL NAMES ARE <character set specification>

  <host variable definition> ::=
        <Ada variable definition>
      | <C variable definition>
      | <COBOL variable definition>
      | <Fortran variable definition>
      | <MUMPS variable definition>
      | <Pascal variable definition>
      | <PL/I variable definition>

  <Ada variable definition> ::=
      <Ada host identifier> [ ( <comma> <Ada host identifier> )... ] :
      <Ada type specification> [ <Ada initial value> ]

  <Ada type specification> ::=
        <Ada qualified type specification>
      | <Ada unqualified type specification>

  <Ada qualified type specification> ::=
        SQL_STANDARD.CHAR [ CHARACTER SET
           [ IS ] <character set specification> ]
            <left paren> 1 <double period> <length> <right paren>
      | SQL_STANDARD.BIT
            <left paren> 1 <double period> <length> <right paren>
      | SQL_STANDARD.SMALLINT
      | SQL_STANDARD.INT
      | SQL_STANDARD.REAL
      | SQL_STANDARD.DOUBLE_PRECISION
      | SQL_STANDARD.SQLCODE_TYPE
      | SQL_STANDARD.SQLSTATE_TYPE
      | SQL_STANDARD.INDICATOR_TYPE

  <Ada unqualified type specification> ::=
        CHAR
            <left paren> 1 <double period> <length> <right paren>
      | BIT
            <left paren> 1 <double period> <length> <right paren>
      | SMALLINT
      | INT
      | REAL
      | DOUBLE_PRECISION
      | SQLCODE_TYPE
      | SQLSTATE_TYPE
      | INDICATOR_TYPE

  <Ada initial value> ::=
      <Ada assignment operator> <character representation>...

  <Ada assignment operator> ::= <colon><equals operator>

  <C variable definition> ::=
        [ <C storage class> ]
        [ <C class modifier> ]
        <C variable specification>
      <semicolon>

  <C storage class> ::=
        auto
      | extern
      | static

  <C class modifier> ::= const | volatile

  <C variable specification> ::=
        <C numeric variable>
      | <C character variable>
      | <C derived variable>

  <C numeric variable> ::=
      ( long | short | float | double )
        <C host identifier> [ <C initial value> ]
              [ ( <comma> <C host identifier> [ <C initial value> ] )... ]

  <C initial value> ::=
      <equals operator> <character representation>...

  <C character variable> ::=
      char [ CHARACTER SET
               [ IS ] <character set specification> ]
        <C host identifier>
          <C array specification> [ <C initial value> ]
          [ ( <comma> <C host identifier>
            <C array specification>
                   [ <C initial value> ] )... ]

  <C array specification> ::=
      <left bracket> <length> <right bracket>

  <C derived variable> ::=
        <C VARCHAR variable>
      | <C bit variable>

  <C VARCHAR variable> ::=
      VARCHAR [ CHARACTER SET [ IS ]
          <character set specification> ]
          <C host identifier>
              <C array specification> [ <C initial value> ]
            [ ( <comma> <C host identifier>
                <C array specification>
                        [ <C initial value> ] )... ]

  <C bit variable> ::=
      BIT <C host identifier>
          <C array specification> [ <C initial value> ]
        [ ( <comma> <C host identifier>
          <C array specification>
                     [ <C initial value> ] )... ]

  <COBOL variable definition> ::=
      (01|77) <COBOL host identifier> <COBOL type specification>
        [ <character representation>... ] <period>

  <COBOL type specification> ::=
        <COBOL character type>
      | <COBOL bit type>
      | <COBOL numeric type>
      | <COBOL integer type>

  <COBOL character type> ::=
      [ CHARACTER SET [ IS ]
            <character set specification> ]
      ( PIC | PICTURE ) [ IS ] ( X [ <left paren> <length> <right paren> ] )...

  <COBOL bit type> ::=
      ( PIC | PICTURE ) [ IS ]
          ( B [ <left paren> <length> <right paren> ] )...

  <COBOL numeric type> ::=
      ( PIC | PICTURE ) [ IS ]
        S <COBOL nines specification>
      [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE

  <COBOL nines specification> ::=
        <COBOL nines> [ V [ <COBOL nines> ] ]
      | V <COBOL nines>

  <COBOL nines> ::= ( 9 [ <left paren> <length> <right paren> ] )...

  <COBOL integer type> ::=
        <COBOL computational integer>
      | <COBOL binary integer>

  <COBOL computational integer> ::=
      ( PIC | PICTURE ) [ IS ] S<COBOL nines>
        [ USAGE [ IS ] ] ( COMP | COMPUTATIONAL )

  <COBOL binary integer> ::=
      ( PIC | PICTURE ) [ IS ] S<COBOL nines>
        [ USAGE [ IS ] ] BINARY

  <Fortran variable definition> ::=
      <Fortran type specification>
      <Fortran host identifier>
          [ ( <comma> <Fortran host identifier> )... ]

  <Fortran type specification> ::=
        CHARACTER [ <asterisk> <length> ]
            [ CHARACTER SET [ IS ]
                  <character set specification> ]
      | BIT [ <asterisk> <length> ]
      | INTEGER
      | REAL
      | DOUBLE PRECISION

  <MUMPS variable definition> ::=
      ( <MUMPS numeric variable> | <MUMPS character variable> )
          <semicolon>

  <MUMPS numeric variable> ::=
      <MUMPS type specification>
        <MUMPS host identifier> [ ( <comma> <MUMPS host identifier> )... ]

  <MUMPS type specification> ::=
        INT
      | DEC
            [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
      | REAL

  <MUMPS character variable> ::=
      VARCHAR <MUMPS host identifier> <MUMPS length specification>
        [ ( <comma> <MUMPS host identifier> <MUMPS length specification> )... ]

  <MUMPS length specification> ::=
      <left paren> <length> <right paren>

  <Pascal variable definition> ::=
      <Pascal host identifier> [ ( <comma> <Pascal host identifier> )... ] <colon>
        <Pascal type specification> <semicolon>

  <Pascal type specification> ::=
        PACKED ARRAY
            <left bracket> 1 <double period> <length> <right bracket>
          OF CHAR
            [ CHARACTER SET [ IS ]
                  <character set specification> ]
      | PACKED ARRAY
            <left bracket> 1 <double period> <length> <right bracket>
          OF BIT
      | INTEGER
      | REAL
      | CHAR [ CHARACTER SET
                                  [ IS ] <character set specification> ]
      | BIT

  <PL/I variable definition> ::=
      (DCL | DECLARE)
          (   <PL/I host identifier>
            | <left paren> <PL/I host identifier>
                  [ ( <comma> <PL/I host identifier> )... ] <right paren> )
      <PL/I type specification>
      [ <character representation>... ] <semicolon>

  <PL/I type specification> ::=
        ( CHAR | CHARACTER ) [ VARYING ]
            <left paren><length><right paren>
            [ CHARACTER SET
                  [ IS ] <character set specification> ]
      | BIT [ VARYING ] <left paren><length><right paren>
      | <PL/I type fixed decimal> <left paren> <precision>
            [ <comma> <scale> ] <right paren>
      | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
      | <PL/I type float binary> <left paren> <precision> <right paren>

  <PL/I type fixed decimal> ::=
        ( DEC | DECIMAL ) FIXED
      | FIXED ( DEC | DECIMAL )

  <PL/I type fixed binary> ::=
        ( BIN | BINARY ) FIXED
      | FIXED ( BIN | BINARY )

  <PL/I type float binary> ::=
        ( BIN | BINARY ) FLOAT
      | FLOAT ( BIN | BINARY )

  <embedded SQL end declare> ::=
      <SQL prefix> END DECLARE SECTION
          [ <SQL terminator> ]

  <embedded SQL MUMPS declare> ::=
      <SQL prefix>
        BEGIN DECLARE SECTION
          [ <embedded character set declaration> ]
          [ <host variable definition>... ]
        END DECLARE SECTION
      <SQL terminator>

  <embedded SQL statement> ::=
      <SQL prefix>
        <statement or declaration>
      [ <SQL terminator> ]

  <statement or declaration> ::=
        <declare cursor>
      | <dynamic declare cursor>
      | <temporary table declaration>
      | <embedded exception declaration>
      | <SQL procedure statement>

  <embedded exception declaration> ::=
      WHENEVER <condition> <condition action>

  <condition> ::=
      SQLERROR | NOT FOUND

  <condition action> ::=
      CONTINUE | <go to>

  <go to> ::=
      ( GOTO | GO TO ) <goto target>

  <goto target> ::=
        <host label identifier>
      | <unsigned integer>
      | <host PL/I label variable>

  <host label identifier> ::= !!<EMPHASIS>(See the Syntax Rules.)

  <host PL/I label variable> ::= !!<EMPHASIS>(See the Syntax Rules.)

  <preparable statement> ::=
        <preparable SQL data statement>
      | <preparable SQL schema statement>
      | <preparable SQL transaction statement>
      | <preparable SQL session statement>
      | <preparable implementation-defined statement>

  <preparable SQL data statement> ::=
        <delete statement: searched>
      | <dynamic single row select statement>
      | <insert statement>
      | <dynamic select statement>
      | <update statement: searched>
      | <preparable dynamic delete statement: positioned>
      | <preparable dynamic update statement: positioned>

  <dynamic single row select statement> ::= <query specification>

  <dynamic select statement> ::= <cursor specification>

  <preparable dynamic delete statement: positioned> ::=
     DELETE [ FROM <table name> ]
        WHERE CURRENT OF <cursor name>

  <preparable dynamic update statement: positioned> ::=
     UPDATE [ <table name> ]
        SET <set clause list>
        WHERE CURRENT OF <cursor name>

  <preparable SQL schema statement> ::=
        <SQL schema statement>

  <preparable SQL transaction statement> ::=
        <SQL transaction statement>

  <preparable SQL session statement> ::=
        <SQL session statement>

  <preparable implementation-defined statement> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

  <direct SQL statement> ::=
      <directly executable statement> <semicolon>

  <directly executable statement> ::=
        <direct SQL data statement>
      | <SQL schema statement>
      | <SQL transaction statement>
      | <SQL connection statement>
      | <SQL session statement>
      | <direct implementation-defined statement>

  <direct SQL data statement> ::=
        <delete statement: searched>
      | <direct select statement: multiple rows>
      | <insert statement>
      | <update statement: searched>
      | <temporary table declaration>

  <direct select statement: multiple rows> ::=
      <query expression> [ <order by clause> ]

  <direct implementation-defined statement> ::=
      !!<EMPHASIS>(See the Syntax Rules)

  <SQL object identifier> ::=
      <SQL provenance> <SQL variant>

  <SQL provenance> ::= <arc1> <arc2> <arc3>

  <arc1> ::= iso | 1 | iso <left paren> 1 <right paren>

  <arc2> ::= standard | 0 | standard <left paren> 0 <right paren>

  <arc3> ::= 9075

  <SQL variant> ::= <SQL edition> <SQL conformance>

  <SQL edition> ::= <1987> | <1989> | <1992>

  <1987> ::= 0 | edition1987 <left paren> 0 <right paren>

  <1989> ::= <1989 base> <1989 package>

  <1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>

  <1989 package> ::= <integrity no> | <integrity yes>
  <integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>

  <integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>

  <1992> ::= 2 | edition1992 <left paren> 2 <right paren>

  <SQL conformance> ::= <low> | <intermediate> | <high>

  <low> ::= 0 | Low <left paren> 0 <right paren>

  <intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>

  <high> ::= 2 | High <left paren> 2 <right paren>




  AAGG..  AAppppeennddiiccee BB -- TTuuttoorriieell SSQQLL  ll''uussaaggee ddeess ddbbuuttaannttss


  AAGG..11..  DDiiddaaccttiicciieell ppoouurr PPoossttggrreeSSQQLL

  Le didacticiel SQL est inclus dans la distribution de PostgreSQL.  Les
  scripts du didacticiel SQL se trouvent dans le rpertoire src/tutorial

  AAGG..22..  PPooiinntteeuurrss UURRLL IInntteerrnneett

  On peut trouver le didacticiel SQL pour dbutants 

    <http://w3.one.net/~jhoffman/sqltut.htm>

     Pour les commentaires ou suggestions, envoyer un courrier
     lectronique 

    jhoffman@one.net

     John Hoffman suggre de visiter les sites suivants :

    Rfrence SQL  <http://www.contrib.andrew.cmu.edu/~shadow/sql.html>

    Demandez SQL Pro  <http://www.inquiry.com/techtips/thesqlpro/>

    Sites utiles pour les BD relationnelles SQL Pro
     <http://www.inquiry.com/techtips/thesqlpro/usefulsites.html>

    Le site du programmeur
     <http://infoweb.magi.com/~steve/develop.html>

    Sites  <http://info.itu.ch/special/wwwfiles> Go here and see file
     comp_db.html

    Ingrdients DB  <http://www.compapp.dcu.ie/databases/f017.html>

    Web Authoring  <http://www.stars.com/Tutorial/CGI/>

    Dictionnaire informatique  <http://wfn-shop.princeton.edu/cgi-
     bin/foldoc>

    DBMS Lab/Links  <http://www-ccs.cs.umass.edu/db.html>

    FAQ SQL
     <http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ> Et l,
     consultez le fichier SQL_TOC.html

    Bases de donnes SQL
     <http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html>
    Page de conception de la base de donne RIT
     <http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.html>

    Site de renvoi sur les Bases de Donnes
     <http://www.pcslink.com/~ej/dbweb.html>

    Didacticiels de programmation sur le Web
     <http://www.eng.uc.edu/~jtilley/tutorial.html>

    Ressources de dveloppement
     <http://www.ndev.com/ndc2/support/resources.htp>

    Liste de requte  <http://ashok.pair.com/sql.htm>

    Diverses IMAGES SQL
     <http://jazz.external.hp.com/training/sqltables/main.html>

    Liste de ressources Internet
     <http://www.eit.com/web/netservices.html>

  AAHH..  AAppppeennddiixx CC -- IInnssttrruuccttiioonnss ppoouurr uunnee iinnssttaallllaattiioonn rraappiiddee ddee LLiinnuuxx

  Si vous envisagez d'utiliser PostgreSQL sous Linux, et avez besoin
  d'aide dans l'installation de Linux, consultez les pointeurs donns
  dans cette annexe.  Ils couvrent les sujets suivants :

    Fonctionnalits saillantes de Linux - Pourquoi Linux constitue un
     meilleur serveur de donnes que Windows 95/NT

    Instructions pour une installation rapide de Linux en 10 minutes

    Liste des analogies Microsoft-Linux

    tapes rapides pour recompiler le noyau Linux


    Site principal   <http://members.spree.com/technology/aldev/>

    Site miroir  <http://aldev.8m.com>

    Site miroir  <http://aldev.webjump.com>

    Site miroir  <http://homepages.infoseek.com/~aldev1/index.html>

    Site miroir  <http://www3.bcity.com/aldev/>





















