  Database-SQL-RDBMS HOW-TO pour Linux
  Al Dev (Alavoor Vasudevan)        aldev@hotmail.com
  v6.0, 12 Avril 1998, version francaise Mai 1998

  Ce  document est un "guide pratique" pour la mise en place rapide d'un
  moteur de Base de Donnees SQL et des outils frontaux  sur  un  systeme
  Unix.  Il  traite egalement du langage standard International ANSI/ISO
  SQL et passe en revue les merites/avantages d'un  moteur  de  Base  de
  Donnees  developpe  dans le cadre mondial de l'environnement de devel-
  oppement ouvert d'internet.  Ce document explique  COMMENT  mettre  en
  place  une Base de Donnees Relationnelle SQL Objet de la nouvelle gen-
  eration "PostgreSQL" sur votre systeme unix qui pourra  etre  utilisee
  comme Base de Donnees Serveur d'Application ou Serveur Web. PostgreSQL
  se rapproche chaque mois un peu plus des normes Internationales ISO et
  ANSI  SQL 1998,92,89. Ce document donne aussi des informations sur les
  programmes d'interface a la base de donnees tels  que  frontaux  GUIs,
  outils RAD (Developpement Rapide d'Application ), interfacage des lan-
  gages de programmation ("C", "C++", Java, Perl),  pilotes  ODBC,  JDBC
  ainsi  que sur les outils et programmes interfacage d'une Base de Don-
  nees Web . L'information donnee ici est  valable  pour  toutes  autres
  plates-formes  unix et autres Bases de Donnees. Cette information sera
  tres utile aux nouveaux utilisateurs des Bases de  Donnees,  de  Post-
  greSQL  et  du langage SQL.  Ce document comporte aussi un didacticiel
  SQL et les specifications de la syntaxe  SQL  qui  devrait  etre  tres
  utile aux debutants. Les gens experimentes trouveront dans ce document
  un guide de reference tres pratique. Pour les etudiants, l'information
  donnee  ici leur permettra d'obtenir le code source du Systeme de Ges-
  tion de Base de Donnees Relationnel (SGBDR) PostgreSQL a partir duquel
  ils pourront etudier comment un moteur de SGBDR SQL est ecrit.

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

  Le  but  de  ce document est de fournir des pointeurs/URL detailles de
  facon a mettre rapidement en oeuvre PostgreSQL et de mettre  en  avant
  l'interet des systemes a Code Source Ouvert tel que PostgreSQL.

  Tout systeme informatique au monde a besoin d'une base de donnees pour
  stocker/retrouver  les  informations.  Sans  base   de   donnees,   un
  ordinateur  devient  inutile.  La  premiere  raison  pour  laquelle on
  utilise  un  ordinateur  est  de   stocker,   retrouver   et   traiter
  l'information  et  de  faire  cela  tres rapidement, et donc, de faire
  economiser du temps. En  meme  temps  le  systeme  doit  etre  simple,
  robuste,  rapide,  fiable,  economique  et  d'utilisation  aisee.  Les
  systemes de gestion de base de donnees les plus  courants  sont  bases
  sur  les  specifications ISO (International Standard Organisation) SQL
  lesquelles sont egalement basees sur les normes americaines ANSI  SQL.
  Les specifications courantes generalement utilisees sont l'ANSI SQL 92
  et l'ANSI SQL 89. La prochaine norme est la SQL 1998/99 aussi  appelee
  SQL-3.  Les  systemes de gestion de bases de donnees les plus repandus
  tels que Oracle, Sybase et Informix s'appuient sur  ces  standards  ou
  essaient de les implementer.

  Ainsi  qu'il est indique dans ce document, il y a plus de 20 varietes,
  commerciales/internet,  de systemes de  gestion  de  base  de  donnees
  actuellement utilises dans le monde et beaucoup, beaucoup plus dans un
  futur proche. En l'absence d'une norme telle que  l'ANSI/ISO  SQL,  il
  serait tres difficile pour l'utilisateur de developper une application
  une fois pour toutes et  de  l'utiliser  avec  tous  les  systemes  de
  gestion   de   bases   de  donnees.  Aujourd'hui,  l'utilisateur  veut
  developper son application une  fois  pour  toutes  en  utilisant  les
  normes  ISO  SQL,  ODBC,  JDBC  et  la vendre afin qu'elle puisse etre
  utilisee sur une grande variete de systemes  de  gestion  de  base  de
  donnees a travers le monde.

  PostgreSQL  est la Base de Donnee LIBRE la plus populaire au monde qui
  implemente la plupart des normes ISO SQL, ANSI SQL/98, SQL/92 et  ANSI
  SQL/89  RDBMS.  PostgreSQL est une base de donnees relationnelle Objet
  de la nouvelle generation et les futures normes ANSI SQL tels  que  le
  SQL  1998 (SQL-3) et au-dela traiteront de maniere croissante de bases
  de donnees Objet et de types de donnees Objet. PostgreSQL est le  seul
  SGBD  (RDBMS  -  Relational  Data Base Management System) au monde qui
  supporte les bases de donnees Objet et SQL. Ce document vous  explique
  comment  installer  le systeme de gestion de base de donnees ainsi que
  tous les paquetages concernant les bases de donnees, comment mettre en
  place  la  base  de  donnees Web, la base de donnees application , les
  frontaux GUIs et  les  programmes  interfacage.  On  ne  saurait  trop
  RECOMMANDER   d'ecrire   vos  applications  bases  de  donnees  100  %
  compatibles avec les normes ISO/ANSI  SQL,  ODBC,  JDBC  ceci  rendant
  votre  application portable sur de multiples SGBD (Systemes de gestion
  de Bases de Donnees) tels que  PostgreSQL,  Oracle,  Sybase,  Informix
  etc.

  La  haute  qualite, et un large ensemble de possibilites de PostgreSQL
  viennent du fait que ce systeme est developpe suivant le  principe  du
  'Modele  de  developpement  a  Code Source Ouvert'. Les modeles a Code
  Source Ouvert sont ceux ou la totalite du code source est  fournie  et
  ou  le  developpement  se fait a travers l'internet par une tres large
  communaute de cerveaux humains  en  reseau.  La  tendance  future  des
  developpement  logiciels  reside  dans  ce que l'on appelle les "super
  autoroutes de l'information" qui s'etendent a travers le monde entier.
  Dans les annees a venir, la croissance d'internet va etre explosive et
  de ce fait favorisera l'adoption de PostgreSQL par les utilisateurs.

  Avec l'application des principes de la physique (quantique, classique,
  thermodynamique),  des  mathematiques et des statistiques a la qualite
  des logiciels, on obtient la meilleure qualite des logiciels  'a  Code
  Source  Ouvert'  tel  que  PostgreSQL  en  mettant  le code source des
  programmes a la disposition d'un  grand  nombre  de  cerveaux  humains
  interconnectes  par  les  super-autoroutes  de  l'information. Plus le
  nombre de cerveaux au travail sera grand, meilleure sera la qualite du
  logiciel  produit.  Le  modele  "a  Code Source Ouvert" evite aussi de
  rreei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  etant
  particulierement  economique,  en diminuant les delais de distribution
  et  en  suivant  les  lois  economiques  modernes  d'optimisation  des
  ressources  nationales  et  globales.   Une  fois qu'un logiciel a ete
  realise par d'autres, vous NN''AAVVEEZZ PPAASS a recommencer le  travail.  Vous
  ne  perdrez  pas  un  temps  precieux sur quelque chose qui a deja ete
  correctement realise.  Dans un  futur  proche,  a  l'aube  du  21-ieme
  siecle,  la  maniere  de  se  procurer  un  logiciel  va  changer. Les
  utilisateurs accorderont en premier lieu leur preference aux logiciels
  ouverts tel PostgreSQL.

  Acheter  un  logiciel  _p_e_u_t  devenir  une  attitude  archaique.  On  a
  seulement besoin d'acheter un bon materiel, il vaut mieux de  depenser
  de l'argent en materiel 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 effectue par le  materiel.
  Le  materiel  est  le cheval de bataille et le logiciel est la pour le
  piloter.  Le materiel est tellement plus  complique  que  seulement  6
  pays  sur  180  au  monde  ont demontre leur capacite a concevoir et a
  fabriquer  les  composants  d'ordinateurs.   La   conception   et   la
  fabrication  de  composants d'ordinateurs est une technologie avancee.
  C'est  un  processus  tres  complexe,   requerant   de   tres   larges
  investissements  en  usine  et en machines de production maitrisant la
  technologie des 0.18 micron.  Des  milliards  de  transistors/circuits
  sont implantes sur une petite puce de silicium.  Des compagnies telles
  que  AMD,  Intel,  Cyrix,  Hitachi,  Ibm   et   autres   ont   depense
  d'importantes  quantites  d'hommes-ans  de  travail pour maitriser des
  hautes technologies telles  que  la  Micro-electronique  et  la  Nano-
  electronique  (Micro  signifie  millionieme  de metre et Nano signifie
  milliardieme de metre).  La technologie  actuelle  utilise  la  micro-
  electronique  a  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
  meme la nano-electronique sera utilisees pour  les  circuits  integres
  d'ordinateurs.   Le  tableau  ci-dessous  montre  les  progres  et les
  tendances futures des puces d'ordinateurs.

                       Progres dans les capacites des puces dans le futur
                       **************************************************
       +---------------------------------+---------+---------+---------+---------+--------+
       | Item/Annee                      | 1997    | 1999    | 2001    | 2003    | 2012   |
       +---------------------------------+---------+---------+---------+---------+--------+
       | Technologie (micron)            | 0.25    | 0.18    | 0.15    | 0.13    | 0.05   |
       +---------------------------------+---------+---------+---------+---------+--------+
       | Taille de la puce(mm)           | 200     | 300     | 300     | 300     | 450    |
       +---------------------------------+---------+---------+---------+---------+--------+
       | Tension mini. de fonctionnement | 1.8-2.5 | 1.5-1.8 | 1.2-1.5 | 1.2-1.5 | 0.5-0.6|
       +---------------------------------+---------+---------+---------+---------+--------+
       | Puissance dissipee maximum      | 70      | 90      | 110     | 130     | 175    |
       +---------------------------------+---------+---------+---------+---------+--------+
       | frequence de fonct. puce  (MHz) | 750     | 1,250   | 1,500   | 2,100   | 10,000 |
       +---------------------------------+---------+---------+---------+---------+--------+
       | Capacite memoire DRAM           | 256 MB  | 1 GB    | 2 GB    | 4 GB    | 256 GB |
       +---------------------------------+---------+---------+---------+---------+--------+

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

  D'un  autre  cote, chaque pays au monde developpe/produit du logiciel.
  En fait, n'importe qui dans le monde, avec  un  petit  PC  economique,
  peut  creer  un  systeme serveur de base de donnees Oracle.  Mais cela
  lui prendra environ 10 ans (Le  serveur  de  base  de  donnees  Oracle
  correspond a plus de 10 hommes-ans de travail). Un homme-an correspond
  au travail d'un homme a temps plein pendant une annee. Si 10 personnes
  travaillent pendant un an cela correspond a 10 hommes-ans.

  Des SGBD tels que Oracle, Informix, Sybase, IBM DB2 (Unix) sont ecrits
  a 100% en langage C et les  binaires  crees  par  compilation  de  ces
  sources sont fournis aux clients.

  Puisqu'une  masse importante de travail a ete effectuee sur PostgreSQL
  au cours des 12 dernieres annees, cela n'aurait aucun sens de  recreer
  ex-nihilo  un autre systeme de gestion de base de donnees satisfaisant
  aux normes ANSI/ISO SQL. Il est bien plus interessant  de  prendre  le
  code existant de PostgreSQL, de commencer a l'utiliser, de l'ameliorer
  et d'y ajouter les fonctionnalites manquantes.

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

  On  peut predire que la demande de produits "Fabrique par Internet" va
  croitre exponentiellement. Ces produits etant  de  haute  qualite,  de
  faible  cout  et  ayant  une  base  d'utilisateurs  et de developpeurs
  extremement  large.   Les  pays  qui  n'utilisent  pas   les  produits
  "Fabrique  par Internet" seront les oublies de "la Revolution mondiale
  Internet" et resteront  loin  derriere  les  autres  pays.  La  raison
  provient  de ce "qu'Internet" lui-meme 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 publie en  10  formats  differents  qui  sont  -  DVI,
  Postscript,  Latex,  LyX, GNU-info, HTML, RTF(Rich Text Format), Texte
  simple, Pages de manuel Unix et SGML.

  +o  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/>

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

  +o  Des  traductions  dans  d'autres  langues  telles  que le Francais,
     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 redige a l'aide d'un outil appele "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 :

  +o  sgml2html databasehowto.sgml     (pour generer un fichier html)

  +o  sgml2rtf  databasehowto.sgml     (pour generer un fichier RTF)

  +o  sgml2latex databasehowto.sgml    (pour generer un fichier latex)

  Ce document se trouve a -

  +o  <http://sunsite.unc.edu/LDP/HOWTO/Database-HOWTO.html>

  Vous pouvez egalement le trouver sur les sites miroirs suivants -

  +o  <http://www.caldera.com/LDP/HOWTO/Database-HOWTO.html>

  +o  <http://www.WGS.com/LDP/HOWTO/Database-HOWTO.html>

  +o  <http://www.cc.gatech.edu/linux/LDP/HOWTO/Database-HOWTO.html>

  +o  <http://www.redhat.com/linux-info/ldp/HOWTO/Database-HOWTO.html>

  +o  Vous pouvez trouver d'autres sites miroirs proches de chez vous (au
     sens d'adresse reseau) a <http://sunsite.unc.edu/LDP/hmirrors.html>
     choisissez un site et allez dans le repertoire /LDP/HOWTO/Database-
     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
  controle | Applications | Publication | TeX.

               Pour lire le document, tapez la commande -
                       xdvi -geometry 80x90 howto.dvi
               Et redimensionnez l'ecran a l'aide du mulot. Consultez la page de manuel
       concernant xdvi.
               Pour naviguer dans le document, utilisez les touches Fleches, Page precedente
       ,Page suivante. Vous pouvez aussi utiliser les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n'
       pour vous deplacer vers le haut, vers le bas, au centre, vers la page precedente,
       Pour desactiver 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
  controle  |  Applications  |  Graphique.  Le programme gv est beuacoup
  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

               Pour utiliser ghostscript tapez -
                       ghostscript howto.ps

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

  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!!

  Les lois des sciences (Physique)  s'appliquent  partout,  toujours,  a
  tout  ce  que  vous  faites et meme aux projets logiciels tels que les
  systemes de bases de donnees.  La physique est en action  pendant  que
  vous  parlez  (ondes sonores), marchez (frottement entre le sol et vos
  pieds),   lisez   un   livre   ou   ecrivez   un   logiciel.    Chaque
  developpeur/utilisateur   de   logiciel   doit  posseder  une  culture
  scientifique de base minimum - en Physique, en Mecanique Quantique, en
  Thermodynamique, en Statistiques et en Mathematiques.  Je vous suggere
  de lire au moins un livre  "d'Introduction/de  Base"  sur  chacun  des
  sujets  ci-dessus.   Comme  en  sciences, c'est impossible de batir un
  logiciel de systeme de gestion de base de donnees qui soit  parfait  a
  100 % et exempt de bogues.  Mais en combinant l'energie de millions de
  personnnes, a travers le monde,  par  internet,  il  devient  possible
  d'arriver a un logiciel de gestion de base de donnees PPRREESSQQUUEE PPAARRFFAAIITT.
  Individuellemment, l'energie depensee par chacun sera minime, mais par
  la  mise  en  reseau  d'un grand nombre de personnes, l'energie totale
  pouvant etre consacree au projet de  creer  un  systeme  parfait  sera
  enorme.   Les cellules des cerveaux humains consomment de l'energie en
  travaillant (a la creation d'un logiciel), transformant  de  l'energie
  chimique  en  chaleur.   Meme pendant la lecture de ce paragraphe, les
  celllules de votre cerveau consomment du  carburant  et  utilisent  de
  l'energie. Donc INTERROMPEZ IMMEDIATEMENT VOTRE LECTURE!  Les cellules
  consomment de l'energie, en quantite si minime soit-elle!  Puisque  le
  cerveau  humain  est  une  machine  thermodynamique,  les  lois  de la
  thermodynamique s'y appliquent.  Et la thermodynamique  nous  enseigne
  qu'il est impossible de creer un systeme parfait (y compris logiciel).
  Ce qui implique que les  humains  ne  peuvent  pas  creer  de  systeme
  parfait.   Il  y  aura  toujours  des  bogues et des problemes dans le
  logiciel. La raison  vient  de  ce  que  la  thermodynamique  dit  que
  l'"Entropie"  d'un  systeme  s'accroit  toujours.  L'entropie  est une
  mesure de desordre.  Creer de  l'ordre,  tel  que  creer  'PostgreSQL'
  necessite  de  l'energie.   Mais il est parfaitement clair qu'internet
  peut mettre en reseau  un  grand  nombre  de  gens,  ce  qui  implique
  qu'internet  peut  creer  des  produits  logiciels  de  bien meilleure
  qualite, en un temps bien plus court, que des compagnies  commerciales
  telles  que  Microsoft, IBM et autres. Meme une grande compagnie comme
  Microsoft ne peut pas s'en affranchir et passer outre les lois  de  la
  physique mais doit s'y soumettre!

  Tous  ces  concepts  sont  prouves  mathematiquement  en utilisant des
  methodes de  calcul  sophistiquees,  la  thermodynamique  et  d'autres
  branches   de  la  physique.   Les  equations  mathematiques  et  leur
  discussion sortent du cadre de ce document.

  La conclusion a en tirer  est  que  la  science  aimerait  que  chaque
  developpeur et chaque utilisateur final de logiciel ait un esprit plus
  ouvert  et  donne  une  chance  aux  "produits  internet"   tels   que
  PostgreSQL, Linux, etc..

  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.3.1  patch  level 3 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  materielles
  sous differents Systemes d'Exploitation.

               Quelquefois des corrections urgentes d'erreurs sont diffusees apres la diffusion
               d'une revision de PostgreSQL. Vous pouvez appliquer ces rustines optionnelles
               selon les besoins de votre application. Effectuez les etapes suivantes pour
               appliquer ces rustines -
                       cd /usr/src/postgresql6.3.1
                       patch -p0 < patchfile
                       make clean
                       make
         Consultez egalement la page de manuel, en tapant 'man patch'

  Les fichiers rustines se trouvent dans

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

  L'objectif  ultime  et  le  but  final  de  PostgreSQL  est de devenir
  compatible a 100 % a la norme ANSI/ISO SQL ainsi  que  de  devenir  le
  numero  UN  mondial des systemes de gestion de Base de Donnees ouverts
  generiques.  PostgreSQL  guidera,  conduira,  controlera,  suivra   et
  dictera le futur de l'ANSI/ISO SQL.  C'est-a-dire, l'implementation et
  les idees apparaitront en premier dans  PostgreSQL  puis,  plus  tard,
  seront  incorpores  dans l'ANSI/ISO SQL. PostgreSQL represente "l'etat
  de l'art" de la technologie des bases de donnees.

  Le serveur Informix Universal (diffuse  en  1997)  est  base  sur  une
  version  precedente  de PostgreSQL car Informix a achete Illustra Inc.
  et l'a  integree  a  Informix.  La  base  de  donnees  Illustra  etait
  completement basee sur Postgres (version precedente de PostgreSQL).

  PostgreSQL  est  une  amelioration  du  SGBD  POSTGRES,  prototype  de
  recherche de SGBD de la  prochaine  generation.  PostgreSQL,  tout  en
  conservant  le  puissant modele de donnees et la richesse des types de
  donnees de POSTGRES, remplace le langage de requete  PostQuel  par  un
  sous-ensemble etendu de SQL.

  Le   developpement  de  PostgreSQL  est  realise  par  une  equipe  de
  developpeurs Internet qui sont tous inscrits a la liste  de  diffusion
  "PostgreSQL  developpement mailing list".  Son coordinateur actuel est
  Marc G. Fournier

  +o  scrappy@postgreSQL.org

     Cette equipe est maintenant responsable des developpements  actuels
     et futurs de PostgreSQL. Naturellement, l'utilisateur de la base de
     donnees est lui-meme  developpeur  de  PostgreSQL!.  La  charge  de
     developpement est repartie au sein d'un grand nombre d'utilisateurs
     finaux de bases de donnees sur internet.

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

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

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

  PostgreSQL peut stocker  plus  de  types  de  donnees  que  les  types
  traditionnels  entier, caracteres, etc. - L'utilisateur peut creer des
  types, des fonctions, de l'heritage 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 realisation.

  +o  Titre :           PostgreSQL SQL RDBMS Database (Systeme de Gestion
     de Base de Donnees Relationnelle Objet)

  +o  Version actuelle : 6.3.1 patch level 1

  +o  Age :           PostgreSQL a 12 ans. En developpement depuis 1985

  +o  Auteurs     :             Developpe      par      des      millions
     d'universites/compagnies  sur  internet  au  cours des 12 dernieres
     ANNEES

     PostgreSQL et les elements qui s'y rapportent dans ce document sont
     couverts par le COPYRIGHT suivant.

  PostgreSQL Systeme de Gestion de Base de Donnees

  Copyright (c) 1994-6  Conseil d'administration de l'universite de Californie

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

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

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

  55..  OOuu 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 deja postgresql  sous  forme  de
  paquetage (a la fois en code source et en binaires) au :

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

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

  +o  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  systemes
  d'exploitation Unix, ainsi que la documentation complete.

  +o  CDROM     PostgreSQL     au     site     Web    principal    a    :
     <http://www.postgresql.org> 29 (U.S. dollars)

  Distributions uniquement en binaire de PostgreSQL :

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

  +o  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 a ce site, cela peut etre utile aux autres.

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

  Sites WWW Web :

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

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

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

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

  +o  <http://xenium.pdi.net/PostgreSQL/>

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

  Les sites ftp sont indiques ci-dessous :-

  +o  Primaire FTP :       <ftp://ftp.postgresql.org/pub>

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

  +o  <ftp://ftp.emsi.priv.at/pub/postgres/>

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

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

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

  +o  <ftp://ftp.luga.or.at/pub/postgres95>

  +o  <ftp://postgres95.vnet.net:/pub/postgres95>

  +o  <ftp://ftpza.co.za/mirrors/postgres>

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

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

  +o  <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.

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

  66..  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neeeess eexxttrreem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  a  cpu  32-bit  decroissent  rapidement
  quand  la  taille  de  la base de donnees depasse 5 gigas. Vous pouvez
  faire tourner des bases de donnees de 30 gigas avec un cpu 32-bit  cpu
  mais  cela  ne  sera pas tres performant. Cette limitation est imposee
  par la quantite maximum de memoire RAM (maximum de 2 gigas seulement),
  la  limitation  de  la  taille  du systeme de fichier ainsi que par le
  systeme d'exploitation.

  Si vous avez  besoin  d'utiliser  des  bases  de  donnees  extremement
  grandes  (superieures  a  5  gigaoctets),  il est fortement recommande
  d'utiliser des machines 64-bit telles que :  Digital  Alpha  cpu,  Sun
  Ultra-sparc  64-bit  cpu,  Silicon  graphics 64-bit cpu, a venir 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'enormes
  bases  de  Donnees  et  de  grosses  requetes.  Les  performances   de
  PostgreSQL pour des interrogations sur de grandes tables et de grandes
  bases de donnees sera plus rapide de plusieurs ordres de grandeurs que
  sur  des  machines  a  cpu 32-bit . L'avantage des machines 64-bit est
  qu'elles disposent d'un grand espace d'adressage  memoire  et  que  le
  systeme d'exploitation peut gerer de tres grands systemes de fichiers.
  Cela permet des meilleures  performances  avec  de  grandes  bases  de
  donnees, plus de memoire centrale (RAM), plus de possibilites etc...

  77..  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 Regression" permet de s'assurer de son bon
  fonctionnement.  Il est inclus (src/test/regress) dans la distribution
  et  permet  a  l'ordinateur d'effectuer la verification des operations
  SQL standard ainsi que des capacites de PostgreSQL. L'avantage  de  ce
  test  effectue  par  l'ordinateur  vient  du  fait  que  celui-ci peut
  effectuer plusieurs millions de test SQL tres 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  plutot celle de
  l'esprit humain.

  Le paquetage de tests contient deja des  centaines  de  programmes  de
  test  SQL.   Vous pouvez lancer un test de regression puis venir, plus
  tard, jeter un oeil sur les resultats et voir si le test est  termine.

  Si c'est necessaire, vous pouvez en ajouter beaucoup d'autres. Dans ce
  cas penser a envoyer ces tests au site  PostgreSQL  primaire  si  vous
  pensez  que  cela  peut etre utile aux autres. Le paquetage de Test de
  Regression  permet  d'asseoir  la  confiance   des   utilisateurs   en
  PostgreSQL  et  facilite  le  deploiement rapide de PostgreSQL sur des
  systemes en production sans inquietude majeure.

  Le paquetage  "Test  de  Regression"  peut  etre  considere  comme  un
  document   technique   "tres  solide"  reconnu  mutuellement  par  les
  developpeurs et par les  utilisateurs  finaux.   Les  developpeurs  de
  PostgreSQL utilisent de facon intensive ce paquetage durant la periode
  de developpement et  egalement  avant  de  mettre  le  logiciel  a  la
  disposition des utilisateurs pour en assurer la parfaite qualite.

  88..    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))

  PostgreSQL  est  dote  d'une  librairie  d'interface  Tcl/Tk  dans  la
  distribution appelee 'pgtcl'. Tcl/Tk est  un  outil  de  developpement
  rapide  d'application et un langage de script extremement puissant. On
  developpe une fois pour toutes et on utilise sur NT, Win 95, Linux  et
  tous  les  systemes Unix! Tcl/Tk est egalement largement utilise comme
  langage de script sur internet. Ce qui permet de  n'avoir  qu'un  seul
  langage  pour couvrir tous ses besoins - applications et internet. Tcl
  est l'abreviation de Integre) pour Tcl/Tk nomme SpecTCL.  Verifiez  la
  presence  de  ce  paquetage  (format  rpm)  dans la distribution linux
  Redhat ou dans l'un des sites sunscript indiquees ci-apres.

  Notez que Tcl/Tk est envisageable pour de ttrreess  ppeettiittss  projets.  Pour
  des  projets moyens ou plus grands l'utilisation de Perl-Tk ou Perl-Qt
  ou C++ QtEZ ou C++ Lesstiff ou Java est  fortement  recommandee.  Vous
  pouvez utiliser egalement la combinaison Perl, C et Tk.

  PERL  et C/C++ sont fortement recommandes meme pour de petits projets.
  Perl est utilise dans la programmation de 90 %  des  scripts  internet
  dans  le  monde.   De  cette  maniere, vous n'aurez q'un seul langage,
  "Perl" pour tous vos besoins - applications  aussi  bien  qu'internet.
  Consultez L'Interface Base de Donnees Perl de ce document a ``''

  Tcl/Tk  est  normalement  inclus  dans  tous  les cdrom linux. On peut
  egalement l'obtenir a partir des sites -

  +o  <http://sunscript.sun.com/>

  +o  <http://sunscript.sun.com/TclTkCore/>

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

  +o  Manuels  de  reference:  de  nombreux  livres   sur   TCL/TK   sont
     disponibles sur le marche.

  +o  Visual TCL  <ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm>

  99..   OOuuttiillss ddee ddeevveellooppppeemmeenntt iinntteeggrreess 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l--
  iissaatteeuurr GGrraapphhiiqquuee))

  Essayez les outils de developpement suivants utilisable en conjonction
  avec les  pilotes  ODBC/JDBC.   Ils  sont  similaires  a  Borland  C++
  Builder, Borland JBuilder.

  Vibe  est  un IDE Java et C++ (Environnement de Developpement Integre)
  qui a ete nomme IDE de l'annee par la revue "Unix Review".

  +o  Des  informations  complementaire  sur  Vibe  sont  disponibles   a
     <http://www.LinuxMall.com/products/00487.html>

  +o  <http://www.troll.no> et le site ftp a <ftp://ftp.troll.no>

     Vous  pouvez  aussi utiliser Borland C++ Builder, Delphi, JBuilder,
     PowerBuilder sur Windows95 pour se connecter a PostgreSQL  sur  une
     machine unix au travers de pilotes odbc/jdbc.

  Consultez  egalement la partie Interface de Base de Donnees PPEERRLL de ce
  document a  ``''  Perl  et  C/C++  sont  fortement  recommandes  comme
  langages de choix pour IDE.

  Outils IDE gratuits -

  Regardez le CDROM de la distribution RedHat.

  +o  Lesstiff,                        outil                        Motif
     <ftp://ftp.redhat.com/pub/contrib/i386/lesstiff*.rpm>

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

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

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

  +o  Applixware Tool  <http://www.redhat.com>

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

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

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

  1100..  KKaanncchheennjjuunnggaa -- OOuuttiill RRAADD JJaavvaa ppoouurr PPoossttggrreeSSQQLL

  Kanchenjunga  est  un  outil  de  developpement rapide (RAD) Java pour
  PostgreSQL. Vous pouvez utiliser cet outil pour developper  rapidement
  l'application java s'interfacant a PostgreSQL.

  +o  <http://www.man.ac.uk/~whaley/kj/kanch.html>

  1111..  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111..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 repandue
  pour acceder aux informations  des  bases  de  donnees  de  differents
  vendeurs.  Le fonctionnement des applications ecrites en utilisant les
  pilotes ODBC est garanti  quelle  que  soient  les  bases  de  donnees
  utilisees PostgreSQL, Oracle, Sybase, Informix etc..

  +o  <http://www.openlinksw.com>    Open   Link   Software   Corporation
     distribue des ODBC pour PostgreSQL et d'autres  bases  de  donnees.
     Open Link dispose aussi d'ODBC gratuits (quantite limitee) verifier
     aupres d'eux.

  +o  <http://stud1.tuwien.ac.at/~e9025461/> C'est le  site  primaire  de
     PostODBC  (PostgreSQL  ODBC)  .  situe  en  Autriche.  PostODBC est
     egalement inclus dans la distribution.

  +o  <http://www.MageNet.com/postodbc/DOC> Ce miroir  est  maintenu  par
     Julia Anne Case qui est aussi un developpeur PostODBC majeur.

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

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

  1111..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 independant, pour integrer le support de la  connectivite  base
  de donnees directement au niveau des applications.

  +o  <http://www.openlinksw.com>  Open  Link  Software Corporation vends
     UDBC pour PostgreSQL et  autres  SGBD.   Open  Link  dispose  aussi
     d'UDBC gratuits (quantite limitee) verifier aupres d'eux.

  1111..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
  developpement independant de la  plate-forme  d'utilisation  developpe
  par  Sun  Microsystems. Les programmeurs Java sont encourages a ecrire
  leurs applications en utilisant JDBC  pour  faciliter  la  portabilite
  entre   differentes   plates-formes  telles  que  PostgreSQL,  Oracle,
  informix, etc. Si vous ecrivez des applications Java applications vous
  pouvez  obtenir  les  pilotes  JDBC pour PostgreSQL a partir des sites
  suivants :

  Le pilote JDBC est inclus dans la distribution PostgreSQL.

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

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

  +o  <http://www.openlinksw.com>  Open  Link  Software Corporation vends
     JDBC pour PostgreSQL et  autres  SGBD.   Open  Link  dispose  aussi
     d'JDBC gratuits (quantite limitee) verifier aupres d'eux.

  Le site JDBC, le guide et les FAQ sont situes a -

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

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

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

  1111..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 tres utiles au programmeur JAVA.

  +o  <ftp://www.blackdown.org/pub/Java/Java-Postgres95>

  +o  <http://www.blackdown.org>

  1122..  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122..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 pratiquement tous les systemes d'exploitation
  et toutes les plates-formes materielles.  Vous  pouvez  utiliser  Perl
  sous  Windows95/NT,  toutes  les  varietes 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meemmee sur de
  nombreux     materiels     et     systemes     d'exploitations     peu
  courants/generalement inconnus!!

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

  +o  Email : E.Mergl@bawue.de

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

  +o  Page d'acceuil Perl :  <http://www.perl.com/perl/index.html>

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

  +o  La          FAQ          Perl           est           a           :
     http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/

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

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

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

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

  +o  Perl GUIkits :  <http://reference.perl.com/query.cgi?ui>

  +o  Interfaces      de      Base      de      Donnees      Perl       :
     <http://reference.perl.com/query.cgi?database>

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

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

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

  +o  Consultez egalement le forum PERL a comp.lang.perl.*

  1122..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neeeess PPeerrll

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

  Ce qui suit est un eexxttrraaiitt de la page d'acceuil Perl DBI.

  L'interface de SGBD Perl (Perl  Database  Interface  -  DBI)  est  une
  interface  logicielle  d'acces  a  un  SGBD  (Application  Programming
  Interface - API) pour le langage PERL. Les specifications de l'API DBI
  perl  definissent  un  ensemble  de  fonctions,  de  variables  et  de
  conventions d'acces a un SGBD coherent et independant du SGBD utilise.

  1122..22..22..  AAnnnnoonnccee dduu ppiilloottee DDBBII DDBBDD--PPgg--00..6633 DDBBII ppoouurr PPoossttggrreeSSQQLL

  Sur le site CPAN on trouve DBD-Pg-0.63.tar.gz.  Depuis  sortie  de  la
  derniere   version  publique,  les  modifications  suivantes  ont  ete
  effectuees :

  - - adaptation a PostgreSQL-6.2 :

  +o  $ sth->rows de meme que $ sth->execute et $  sth->do  renvoient  le
     nombre de lignes affectees meme pour les instructions non-Select.

  +o  ajout  du  support d'autorisation par mot de passe, lire la page du
     manuel concernant pg_passwd.

  - - le parametre data_source de la methode de connexion  accepte  deux
  parametres  additionnels  qui  sont  senses representer les parametres
  hote et port : DBI->connect("dbi:Pg:dbname:host:port", "uid", "pwd")

  - - support de l'instruction AutoCommit. Lire la documentation  de  ce
  module pour evaluer son impact sur vos scripts !

  -  -  prise  en  compte  dans un meilleur style perl du type de donnee
  bool, Lire la documentation de ce module pour evaluer son  impact  sur
  vos scripts !

  Pour de plus amples informations voir:

  +o  <http://www.perl.com/CPAN>

  +o  <http://www.postgresql.org>

  +o  <http://www.hermetica.com/technologia/DBI>

  1122..22..33..  RReelleeaassee NNootteess aanndd RReeaaddMMee ffiillee

       #---------------------------------------------------------
       #
       # $Id: README,v 1.10 1997/10/05 18:25:55 mergl Exp $
       #
       # Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
       # Portions Copyright (c) 1997                Edmund Mergl
       #
       #---------------------------------------------------------

       **********************************************************
       *                                                        *
       *         Cette version contient des modifications       *
       *                     INCOMPATIBLES                      *
       *                     _------------                      *
       *              avec les versions precedentes.            *
       *                                                        *
       *            Lire la documentation du module             *
       *               pour l'attribut AutoCommit               *
       *               et le type de donnee bool.               *
       *                                                        *
       **********************************************************

  DESCRIPTION :

  Ceci  est  la  version  0.63  de  DBD-Pg.   DBD-Pg  est  une interface
  PostgreSQL pour Perl 5 utilisant DBI.

  Pour des informations complementaires concernant DBI consulter:

  +o  <http://www.fugue.com/dbi/>

  COPYRIGHT :

  La distribution de ce  document  est  soumise  aux  conditions  de  la
  licence  publique  generale  GNU  ou la licence protegeant la creation
  Artistique (Artistic  License),  ainsi  que  c'est  specifie  dans  le
  fichier LISEZ-MOI perl.

  SI VOUS AVEZ DES PROBLEMES :

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

  Envoyez vos commentaires et vos rapports d'erreur a

  +o  E.Mergl@bawue.de

  Pensez  a  inclure  les  messages affiches par perl -v, et perl -V, la
  version de PostgreSQL, la version de DBD-Pg, et la version de DBI dans
  votre rapport d'erreur.

  CONTRAINTES LOGICIELLES :

  +o  - compiler, tester et installer Perl 5         (au moins 5.002)

  +o  - compiler, tester et installer le module DBI  (au moins 0.89)

  +o  - compiler, tester et installer PostgreSQL     (au moins 6.2)

  PLATE-FORMES :

  Cette  version  def  DBD-Pg  a  ete  developpee  pour  Linux  2.0 avec
  chargement dynamique des extensions perl. Merci de me faire savoir  si
  vous rencontrez des problemes sur d'autres plates-formes.

  INSTALLATION :

  Dans  le  fichier  Makefile il y a un test la variable d'environnement
  POSTGRES_HOME ainsi  que  de  quelques  arborescences  standard,  pour
  trouver le repertoire racine de votre installation Postgres. Taper les
  commandes suivantes:

  +o  1.   perl Makefile.PL

  +o  2.   make

  +o  3.   make test

  +o  4.   make install

  ( de 1. a 3. comme utilisateur normal, pas comme root ! )

  TEST :

  Lancer 'make test'.  Noter que l'utilisateur lancant  ce  script  doit
  avoir  ete  cree  avec  des droits d'acces lui permettant de creer des
  bases de donnees "ET" des utilisateurs !. Ne pas lancer ce  script  en
  tant que root!.

  Si le test echoue avec le message 'login failed', verifier que l'acces
  a template1 de la base de donnees ainsi qu'a pgperltest  ne  sont  pas
  proteges dans pg_hba.conf.

  Si  vous utilisez la bibliotheque partagee libpq.so verifiez que votre
  chargeur dynamique trouve libpq.so. La commande  Linux  /sbin/ldconfig
  -v  devrait  vous  renseigner  sur l'endroit ou se trouve libpq.so. Si
  ldconfig ne trouve pas libpq.so, soit ajoutez  une  entree  appropriee
  dans  /etc/ld.so.conf  et relancez ldconfig ou ajouter son chemin dans
  la variable d'environnement LD_LIBRARY_PATH.  On  aura  comme  message
  typique  resultant  de  ce  type d'erreur : install_driver(Pg) failed:
  Can't load './blib/arch/auto/DBD/Pg/Pg.so' for  module  DBD::Pg:  File
  not found at

  Quelques  distributions Linux ont une installation incomplete de perl.
  Si vous avez des erreurs de compilation du style "XS_VERSION_BOOTCHECK
  undeclared",  executez  un  Si  ce  fichier  n'est pas present, il est
  indispensable de recompiler et de reinstaller perl.

  Utilisateurs SGI : si vous avez un defaut  de  segmentation,  assurez-
  vous  que vous utilisez la version de malloc obtenue avec perl lors de
  la compilation de perl (ce n'est pas le cas par  defaut).   "David  R.
  Noble"

  +o  drnoble@engsci.sandia.gov

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

  E.Mergl@bawue.de                     October 05, 1997

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

  1122..22..44..  FFAAQQ ppoouurr DDBBII

  On  trouvera  ci-dessous  les  Questions Frequemment Posees (FAQ) pour
  DBI. La page Web d'accueil se trouve a

  +o  <http://www.hermetica.com/technologia/perl/DBI>

                                DBI Foire Aux Questions v.0.35
                              Derniere mise a jour : 20 Juin, 1997
       ----------------------------------------------------------------------------
       NAME
       DBI::FAQ -- Foire Aux Questions pour l'Interface de Base de Donnees Perl5
       ----------------------------------------------------------------------------
       SYNOPSIS
           perldoc DBI::FAQ
       ----------------------------------------------------------------------------
       VERSION
       La version actuelle de ce document , du 20 Juin, 1997, porte le numero 0.35
       ----------------------------------------------------------------------------
       DESCRIPTION

       Ce document contient les reponses aux questions les plus frequemment posees
        a la fois sur les Mailing Lists DBI et personnellement aux membres de l'equipe
        de developpement DBI.
       ----------------------------------------------------------------------------

  1122..22..55..  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'acces  aux  bases de donnees
  (Application Programming Interface  -API) pour le  langage  Perl.  Les
  specifications  DBI  API  definissent  un  ensemble  de  fonctions, de
  variables et de conventions coherents  d'interfacage  a  une  base  de
  donnees independant de la base de donnees utilisee.''

  En  langage  simple, l'interface DBI permet aux utilisateurs d'acceder
  de maniere transparente a de multiples base de donnees. Ainsi, Si vous
  vous connectez a une base de donnees Oracle, Informix, mSQL, Sybase ou
  n'importe quelle autre,  vous  n'avez  pas  besoin  de  connaitre  les
  mecanismes  sous-jacents  de  la  couche  3GL.  L'API  definie par DBI
  fonctionnera sur tous ces types de bases de donnees.

  On obtient un benefice du meme ordre en ayant  la  possibilite  de  se
  connecter  a deux bases de donnees de differents fournisseurs a l'aide
  du meme script perl, i.e., je veux lire  des  donnees  d'une  base  de
  donnees  Oracle  et  les  inserer  dans  une Informix a partir du meme
  programme. La couche logicielle DBI permet de le  realiser  simplement
  et efficacement.

  DBperl  est  le  nom  ancien des specifications de l'interface. Il est
  utilise maintenant pour designer les modules perl4  d'interfacage  des
  bases  de  donnees  tels que oraperl, isqlperl, ingperl et autres. Ces
  interfaces n'ont pas  d'API  standard  et  ne  sont  generalement  pas
  supportes.

  Voici   une   liste   des  modules  DBperl,  de  leur  equivalent  DBI
  correspondants et du support  d'information.  Notez  que  les  auteurs
  cites ici ne maintiennent generalement pas le module DBI de la base de
  donnees. Les adresses E-mail n'ont pas ete  verifiees  et  ne  doivent
  etre  utilisees  que  pour  les questions concernant les modules perl4
  listes ci-dessous. Les questions sur  les  pilotes  DBI  doivent  etre
  directement adressees 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  possedent  des couches logicielles
  d'emulation. Ainsi DBD::Oracle est livre avec une  couche  d'emulation
  Oraperl, ce qui permet d'executer d'anciens scripts oraperl sans modi-
  fication. La couche logicielle d'emulation traduit les appels  oraperl
  API en appels DBI et les execute.

  Voici une table des  couches d'emulation :

           Module        Couche d'emulation     Etat
           ------          ---------------     ------
           DBD::Oracle     Oraperl             Complete
           DBD::Informix   Isqlperl            En cours de  developpement
           DBD::Sybase     Sybperl             Fonctionnelle? ( Necessite une
                                               verification)
           DBD::mSQL       Msqlperl            En version experimentale avec
                                               DBD::mSQL-0.61

  L'emulation  Msqlperl  est  un cas particulier. Msqlperl est un pilote
  perl5 pour les bases de donnees mSQL , mais il ne se conforme pas  aux
  specifications  DBI.  On  desapprouve  son  utilisation  en  faveur de
  DBD::mSQL. On peut tele-charger Msqlperl a partir du site CPAN via :

  +o  http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl

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

  DBI est disponible en premier sur :

  +o  <ftp://ftp.demon.co.uk/pub/perl/db>

  Il faut utiliser le site CPAN  (Comprehensive  Perl  Archive  Network)
  pour  recuperer  les  versions a jour des pilotes, en general absentes
  des sites miroirs. On peut acceder a CPAN grace au splendide programme
  "CPAN multiplexeur" de Tom Christiansen's situe a:

  +o  <http://www.perl.com/CPAN/>

  Pour  des informations plus specifiques ainsi que pour les URL exactes
  des pilotes, veuillez consulter la liste des pilotes DBI et les  pages
  concernant les modules sur:

  +o  <http://www.hermetica.com/technologia/perl/DBI>

  1122..22..77..  OOuu ppuuiiss--jjee ttrroouuvveerr pplluuss dd''iinnffoorrmmaattiioonnss??

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

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

  On trouve deux specifications disponibles a cette adresse: la nouvelle
  specification  Draft  (edition  provisoire) DBI qui est un document en
  evolution rapide a mesure que  l'equipe  de  developpement  s'approche
  d'une  version  stable  de  l'interface,  et  l'ancienne specification
  historique DBperl a partir de  laquelle  l'interface  DBI  actuelle  a
  evolue.

  Il  faut  considerer  ce  dernier  document  comme ne presentant qu'un
  interet historique  et  ne  pas  l'utiliser  en  tant  que  manuel  de
  programmation  ou  document  de  reference.  Il  demeure cependant une
  source d'informations tres utile.

  Documentation POD (Plain Old Documentation) Les PODs sont des morceaux
  de  documentation generalement noyes a l'interieur des programmes perl
  qui documentent le code "sur place".   Ce  sont  des  ressources  tres
  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 etre lue avec
  les commandes suivantes.

  La Specification DBI Les PODs pour la specification DBI peut etre  lue
  avec la commande :

  perldoc DBI

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

  perldoc Oraperl

  Ce  qui  permettra  d'obtenir  une  copie  a jour de la page de manuel
  originale ecrite par Kevin Stock  pour  perl4.  L'API  oraperl  y  est
  entierement listee et decrite.
  DBD::mSQL  Les  utilisateurs  du  module  DBD::mSQL  peuvent  lire des
  informations sur quelques  fonctions  privees  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 systeme en tapant :

  perldoc DBI::FAQ

  Ceci  peut  etre  plus  pratique pour ceux qui ne sont pas connectes a
  l'Internet ou le sont d'une maniere peu pratique.

  Les POD en general On  peut  lire  des  informations  sur  la  maniere
  d'ecrire des PODs, ainsi que sur la philosophie des PODs en general en
  tapant :

  perldoc perlpod

  Les  utilisateurs  ayant  le  module  Tk  installe  seront   peut-etre
  interesses  d'apprendre  qu'il  existe  un  lecteur de POD base sur Tk
  nomme tkpod. Il formate les POD de maniere pratique et lisible.

  Discussions, Cancans et Observations

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

  Il y a , de temps en temps, une serie de discussions  de  la  part  de
  certaines  personnes,  dans les listes de diffusion sur DBI, qui, pour
  essayer d'eclaircir un simple  point,  finissent  par  transformer  en
  brouillon  des  documents  tout  a  fait  complets. Ces documents sont
  souvent de qualite variable, mais donnent un apercu du  fonctionnement
  des interfaces.

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

  +o  <http://www.tpj.com>

  ``DBperl''  Cet  article,  publie  dans  l'edition de novembre 1996 du
  ``Dr. Dobbs Journal'' traitait de DBperl. L'auteur de cet article  n'a
  apparemment  pas  contacte un seul membre de l'equipe de developpement
  DBI pour verifier l'information contenue dans son  article.  Plusieurs
  critiques de cet article dans les listes de diffusion des utilisateurs
  de dbi ont ete peu flatteuses, c'est le moins que  l'on  puisse  dire.
  Le fait que l'article traite de DBperl au lieu de DBI est un indice du
  manque de fraicheur de l'information.

  Cependant, cette reference est donnee par soucis d'exhaustivite.

  ``The Perl5 Database Interface'' Cette reference est celle d'un  livre
  a  ecrire  par  Alligator  Descartes publie par O'Reilly et Associes a
  paraitre cet hiver.

  La table des matieres de ce livre devrait contenir :

            * Introduction
                 + Les Bases de Donnees
                 + CGI / WWW
                 + perl
            * Concepts de Base des Bases de donnees
                 + Types de Bases de Donnees
                      o Flat File
                      o AnyDBM
                      o RDBMS
                 + Utiliser Quelle Base de Donnees, pour Quoi faire...
            * SQL
                 + Pourquoi SQL?
                 + Structuration de l'Information dans les Bases de Donnees
                 + Extraction des Donnees d'une Base de Donnees
                 + Manipulation des Donnees et des Structures de Donnees
            * Architecture DBI
            * Programmation avec DBI
                 + Initialisation DBI
                 + Identifiants
                      o Identifiants de pilotes
                      o Identifiants de bases de donnees
                      o Identifiants d'instructions
                 + Connexion and Deconnexion
                 + Gestion des Erreurs
                 + Emission de Requetes Simples
                 + Execution d'Instructions Atomiques
                 + Instructions MetaDonnees
                 + Instruction plus dans le style perl
                 + Liaison
                 + Gestion des Transactions
                 + Methodes utilitaires
                 + Gestion des Attributs et des Variables Dynamiques
            * DBI et ODBC
            * Les Pilotes de Bases de Donnees
                 + DBD::Oracle et oraperl
                 + DBD::Informix et isqlperl
                 + DBD::mSQL et Msqlperl
            * Etude de Cas
                 + DBI et le WWW
                 + Migration des Donnees et Stockage
                 + Logiciel d'administration
            * Appendice: API Reference / Specification
            * Appendice: Ressources

  Fichiers LISEZMOI Les fichiers LISEZMOI  fournis  avec  chaque  pilote
  contiennent de temps en temps quelques informations utiles (non, vrai-
  ment! ) pouvant etre pertinentes pour l'utilisateur.  S'il vous plait,
  lisez-les.  Cela  rendra  nos pauvres existences plus supportables. On
  peut toutes les trouver depuis la page WWW DBI principale a :

  +o  <http://www.hermetica.com/technologia/perl/DBI>

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

  +o  <http://www.fugue.com/dbi>

  Les listes ou les utilisateurs peuvent participer sont:

  dbi-announce Cette liste de  diffusion  est  reservee  uniquement  aux
  annonces.   Tres peu de trafic. Les annonces sont generalement postees
  sur la page WWW DBI principale.
  Si vous n'arrivez pas  a  utiliser  le  formulaire  sur  la  page  WWW
  indiquee  ci-dessus,  inscrivez-vous  a  cette  liste  de  la  maniere
  suivante :

  +o  Email: dbi-announce-request@fugue.com

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

  dbi-dev Cette liste de diffusion est a l'usage des  developpeurs  pour
  discuter  des  idees  et  des  concepts de l'interface DBI, API et des
  mecanismes des pilotes. Seulement utiles pour les developpeurs et  les
  personnes interessees. Trafic faible.

  Si  vous  n'arrivez  pas  a  utiliser  le  formulaire  sur la page WWW
  indiquee  ci-dessus,  inscrivez-vous  a  cette  liste  de  la  maniere
  suivante :

  +o  Email: dbi-dev-request@fugue.com

     avec 'subscribe' dans le corps du message.

  dbi-users  Cette liste de diffusion est un lieu de discussion generale
  utilisee pour les rapports d'erreurs,  la  discussion  sur  differents
  problemes  et  des demandes de renseignement d'interet general. Trafic
  moyen.

  Si vous n'arrivez pas  a  utiliser  le  formulaire  sur  la  page  WWW
  indiquee  ci-dessus,  inscrivez-vous  a  cette  liste  de  la  maniere
  suivante :

  +o  Email: dbi-users-request@fugue.com

     avec 'subscribe' dans le corps du message.

  Archives des Listes de Diffusion Archives des Listes de Diffusion US

  +o  <http://outside.organic.com/mail-archives/dbi-users/>

  Cette archive, avec recherches par hyper-liens, de ces trois listes de
  diffusion,  avec  un  peu  du trafic beaucoup plus ancien a ete mis en
  place pour permettre une recherche par les utilisateurs.

  Archives des Listes de Diffusion Europeennes

  +o  <http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-
     Interest>

  Identique a l'archive US ci-dessus.

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

  En premier lieu, consulter la documentation  en  ligne  concernant  ce
  module,  que ce soit DBI lui-meme ou un module DBD, et verifier que ce
  n'est pas un probleme de compilation connu pour votre architecture. On
  peut trouver ces documents a :

  +o  <http://www.hermetica.com/technologia/perl/DBI>

  Si  c'est  un  probleme connu, vous devrez probablement attendre qu'il
  ait ete corrige.  Si vraiment vous avez besoin d'une solution, essayez
  l'une des solutions suivantes :

  Essayez  de  le  corriger vous meme Cette technique n'est generalement
  par recommandee aux craintifs. Si vous pensez que vous y etes  arrive,
  alors,  envoyer  un  fichier  rustine  (context  diff  ) a l'auteur en
  expliquant les points suivants :
  o Quel etait le probleme, et, si possible, des jeux d'essai.

  o Ce que vous avez du faire pour le corriger. Assurez  vous  que  vous
  n'oubliez rien.

  o  Donnez  des  informations  concernant  la Plate-forme utilisee, les
  versions : de la Base de Donnees, de Perl, du module et de DBI.

  Envoyez un Email a l'auteur SANS RALER!  S'il vous plait, postez votre
  email  a  l'adresse  indiquee dans les pages WWW du pilote avec lequel
  vous avez rencontre des problemes. Ne pas  poster  directement  a  une
  adresse  que vous connaissez a moins qu'elle ne corresponde a l'une de
  celles qui sont indiquees.

  Nous avons un vrai travail a  faire,  et  nous  devons  consulter  les
  listes de diffusion traitant des problemes rencontres. De plus nous ne
  pouvons pas forcement avoir acces a < inserez  ici  le  nom  de  votre
  plate-forme favorite, celle qui vous cause des lesions cerebrales > et
  de ce fait vous apporter une quelconque assistance!   Desole  de  vous
  paraitre dur, mais c'est comme cela!

  Cependant,  vous pouvez tomber sur l'un de ces genies creatifs, qui, a
  3 heures du matin resoudra votre probleme et vous fournira une rustine
  en 5 minutes. L'ambiance dans le cercle DBI est que nous apprecions de
  connaitre les problemes des utilisateurs puisque nous travaillons dans
  le meme environnement.

  Si  vous  envisagez d'envoyer un Email a un auteur, essayez de fournir
  le plus d'informations possible, i.e. :

  o TOUS les renseignements provenant  du  fichier  LISEZMOI  du  module
  posant probleme.  Je dis bien TOUS. Nous n'ajoutons pas de lignes dans
  la documentation pour le plaisir, ou pour que les fichiers LISEZMOI se
  conforment a une quelconque norme de taille.

  o  Si  vous disposez d'un vidage memoire, essayer de generer une trace
  du contenu de la pile (stack) a partir du vidage memoire  (core  dump)
  en  utilisant le module Devel::CoreStack. L'envoyer egalement. On peut
  trouver le module Devel::CoreStack sur CPAN a :

  +o  http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack

  o Les numeros de version du Module, de  perl,  des  jeux  d'essai,  du
  systeme d'exploitation ainsi que tout autre information pertinente.

  Souvenez-vous  que,  plus  vous nous enverrez d'informations plus vite
  nous pourrons resoudre le probleme. Si vous n'envoyez rien, n'attendez
  rien en retour.

  Envoyez  un  Email  dans la liste de diffusion des utilisateurs de dbi
  C'est en general  une  idee  astucieuse  de  rapporter  les  problemes
  rencontres  dans  les listes de diffusion. Les auteurs lisent tous ces
  listes, donc vous ne perdez rien a le faire.

  1122..22..99..  DDBBII eesstt--iill ssuuppppoorrttee 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 ??

  Finalement, oui! Jeff Urlwin s'est employe avec constance a porter DBI
  et DBD::Oracle sur ces plates-formes, et, depuis la disponibilite d'un
  perl plus stable et d'un portage de MakeMaker, le projet a progresse a
  pas de geant.

  Les portages de DBI et de DBD::Oracle pour Win32 ports font maintenant
  partie  integrante  de DBI, donc, la recuperation d'une version de DBI
  superieure a 0.81 doit  donner  satisfaction.  Pour  ce  qui  est  des
  rustines   necessaires   pour   DBD::Oracle,  veuillez  lire  la  page
  d'information de portage pour Win32 a :

  +o  <http://www.hermetica.com/technologia/perl/DBI/win32>

  1122..22..1100..  PPuuiiss--jjee aacccceeddeerr aauuxx bbaasseess ddee  ddoonnnneeeess  MMiiccrroossoofftt  AAcccceessss  oouu
  SSQQLL--SSeerrvveerr aavveecc DDBBII??

  Contribution de Tim Bunce et Jeff Urlwin

  Il existe une couche  logicielle  d'emulation  experimentale  pour  le
  module  Win32::ODBC  fournie  avec  DBI-0.79  (  et  suivants  ). Elle
  s'appelle DBI::W32ODBC et est, pour le moment,  minimale.  Vous  aurez
  besoin du module Win32::ODBC disponible a :

  +o  <http://www.roth.net>

  Etant  donne son etat, les rapports de problemes, sans correction, ont
  de bonnes chances d'etre ignores. Vous aurez egalement besoin du patch
  kit  Win32  DBI  tel  qu'il  est  fourni par Jeff Urlwin. Pour trouver
  l'endroit ou  il  est  disponible,  lire  la  reponse  a  la  question
  precedente.

  Jeff  Urlwin  fournit  actuellement  un  gros  travail  sur  la couche
  logicielle  ODBC.   Pour  en   revenir   a   la   question   initiale,
  theoriquement,  oui,  on  peut  acceder aux bases de donnees Microsoft
  Access ou SQL-Server avec DBI via ODBC!

  1122..22..1111..  EExxiissttee--tt--iill uunn DDBBDD ppoouurr <<  iinnsseerreezz  llee  nnoomm  ddee  vvoottrree  SSGGBBDD
  ffaavvoorrii iiccii >> ??

  Est-il cite dans la liste des pilotes DBI ?

  +o  <http://www.hermetica.com/technologia/perl/DBI/DBD>

  S'il ne l'est pas, non. L'absence complete d'un pilote  pour  un  SGBD
  donne  dans cette page signifie que personne n'a manifeste l'intention
  d'y travailler.

  Comme corollaire a l'affirmation ci-dessus, cela signifie que si  vous
  voyez une annonce pour un pilote qui n'est pas dans cette page, il y a
  une bonne chance que ce soit reellement un pilote DBI, et qu'il puisse
  ne  pas  respecter  les specifications.  Par consequent, les questions
  pour des problemes concernant ce code ne doivent pas etre posees  dans
  les listes de diffusion DBI.

  1122..22..1122..   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 aa ssaa
  ppllaaccee??

  Extrait de ``DBI - L'Interface de Base de Donnees pour Perl 5'' :

  ``A  l'origine  UNIX  etait  bienheureux  avec  sa  "Base  de Donnees"
  rustique reposant sur des fichiers, nommee systeme dbm. Avec dbm  vous
  enregistrez les donnees dans des fichiers et les retrouvez rapidement.
  Cependant, il souffre de serieux inconvenients.

  Verrouillage des fichiers

  Les systemes dbm ne permettent par  un  verrouillage  particulierement
  robuste  des  fichiers,  de  meme  qu'il  n'y  a pas de possibilite de
  corriger les problemes survenants lors d'ecritures [ dans la  base  de
  donnees ] simultanees.

  Structures de Donnees Arbitraires

  Les  systemes dbm permettent seulement une simple structure de donnees
  fixe: paires cle-valeur. Cette valeur peut etre un objet complexe, tel
  qu'une  structure  C , mais la cle doit etre unique. Ce fut une grande
  limitation dans l'utilite des systemes dbm.

  Cependant, les systemes dbm continuent a offrir des  fonctions  utiles
  pour  les  utilisateurs  ayant des ensembles de donnees simples et des
  ressources limitees, puisqu'ils sont rapides, robustes et  extremement
  bien  testes.  Les  modules  Perl  pour  acceder aux systemes dbm font
  maintenant partie integrante de la distribution  Perl  via  le  module
  AnyDBM_File.''

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

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

  Si l'on suppose que  la  fonctionnalite  en  question  n'est  pas,  en
  standard, specifique d'un SGBD, alors la reponse sera non.

  DBI  represente  un API qui doit fonctionner avec la plupart des SGBD,
  et n'a pas de fonctionnalite specifique a un SGDB particulier.

  Cependant, les auteurs d'un pilote peuvent, s'ils le desirent, ajouter
  une  fonctionnalite  specifique  a un SGBD a travers les methodes func
  definies dans l'API DBI. Les developpeurs de Scripts doivent noter que
  l'utilisation  de cette fonctionnalite au travers de ces methodes func
  a de bonnes chances d'en sacrifier la portabilite entre les differents
  SGBD.

  1122..22..1144..  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tee 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 extremement utile pour la programmation CGI!
  En fait, je serais tente de repondre que la programmation CGI est  une
  des deux principales utilisation de DBI.

  DBI  confere  aux programmeurs CGI la possibilite d'offrir des base de
  donnees WWW a leurs utilisateurs, ce qui donne a ces  utilisateurs  la
  possibilite   d'utiliser   de   grandes   quantites  de  donnees  bien
  organisees. DBI donne aussi la possibilite ,  si  un  site  recoit  un
  trafic trop important pour les performances du serveur, d'ameliorer ce
  serveur de base de donnees de facon transparente,  sans  modifier  les
  scripts CGI.

  1122..22..1155..   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??

  Contribution de John D. Groenveld

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

  En  utilisant  le  module  mod_perl   Apache   de   Doug   MacEachern,
  l'interpreteur  perl  est  inclus  dans  le  processus fils httpd. Les
  modules CGI, DBI, et vos autres modules favoris peuvent  etre  charges
  au  lancement  de  chaque  processus  fils.  Ces modules ne seront pas
  recharges a moins d'etre modifies sur disque.

  Pour de plus amples informations sur Apache, consultez le site WWW  du
  Projet Apache a :
  +o  <http://www.apache.org>

  Le module mod_perl peut etre recupere de CPAN via :

  +o  http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl

  1122..22..1166..   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??

  Contribution de John D. Groenveld

  En  utilisant  le module Apache::DBI de Edmund Mergl, les connexions a
  la base de donnees sont enregistrees dans une table  avec  chacun  des
  processus httpd fils. Si votre application utilise une base de donnees
  simple utilisateur, cette  connexion  peut  etre  lancee  avec  chaque
  processus  fils.  Actuellement, les connexions a la base de donnees ne
  peuvent pas etre partagees entre processus httpd fils.

  Apache::DBI peut etre tele-charge de CPAN via :

  +o  http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI

  1122..22..1177..  ````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,,  cca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,, ccaa eec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 a partir duquel vous avez lance la ligne de commande
  a  un ensemble de variables d'environnement correctement configure, ce
  sont,  dans  la  cas  de  DBD::Oracle,  des   variables   telles   que
  $ORACLE_HOME, $ORACLE_SID or TWO_TASK.

  Le  processus httpd s'execute habituellement sous un utilisateur id ne
  correspondant pas a un utilisateur, ce qui implique qu'il  n'y  a  pas
  d'environnement  configure.   Tous scripts essayant de s'executer dans
  ces circonstances echoueront.

  Pour resoudre ce probleme, initialisez l'environnement de  votre  base
  de  donnees  dans  un  bloc  BEGIN  (  ) en tete de votre script. Ceci
  devrait resoudre votre probleme.

  De meme, 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  complementaires.  Il  est  peu  probable que ce probleme
  concerne DBI.

  Le guide ``Idiot's Guide To Solving Perl / CGI  Problems''  peut  etre
  trouve a :

  +o  <http://www.perl.com/perl/faq/index.html>

  ainsi  que ``Perl CGI Programming FAQ''. Lisez ces DEUX documents tres
  soigneusement!

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

  A  la  date  de  ce document ( voir en tete ), non. perl ne permet pas
  l'execution en parallele. Cependant,  l'execution  en  parallele  doit
  faire  partie  de la distribution perl de base a compter de la version
  5.005, ce qui sous-entend que le support de l'execution  en  parallele
  pour DBI devrait suivre rapidement.

  Pour  quelques exemples de code OCI pour Oracle ayant des instructions
  SELECT avec execution en parallele, voir :

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

  1122..22..1199..   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ceedduurreess eennrreeggiissttrreeeess aavveecc
  DDBBII??

  En   supposant   que  vous  avez  cree  une  procedure  enregistree  a
  l'interieur de la base de donnees cible, e.g.,  une  base  de  donnees
  Oracle,  vous  pouvez  utiliser $ dbh-> do pour executer immediatement
  cette procedure. Par exemple,

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

  1122..22..2200..  CCoommmmeenntt ppuuiiss--jjee rreeccuuppeer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cee--
  dduurreess eennrreeggiissttrreeeess aavveecc DDBBII??

  Contribution de Jeff Urlwin

           $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;

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

  1122..22..2211..  CCoommmmeenntt ppuuiiss--jjee ccrreee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neeeess  aavveecc
  DDBBII??

  La creation et la suppression de bases de donnees  sont  des  concepts
  qui  sont  beaucoup  trop  abstraits  pour etre supportes par DBI. Par
  exemple, Oracle ne supporte pas le concept de  detruire  une  base  de
  donnees du tout! Ainsi, dans Oracle, le serveur de base de donnees est
  essentiellement la base de donnees elle-meme alors que dans  mSQL,  le
  processus serveur s'execute tranquillement sans aucune base de donnees
  creee. C'est un probleme trop heterogene pour s'y attaquer.

  Quelques pilotes, cependant, supportent la creation et la  suppression
  de  bases de donnees a travers des methodes func privees. Il vous faut
  regarder dans la documentation des  pilotes  que  vous  utilisez  pour
  verifier s'ils supportent de tels mecanismes.

  1122..22..2222..   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 traitees comme la valeur undef. Des
  NULLs peuvent etre inseres dans les bases de donnees en tant que NULL,
  par exemple :

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

  mais lors d'une interrogation, les NULLs devront etre testes comme des
  undef. C'est une norme pour tous les pilotes.
  1122..22..2233..  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meetthhooddeess ffuunncc??

  Une methode func est definie a l'interieur de DBI comme etant un point
  d'entree pour une fonctionnalite d'une base de donnees specifique, eg,
  la   possibilite   de   creer  ou  supprimer  des  bases  de  donnees.
  L'invocation de ces methodes specifiques aux pilotes est  simple.  Par
  exemple,  pour  invoquer une methode createDatabase qui n'a qu'un seul
  argument, on ecrira :

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

  Les developpeurs de logiciels doivent cependant noter que ces methodes
  func ne sont pas portables entre SGBD.

  1122..22..2244..  AAssssiissttaannccee eett ffoorrmmaattiioonn

  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. L'auteur de ce
  document n'a aucune information sur la qualite  de  ces  services  (le
  traducteur  non  plus!).  Les  liens  ci-dessous ne sont indiques qu'a
  titre de reference.

  1122..22..2255..  AAssssiissttaannccee tteecchhnniiqquuee ccoommmmeerrcciiaallee

  The Perl Clinic The Perl Clinic peut  mettre  en  place  des  contrats
  commerciaux d'assistance pour Perl, DBI, DBD::Oracle et Oraperl. Cette
  assistance est effectuee par la compagnie  pour  laquelle  Tim  Bunce,
  auteur  de  DBI,  travaille. Pour des informations complementaires sur
  leurs services, veuillez voir :

  +o  <http://www.perl.co.uk/tpc>

  1122..22..2266..  AAuuttrreess RReeffeerreenncceess

  Dans cette section, on trouvera des liens WWW divers pouvant presenter
  un interet pour les utilisateurs de DBI. Ils n'ont pas ete verifies et
  peuvent mener a des sites inconnus ou a des documents inexistants.

  +o  <http://www-ccs.cs.umass.edu/db.html>

  +o  http://www.odmg.org/odmg93/updates_dbarry.html

  +o  http://www.jcc.com/sql_stnd.html

  1122..22..2277..  AAUUTTEEUURR

  L'auteur de cette FAQ DBI est a :

  +o  descarte@hermetica.com

  Cette FAQ est reproduite avec l'autorisation  de  Alligator  Descartes
  Hermetica

  1133..  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133..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

  Il est deja inclus dans la distribution de PostgreSQL.  Pour une copie
  plus recente, vous pouvez acceder au site web :

  +o  <http://www.flex.ro/pgaccess>

  +o  Si  vous  avez  des  commentaires,   des   suggestions   pour   des
     ameliorations, n'hesitez pas a envoyer un courrier electronique a :
     teo@flex.ro

  Ce qui suit est un  eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee ppggaacccceessss  :

  PgAccess - une interface Tcl/Tk pour PostgreSQL

  La derniere version de PgAccess est 0.63 , du 4 Decembre 1997

  Je pense  qu'il  y  a  eu  quelques  problemes  au  chargement  de  la
  bibliotheque  libpgtcl.   Je  vous  invite  a lire la section speciale
  concernant libpgtcl

  Que fait PgAccess maintenant!  Voici quelques images des  fenetres  de
  PgAccess  :  Fenetre  principale,  createur  de  tables,  vue de table
  (interrogation), createur visuel d'interrogation .

  Tables

  +o  - Ouverture de tables pour la  visualisation,  200  enregistrements
     maximum ( modifiable dans le menu des preferences )

  +o  -  re-dimensionnement d'une colonne en tirant la ligne verticale de
     la grille ( plus pratique a realiser a l'interieur meme de la table
     que dans l'en-tete)

  +o  -  texte  encadre  dans les cellules - disposition enregistree pour
     chacune des tables)

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

  +o  - possibilite de filtres (filtre de saisie, tel que (prix>3.14)

  +o  - possibilites de tri (saisie manuelle de(s) champ(s) a trier)

  +o  - edition en ligne

  +o  - assistant generateur de table ameliore

  +o  - edition de champ amelioree

     Requetes

  +o  - definition, edition et enregistrement de "requetes  definies  par
     l'utilisateur"

  +o  - enregistrement de requetes en tant que vues

  +o  - execution des requetes

  +o  - visualisation des resultats de requetes de type select

  +o  - suppression et changement de nom de requete

  +o  -  NOUVEAU  !!!  Createur  visuel  de requetes avec possibilites de
     "glisser/deposer".  Pour tous ceux d'entre vous qui ont l'extension
     pour Netscape Navigator de Tcl/Tk installee, vous pouvez le voir au
     travail en cliquant ici

     Sequences

  +o  -  definition  de  sequences,  ainsi  que  leurs   suppression   et
     inspection Fonctions

  +o  - definition, inspection et suppression de fonctions en langage SQL

  Sur la liste des choses A FAIRE !

  +o  - conception des tables (ajout de nouveaux  champs,  changement  de
     nom, etc.)

  +o  - definition de fonction

  +o  - generateur de rapport

  +o  - langage de script de base

  Si  vous  avez  des  commentaires,  ou des suggestions d'amelioration,
  envoyez, s'il vous plait, un courrier electronique a :

  +o  teo@flex.ro

  Informations complementaires concernant libgtcl

  Vous  aurez  egalement  besoin  de  la  bibliotheque  d'interface   de
  PostgreSQL  a  Tcl,  disponible comme moduleTcl/Tk chargeable. Son nom
  est libpgtcl et le source est  situe  dans  le  repertoire  PostgreSQL
  /src/interfaces/libpgtcl.   Precisement,   vous   aurez  besoin  d'une
  bibliotheque libpgtcl qui soit "chargeable" a partir  de  Tcl/Tk.   Ce
  qui   est   techniquement  different  d'un  fichier  objet  chargeable
  PostgreSQL ordinaire, car libpgtcl est  constituee  d'un  ensemble  de
  fichiers  objets.  Sous  Linux,  on l'appelle libpgtcl.so. Vous pouvez
  tele-charger a  partir  d'ici  une  version  deja  compilee  pour  les
  systemes  Linux i386. La seule chose a faire est de copier libpgtcl.so
  dans le repertoire bibliotheque systeme (/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 ete lie avec la bibliotheque
  libpgtcl!

  De toute maniere, l'application devrait fonctionner sans problemes.

  1133..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geenneerraattiioonn ddee  rreeqquueet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  a  PostgresSQL.   MPSQL  est identique a la
  feuille de programmation SQL d'Oracle et au serveur de requete SQL  de
  Microsoft  WISQL!  Il dispose d'un GUI agreable et d'un historique des
  commandes. Vous pouvez utiliser  le  coupe/colle  ainsi  que  d'autres
  fonctionnalites sympathiques pour accroitre votre productivite.

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

  +o  Email : keidav@whidbey.com

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

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

  +o  Email : de@ucolick.org

  1133..33..   OOuuttiill  iinntteerraaccttiiff  ddee  ggeenneerraattiioonn ddee rreeqquueet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  destine  aux  terminaux  fonctionnants  en  mode  ligne  de
  commande.  C'est inclus dans la distribution et  nomme  PSQL.  Il  est
  tres  similaire  a   Sybase ISQL, et a Oracle SQLplus. A l'invite unix
  tapez la commande 'psql' qui en retour  vous  affichera  le  caractere
  d'attente de commande: psql> .

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

  C'est  tres convivial et d'utilisation facile.  C'est aussi tres utile
  pour ecrire des scripts pour les interpreteurs de commandes.

  1133..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neee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  Donnees  pour
  PostgresSQL. Vous pouvez le trouver a

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

  +o  Email: keidav@whidbey.com

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

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

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

  +o  Email: de@ucolick.org

  1144..  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  a un unique
  moniteur en utilisant un commutateur pour choisir  la  connexion  avec
  une unite centrale particuliere. Ce qui economise de l'espace et evite
  l'utilisation de plusieurs ecrans,  claviers  et  mulots  (economisant
  environ  de  100 a 500 US dollars par ensemble) et evite aussi pas mal
  de pagaille.

  En utilisant cette technique, vous pouvez empiler  plusieurs  serveurs
  PostgreSQL  (developpement,  test, production), serveurs Web, serveurs
  ftp, serveurs Intranet, serveur de Courrier,  serveurs  de  Nouvelles,
  sur  une  etagere.  Le boitier commutateur peut etre egalement utilise
  pour controler des machines Windows 95/NT ou OS/2.

  Veuillez consulter ces sites :

  +o  <http://www.networktechinc.com/servswt.html>  (120   dollars/PC   8
     ports)  qui  propose des commutateurs de serveurs 'Server Switches'
     et des commutateurs uniquement video

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

  +o  Cybex corporation  <http://www.cybex.com>

  +o  Raritan Inc  <http://www.raritan.com>

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

  +o  Belkin Inc  <http://www.belkin.com>

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

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

  +o  Allez chez votre marchand de materiel le plus proche et demandez un
     commutateur  de serveur "Server Switch" egalement connu sous le nom
     "KVM Auto Commutateurs".

  Utilisez le moteur de recherche yahoo pour trouver d'autres compagnies
  en  utilisant la cle 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  particulierement  economique).  Les vendeurs locaux vendent
  uniquement du materiel SSAANNSS un quelconque  Microsoft  Windows/DOS  (ce
  qui  vous fait economiser environ $ 150).  Vous n'avez pas besoin d'un
  moniteur couleur pour un serveur  de  base  de  donnees  puisque  vous
  pouvez en effectuer l'administration a distance a partir d'une station
  de travail PC couleur. Procurez-vous le cdrom Linux  a  l'adresse  ci-
  dessous -

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

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

     Assurez-vous  que  le materiel que vous achetez est supporte par le
     Linux Redhat. Verifiez sur  le  site  ftp  de  Redhat  le  materiel
     recommande  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  a  PostgreSQL  a
     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 controler de nombreux systemes a
  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 a partir
  des USA)

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

  PILOTEZ PLUSIEURS PC's avec  un  seul  clavier,  ecran  et  mulot  Ces
  commutateurs  electroniques permettent de piloter jusqu'a 64 PC's avec
  un unique clavier, ecran et mulot. Son microprocesseur interne  simule
  la  presence  constante du clavier, de l'ecran et du mulot pour chacun
  des PC's connectes.

  Fonctionnalites et Applications

  +o  Clavier, face avant ou commande a distance

  +o  utilisation de connecteurs de mulots 9 broches D Serie ou 6 broches
     miniDIN

  +o  utilisation  de  connecteurs  de clavier 5 broches DIN ou 6 broches
     miniDIN

  +o  resolution video 1600x1200 sans degradation

  +o  Utilisation de cables standards

  +o  Boitier pour bureau ou pour montage en rack

  Specifications - Clavier

  +o  Tous les connecteurs dont femelles

  +o  5 broches DIN ou 6 broches miniDIN

  +o  Permettent un Re-demarrage (boot) materiel ou logiciel de tous  les
     PC's a chaque instant

  Controles - Boutons en face avant

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

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

  +o  Les LEDs en face avant indiquent le mode d'operation du clavier

  +o  L'appui sur CTRL+* entraine le fonctionnement en mode COMMAND

  +o  Les modes SCAN, BROADCAST ou COMMAND sont disponibles

  Mulot

  * 9 broches D serie

  +o  o Le commutateur NTI emule le mulot Microsoft serie pour  tous  les
     PC's

  +o  o 9 broches D male pour mulot

  +o  o 9 broches D femelle pour PC's

  * 6 broches miniDIN

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

  +o  o Tous les connecteurs sont femelles

  Par cable, a distance

  +o  Optionnel--doit etre acquis separement

  +o  Fonctionnement identique a celui "Boutons en face avant"

  Information technique

  * Demander le manuel technique MAN025

  Moniteur (ecran) - VGA

  +o  Bande passante 150 MHz

  +o  Resolution 1600X1200 sans degradation

  +o  Tous les connecteurs sont des connecteurs femelles

  Alimentation

  * 110 ou 220 VAC a 50 ou 60 Hz

  1155..  OOuuttiill SSyysstteemmee ddee ssuuiivvii ddee PPrroobblleem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 a l'url :

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

  1166..  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 a

  +o  <ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/>

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

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

  +o  M.Boekhold@et.tudelft.nl

  Vous pouvez egalement  utiliser  une  methode  python  pour  lire  des
  fichiers dbf et les charger dans une base de donnees postgres.

  +o  Voir  <http://www.python.org>

  1177..  LLee ssyysstteemmee ddee ddeevveellooppppeemmeenntt AAppppGGEENN

  PostgreSQL 4GL pour les applications de bases de donnees web.

  AppGEN peut etre tele-charge de

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

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

  OOnn ttrroouuvveerraa ccii--ddeessssoouuss uunn eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee AAppppGGEENN :-

  AppGEN  est un langage de haut niveau de la quatrieme generation ainsi
  qu'un  generateur  d'application  pour   produire   des   applications
  destinees  au  World Wide Web (WWW). Ces applications sont typiquement
  utilisees a travers l'internet ou dans le cadre d'un  reseau  intranet
  d'entreprise.  Les  applications  AppGEN  sont implantees en scripts C
  respectants la norme Common Gateway Interface  (CGI)  utilise  par  la
  plupart des serveurs Web.
  Pour utiliser AppGEN il vous faudra disposer de :-

  PostgresSQL, systeme de gestion de base de donnees relationnel

  Un serveur web compatible CGI tel que HTTPD du NCSA

  D'un compilateur ANSI C tel que GCC

  AppGEN est constitue des executables Unix (Linux) suivants :-

  +o  defgen,  qui produit une application cadre, de base, a partir de la
     structure logique  des  donnees.  Ces  applications  sont  capables
     d'ajouter,  de  mettre  a  jour,  de supprimer et de rechercher les
     enregistrements  d'une  base  de   donnees   tout   en   conservant
     automatiquement l'integrite referentielle de cette base.

  +o  appgen,  le compilateur AppGEN qui compile le code source appgen en
     code source C CGI executable et en documents  formates  HTML  prets
     pour leur deploiement sur un serveur web.

  +o  dbf2sql,  un  utilitaire de conversion de fichiers .dbf compatibles
     dBase III en scripts SQL executables. Ce qui permet de  migrer  les
     donnees  stockees  dans la plupart des bases de donnees DOS/Windows
     vers un serveur SQL tel que PostgresSQL.

  +o  De plus, AppGEN  comprend  un  ensemble  de  documents  HTML  ,  de
     fichiers  GIF  et  d'applets Java qui sont utilises, a l'execution,
     par le systeme. Et, naturellement, comme pour tout bon logiciel, la
     totalite du code source est fournie.

  L'auteur, Andrew Whaley, peut etre contacte a

  +o  andrew@arthur.smuht.nwest.nhs.uk

     tous  les commentaires ou suggestions concernant ce logiciel seront
     les bienvenus.

  1188..  OOuuttiill ddee CCoonncceeppttiioonn//IImmpplleem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P

  +o  <http://www.oswego.edu/Earp>

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

  OOnn ttrroouuvveerraa ccii--ddeessssoouuss uunn eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee EEAARRPP:-

  Le "Programme de Reponse  Facilement  Ajustable"  ("Easily  Adjustable
  Response Program" - EARP) cree par David Dougherty

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

  EARP  est  un  outil de Conception/Implementation pour Base De Donnees
  Web, realise au-dessus du  systeme  de  gestion  de  base  de  donnees
  PostgresSQL. Ses fonctionnalites comprennent:

  +o  Un systeme de conception visuel.

  +o  Une interface d'envoi de courrier electronique. (pouvant prendre en
     charge le courrier entrant et sortant)
  +o  Un Mecanisme de Securite ameliore.

  +o  Un pilote cgi.

  1188..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'execute  sous  le demon http pour fournir l'acces au serveur de base
  de donnees. Tous les  outils  de  conception  sont  integres  dans  le
  pilote,  aucune conception ne se fait sur le web. Les outils eux-memes
  requierent un navigateur graphique, la compatibilite des objets concus
  avec  ces  outils  est  independante de l'implantation, elle ne depend
  uniquement que des preferences de conception individuelles.

  1188..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 sense fonctionner sur une  grande  variete  de  plates-formes
  avec  peu  de  modifications sinon pas du tout. Les plates-formes pour
  lesquelles le fonctionnement est connu sont les suivantes:

  +o  Solaris 2.5

  +o  Linux 1.2.13+

  +o  GNU C++

  +o  Postgres95 (Version 1.01 / 1.02)

  +o  netsite server

  +o  NCSA httpd

  +o  GNU C++

  +o  Postgres95 (Version 1.01 / 1.02)

  +o  NCSA httpd

  +o  Apache httpd

  1188..44..  NNoouuvveelllleess FFllaasshh

  La version actuelle (1.3) de Earp a ete concue au-dessus de la version
  de  libpq  livree  avec  Postgres95  v1.01/1.02.  Si vous utilisez une
  version plus recente de Postgres, vous devez vous attendre a ce que le
  programme    necessite   quelques   modifications   pour   fonctionner
  correctement.  Dans la version de developpement (Earp 2.0),  la  prise
  en charge de libpq est en cours de prise en compte en tant que module,
  et de ce fait pourra supporter autant de versions de postgres que nous
  aurons  de  temps pour ecrire ces modules. La version de developpement
  est  attendue,  pour  le  public,   aux   alentours   du   milieu   du
  printemps(97).

  1188..55..  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  fonctionnalites  principales  de  EARP  est  d'utiliser  une
  approche orientee objet pour produire des pages html qui s'interfacent
  a  la  base  de  donnees.  La  plupart  des  pages sont constituees de
  plusieurs objets. Chaque objet est produit par une  sorte  d'outil  et
  recoit  un  nom,  les  objets  sont alors lies ensembles et appeles en
  sequence par l'outil de gestion de pages. Les  objets  sont  egalement
  reutilisables  a  l'interieur de plusieurs pages. Il existe des outils
  de base pour  HTML,  pour  les  Requetes,  pour  la  saisie  dans  des
  formulaires,  le  formatage  variable  des  requetes  et des objets en
  entree, ainsi que pour lier des objets pour en former de nouveaux.  On
  trouve  egalement des outils plus avances tels que l'outil de courrier
  electronique et l'outil de creation de requetes en parallele.

  La  gestion  perfectionnee  de  la  securite  est   une   des   autres
  fonctionnalites  de  EARP.   L'acces  aux differentes zones du systeme
  EARP peut etre limite par une grande variete de moyens. Pour faciliter
  cette  securite  perfectionnee,  EARP  effectue des controles a chaque
  connexion  au  systeme,  et  determine  a  quels  "ids"  et   "groups"
  appartient  l'agent  qui se connecte. Les acces aux zones sont definis
  separement, et la combinaison des deux permet de decider si l'acces  a
  une  certaine  zone  de  Earp  est autorise. De plus , tout ce qui est
  requis pour realiser les fonctionnalites de securite se trouve dans un
  serveur  http  qui  effectue  une  authentification  de  l'utilisateur
  minimale (ou meilleure).

  1188..66..  QQuueellqquueess eexxeemmpplleess eenn lliiggnnee

  Partie integrante de l'aide au SGBD ICC  Help  Database,  la  Page  du
  Catalogue  de  Recherche  est  un  document  EARP  qui  peut  executer
  plusieurs requetes.  Les boites de  selection  sont  generees  par  le
  programme EARP a partir de listes dans la base de donnees.

  Comme autre exemple de ce que l'on peut faire avec EARP... vous pouvez
  maintenant voir la Liste des Objets de la Base de Donnees d'aide.

  La creation de ces trois interfaces m'a pris moins de quinze  minutes.

  1188..77..  OOuu 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 a

  +o  <ftp://ftp.oswego.edu>

     dans  le  repertoire 'pub/unix/earp'. La version actuelle a la date
     de redaction de ce texte est 1.3.1

  S'il vous plait, apres avoir recupere et mis en service EARP,  envoyez
  moi un mot pour en decrire le succes ou les echecs.

  1188..88..  DDooccuummeennttaattiioonn ddiissppoonniibbllee

  Toute  la  documentation a ete deplacee a la page index "User Docs and
  Tutorials" (Documentation Utilisateur et Cours).

  1188..99..  LL''HHiissttooiirree dd''EEAARRPP

  Earp 0.1 a  demarre  en  tant  que  programme  a  l'automne  1995.  Je
  travaillais  a  la  realisation d'un livre d'or accessible par le web,
  dynamiquement configurable.  A ce moment la, il y avait tout un tas de
  programmes  cgi  faisant  tous  quelque chose de different et d'utile,
  agreges par un peu de colle SSI et un  peu  de  programmation  c.   Je
  realisais  alors  que je faisais beaucoup de travail repetitif, et que
  la plupart des choses que  je  faisais  devaient  s'executer  dans  de
  nombreuses fenetres a la fois (netscape, emacs, shell, mail) alors que
  la mise au point etait  rapidement  devenue  un  cauchemar.   A  cette
  epoque  mon ami et patron Don Michaels me contacta. Il etait interesse
  par l'automatisation d'une grosse partie de notre support  utilisateur
  et  par  la tenue d'une base de donnees gerant l'historique des appels
  et des reponses.

  Peu de temps apres, j'avais termine le schema initial de ce qui est en
  train  de  devenir rapidement notre base de donnees d'aide. Seulement,
  je rechignais a l'idee de construire une  base  de  donnees  d'aide  a
  partir  de ce qui etait alors un ensemble tres primitif d'utilitaires.
  Lorsque les cours du printemps 96 debuterent, je demarrais quand  meme
  le  projet,  principalement  sous le coup de l'ennui, mais aussi parce
  que j'etais dans un cours d'architecture de base de donnees et que  je
  voulais m'entrainer un peu les meninges. Peu de temps apres j'avais un
  prototype acceptable en etat de marche, ce qui rendit Don tres heureux
  car  il avait renonce a l'idee de quelqu'un creant une base de donnees
  d'aide  pour  lui.  (Le  prototype  tourne  encore  sur  l'un  de  mes
  serveurs...(juin  96))  Le  prototype faisait vraiment quelques choses
  tres interessantes, mais en avril, j'etais a  nouveau  decourage...  A
  chaque  fois que je desirais modifier quelque chose, j'entrais dans un
  lent processus de recompilation, ou je tombais sur  un  fichier  texte
  particulierement  distrayant.  Je n'avais aussi aucun moyen d'utiliser
  le concept de building block si utile dans EARP...  J'ai  realise  pas
  mal  d'enormes  coupes-colles.  Vers la fin de l'annee scolaire je fus
  encore une fois decourage sur le deroulement des  choses  et  decidais
  que  ce  dont  j'avais  besoin,  c'etait  d'un  ensemble d'outils plus
  adaptes a ce que je  faisais.  De  plus,  je  voulais  aussi  que  mon
  prototype fonctionne sur une VRAIE base de donnees relationnelle et je
  ne cherissais pas l'idee de recommencer tout ce travail d'acces  codes
  en dur, de liens, et de methodes de sortie.

  J'eus  un  bref moment de repit, si l'on peut dire. Nous soutenions la
  Conference SUNY CIT et j'ai tellement ete occupe pendant  une  semaine
  et  demi  que je pris du recul par rapport a tout ce que j'avais ecrit
  sur le prototype de base de donnee d'aide excepte sur  les  idees  que
  j'avais  eues  quand j'avais ecrit la serie d'utilitaires initiale et,
  ce qui m'irritait le plus c'etait l'etat actuel des choses.

  Peu de temps apres la conference, je commencais  le  prototype  de  la
  version  actuelle  de  EARP(may96),  en  utilisant le SGBD relationnel
  postgres95 comme support. A la mi-juin, le prototype avait  evolue  en
  une suite integree de prototypes d'outils tout a fait seduisante, avec
  comme premier avantage de tous tourner en html, et  de  stocker  leurs
  donnees d'initialisation dans la base de donnee. La plus grande partie
  de la deuxieme moitie de juin fut consacree a la mise au point du code
  et  a  l'utilisation  de  l'interface.( Pendant ces deux semaines j'ai
  accede plus de 5000 fois a notre serveur  web.)  A  la  fin  juin,  la
  plupart  des  bogues importants etaient chasses de EARP, et il y avait
  un nombre suffisant d'objets dans la "nouvelle" base de donnees d'aide
  que  l'on  pouvant  en  faire  l'annonce  officielle a notre equipe de
  support.

  A propos, j'ai egalement tenu un journal pendant le  developpement  de
  EARP  et Don Michaels et moi presentons un papier decrivant la Base de
  Donnees d'Aide a la conference ACM/SIGUCCS a Chicago en  Septembre  de
  cette annee.

  1199..  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

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

  dbengine  est  une  interface Web "plug 'n play" pour Postgres95 creee
  par Ingo Ciechowski

  Un eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee ddbbeennggiinnee est donne ci-dessous:-

                                   dbengine

                              [CGI-Forum Webring]

                  une interface "installez-et-utilisez" pour Postgres95

  Version 0.82 alpha
  Documentation au 08/11/97
  Ecrit par Ingo Ciechowski
  ---------------------------------------------------------------------------

  A propos de dbengine

  dbengine est une interface entre le WWW et Postgres95  qui  permet  un
  acces simple a n'importe quelle base de donnees existante en seulement
  quelques minutes.

  Ce petit  programme  Perl   est  ne  apres  avoir  essaye  un  tas  de
  paquetages  disponibles  tels  que  AppGen, PHP-FI et d'autres. Alors,
  pourquoi ai-je, en quelque sorte, reinvente la roue ?

  Et bien, PHP-FI offre une sorte de langage Perl  dans  vos  documents,
  mais  pas  le  vrai  Perl  alors  que  AppGen  et wdb-p95 necessite la
  creation d'un fichier de configuration pour chacune de  vos  bases  de
  donnees  --  c'est  un  peu  comme si vous deviez apprendre un nouveau
  meta-langage avant de pouvoir commencer a travailler.

  C'est a ce moment que je commencais a me sentir plus a l'aise avec une
  petite applet Perl de mon cru... et maintenant mon dbengine est devenu
  un outil qui, je pense, est pret a etre partage avec les autres.

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

  Le systeme tout  entier  peut  etre  configure  a  l'aide  de  simples
  manipulations  d'une  base  de donnees complementaire qui contient les
  informations de detail sur la maniere de visualiser  vos  acces  a  la
  base  de  donnees.  Vous pouvez meme specifier des Champs Virtuels qui
  sont calcules en temps reel avant d'etre affiches a l'ecran.

  Images d'ecrans

  +o  Vue d'une liste des tables  et  des  bases  de  donnees  connectees
     (104k)

  +o  Vue d'un enregistrement avec la liste des enregistrements concernes
     d'une table separee (100k)

  Licence

  dbengine est un logiciel libre selon les memes  conditions  que  Perl.
  Lisez  sa  licence  si vous n'etes pas sur de ce que vous pouvez ou ne
  pouvez pas faire. La derniere ligne indique que c'est une version plus
  gentille  et  plus moderee 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!
  informations complementaires...

  Si  vous  etes interesse par des informations plus precises concernant
  dbengine, utilisez ces liens :

  +o  comment installer dbengine

  +o  comment configurer le paquetage

  +o  travailler avec dbengine

  +o  base de donnees de description

  +o  fichiers modeles

  Si vous avez besoin d'informations complementaires,  n'hesitez  pas  a
  m'envoyer  un E-Mail.  Et naturellement, il y a de plus le code source
  Perl, bien documente, qui peut vous aider a trouver votre chemin ;-)

       ---------------------------------------------------------------------------
            derniere mise a jour de cette page : 08/11/97
       ---------------------------------------------------------------------------

  2200..  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 a -

  +o  <http://www.neosoft.com/neowebscript/>

  Voici, ci-dessous, un eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee NNeeooWWeebbSSccrriipptt:-

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

  Quand  une  page HTML contenant un script NeoWebScript est appelee, le
  serveur Web , ayant le NeoWebScript active,  execute  le(s)  script(s)
  inclus,  produisant  une page Web dont le contenu, personnalise, a ete
  cree par le programme.

  NeoWebScript est un moyen rapide, sure, facile a  apprendre  de  creer
  des programmes interactifs puissants directement en code HTML dans des
  pages Web.  Avec  NeoWebScript,  les  compteurs,  les  formulaires  de
  courrier  electronique,  murs  a  graffitis,  livres d'or et suivi des
  visiteurs sont aises, meme  pour  un  programmeur  debutant.  Regardez
  comment  NeoWebScript se defend bien par rapport a PERL et JavaScript.

  NeoWebScript 2.2 vient de sortir!   Le  24  juin  1997,  NeoSoft  rend
  disponible  la version 2.2 de NeoWebScript 2.2, en l'integrant avec le
  nouveau serveur Apache 1.2.0 .

  Si vous utilisez un serveur web ayant  NeoWebScript  installe  et  que
  vous   vouliez  commencer  a  l'utiliser,  il  y  a  un  tout  un  tas
  d'Informations Utilisateur disponibles. Les  reponses  de  bases  pour
  demarrer   se   trouvent   dans   la  "FAQ  Nouvel  Utilisateur".  Des
  didacticiels vous guident dans l'apprentissage du langage,  alors  que
  des  Demonstrations  vous apportent des applications toutes faites que
  vous pouvez tele-charger et adapter. Le  document  "Commandes  et  les
  Variables"  constitue  la  reference  complete du langage, et celui de
  Maintenance contient des conseils et des astuces  pour  vous  aider  a
  resoudre tous les problemes.

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

  He,  attendez  une   minute   direz-vous,   combien   voulez-vous   en
  contrepartie  d'un  tel  logiciel,  hein?  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 complete
  quand vous vous enregistrerez  pour  tele-charger  le  logiciel,  mais
  l'essentiel  est que nous aimerions recevoir la somme monstrueuse de $
  99 si vous desirez 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  ete  invente  par  Karl
  Lehenbauer, Directeur Technique chez NeoSoft, et  documente,  renforce
  et  etendu  par  les  programmeurs  de  NeoSoft  et par des redacteurs
  techniques.

  Le serveur Apache est le serveur  web  le  plus  populaire  au  monde,
  totalisant  42  %des  1  044  163  sites  interroges  lors  de l'etude
  "Netcraft Web Server" de Mai 1997.  La  deuxieme  plus  grande  valeur
  enregistree  concerne  les  differents  serveurs Microsoft, totalisant
  legerement plus  de  16  %,  soit  une  difference  d'environ  270,000
  serveurs.

  Tcl/Tk  est  un langage de script puissant, libre et multi-plateformes
  developpe par le Dr. John Ousterhout,  maintenant  "Sun  Distinguished
  Engineer"  (n.d.t. : distinction honorifique de la Cie Sun). Selon ses
  propres termes :

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

  Avec une communaute de developpement de plus de 500 000  personnes  de
  par  le  monde  et des milliers d'applications commerciales, Sun vient
  juste d'annoncer la creation d'un  nouveau  groupe  de  travail  nomme
  SunScript,  pour  soutenir  cette  communaute avec un environnement de
  developpement integre et pour developper une suite  de  produits  pour
  etablir un lien entre Tcl le Web et Java.

  Karl  Lehenbauer,  Fondateur  et  Directeur  Technique  de  NeoSoft, a
  participe au developpement de Tcl/Tk des  le  tout  debut.  Avec  Mark
  Diehkans,  ils  sont  les auteurs de Tcl etendu  (Extended Tcl), connu
  egalement 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  etendu,  et  furent
  introduites dans le langage par le Dr.  Ousterhout.

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

  2211..  HHEEIITTMMLL,, eexxtteennssiioonn,, ccoottee 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t--
  ggrreeSSQQLL

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

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

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

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

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

  Heitml est a la fois une  extension,  cote  serveur,  de  HTML  et  un
  langage de la quatrieme generation (4GL). Avec lui, on peut ecrire des
  applications web dans un style  HTML  et  en  utilisant  de  nouvelles
  balises de style HTML.

  heitml  (prononce "H-ail"-TML) est une extension de HTML et un langage
  de quatrieme generation complet permettant aux Applications  utilisant
  le web d'interagir avec des donnees stockees dans des bases de donnees
  SQL, sans meriter l'ecriture de scripts CGI complexes.

  heitml etend HTML cote serveur, convertissant de maniere dynamique les
  fichiers  ".hei" au format HTML et ainsi, les rendant compatibles avec
  n'importe quel butineur web. Il englobe la syntaxe simple et familiere
  de HTML et apporte un large assortiment de Balises et de Bibliotheques
  pre-developpees pour prendre  en  charge  les  taches  qui  auparavant
  necessitaient  CGI.  De  meme  que XML, heitml permet l'utilisation de
  balises definies par l'utilisateur. Avec heitml les marqueurs  definis
  par  l'utilisateur  peuvent  etre  traduits  en  HTML  et envoyes a un
  butineur.

  heitml est destine a la fois aux concepteurs HTML et aux  programmeurs
  professionnels.  Les  concepteurs  HTML  peuvent  utiliser les Balises
  heitml pour fabriquer des pages web dynamiques, des acces aux bases de
  donnees SQL ou creer des applications web completes. On peut creer des
  Compteurs, des bases de donnees  d'inscriptions,  des  formulaires  de
  recherche,  des  formulaires  de  courrier  electronique  ou des menus
  hierarchises en utilisant simplement des Balises de  style  HTML  pre-
  developpees  que  l'on  trouve  dans  les  nombreuses Bibliotheques de
  Composants.

  Pour  les  programmeurs,  heitml  inclut  un  langage   de   quatrieme
  generation complet en HTML

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

  plus  un  evaluateur  d'expression  puissant pour les types de donnees
  entiers, reels, booleens chaine de caracteres et tuple. Les tuples ont
  une  reference semantique comme dans les langages orientes objets mod-
  ernes et sont stockes sur un  tas.  Les  variables  heitml  y  compris
  toutes les structures de donnees complexes stockees sur le tas conser-
  vent leur valeur de page en page par l'utilisation du Mode Session. Il
  vous  est  possible  de  definir  vos  propres  balises ou vos balises
  d'environnement et meme de redefinir les balises HTML.

  Avec heitml il devient possible de

  - - - developper des Sites Web de  maniere  structuree  et  modulaire,
  tout   en   reduisant  de  facon  drastique  la  surcharge  due  a  la
  maintenance.

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

  -  -  -  de  visualiser  le contenu de bases de donnees SQL sans autre
  programmation que l'utilisation de notre bibliotheque de Balises  pre-
  definies "dba".

  -  - - de developper des applications de bases de donnees 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  particulierement rapide (mis a part la
  surcharge due a 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 donnees  yard  sont
  supportes.  heitml  tourne sous Linux, BSDi, Solaris et SunOS, de meme
  que sous Windows NT avec CGI, ISAPI et ODBC et Windows 95.

  heitml  (sous  linux)  est  libre  pour  la  recherche,  et  pour  une
  utilisation  privee  et  non  commerciale.  Les  Sites Web commerciaux
  doivent payer une licence. La  version  totalement  operationnelle  de
  heitml  est  disponible  pour  une  periode d'essai et peut etre tele-
  chargee librement. (Notez, cependant, que chaque page Web  ".hei"  que
  vous  developperez  affichera  un message indiquant qu'il s'agit d'une
  version a usage non commerciale. Apres enregistrement,  vous  recevrez
  une   cle  pour  effacer  ce  message  sans  avoir  a  reinstaller  le
  programme.)

  Les nouvelles fonctionnalites de la version 1.2 sont

  - - - Bibliotheque de Composants pour  des  Formulaires  de  Recherche
  dans  un  Base  de  Donnees,  menus  hierarchises  d'ouverture  et  de
  fermeture, formulaires de courrier electronique

  - - - Le Mode Session a ete re-concu et ameliore pour conserver toutes
  les   variables  (y  compris  le  tas  tout  entier)  au  travers  des
  differentes pages. Cela signifie que les donnees, de n'importe  quelle
  taille  sont  conservees  a  l'interieur  d'une  session.  Ceci  offre
  l'opportunite  d'un  champ  plus  large  pour   creer   de   nouvelles
  applications,  e.g. stockage complet des resultats d'une interrogation
  dans la memoire de la session.

  - -  -  Les  instructions  d'installation,  la  documentation  et  les
  bibliotheques  d'exemples ont ete augmentees de maniere significative,
  un cours d'auto-formation a ete ajoute

  - - - Des balises pour executer des commandes shell  et  pour  envoyer
  des courriers electronique ont ete ajoutees

  -  -  -  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 facon intuitive. En cas d'erreur a l'execution,
  toutes les structures de  donnees  internes  sont  affichees  dans  le
  butineur  en  indiquant  et  preservant  leurs  positions dans le code
  source original.

  - - - Diverses nouvelles variables serveur et fonctions integrees  ont
  ete ajoutees

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

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

  heitml   (prononcer   "H-ail"-TML)   etend   et   augmente   de  facon
  significative  les  fonctionnalites  de   HTML   grace   aux   balises
  definissables  et  aux possibilites completes de programmation. Ce qui
  permet de creer simplement des applications au  contenu  dynamique  et
  orientees  bases  de  donnees  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  cote, comme
  utilisateur  avance  ou  comme  programmeur  vous  pouvez   creer   et
  programmer  de  puissantes  bibliotheques  de balises.  Cette approche
  rend heitml souhaitable a la fois pour les  utilisateurs  nouveaux  de
  HTML  et  pour  les programmeurs professionnels.  heitml tourne sur le
  serveur  web  et  genere  dynamiquement  du  HTML,  aussi  heitml  est
  compatible  avec  les  normes internet et avec n'importe quel butineur
  web. Il permet un acces total aux bases de donnees tout en  evitant  a
  l'utilisateur  toute  la  complexite  inutile  de  CGI.  heitml  a ete
  developpe selon les plus recents criteres en matiere  de  construction
  de compilateurs et de systemes transactionnels.

  Les  pages heitml sont developpees exactement de la meme facon que les
  pages  HTML, a l'aide d'un editeur de texte ou d'un editeur  HTML,  et
  placees  comme  d'habitude  sur le serveur web. Cependant, maintenant,
  les pages peuvent contenir des balises heitml dynamiques et des  acces
  a  des bibliotheques de balises. Vous pouvez utiliser ces balises pour
  acceder a une base de donnees, pour creer un contenu  dynamique,  pour
  envoyer  des  courriers electronique, et meme pour creer de puissantes
  applications telles que les bases  de  donnees  d'inscriptions  ou  de
  systemes d'achats.

  Les  nouveaux  venus  a HTML et les programmeurs professionnels seront
  stupefaits de la vitesse et de la facilites avec lesquelles il peuvent
  concevoir  des  applications  passionnantes telle que notre Livre d'Or
  Interactif sans necessiter la complexite et l'apprentissage difficiles
  des scripts CGI, simplement en utilisant les outils fournis dans notre
  bibliotheque dba.

  heitml est accompagne d'un large eventail de bibliotheques de balises,
  pour  creer  des livres d'or, des applications de maintenance de bases
  de donnees, des formulaires puissants de courrier electronique  ou  de
  structuration  de  votre site web a l'aide de menus hierarchiques. Ces
  outils sont prets a etre utilises, il suffit simplement d'ajouter  les
  balises correspondantes a votre site web.

  En  tant  que programmeur experimente, vous pouvez pleinement utiliser
  l'architecture dynamique persistante de tuple d'heitml : heitml  n'est
  pas   simplement  un  langage  de  script  a  typage  dynamique,  avec
  evaluateur d'expression, procedures recursives et capacites de passage
  de  parametres  etendues,  mais  il  apporte aussi des possibilites de
  tuples  persistants  dynamiques  pour  conserver  automatiquement  des
  donnees de session de n'importe quelle taille.

  heitml  a  tellement  de  nouvelles possibilites et d'usages que c'est
  impossible de les decrire tous dans une simple page web.   Pour  cette
  raison,  nous  avons  concu  ce site Web de maniere a fournir soit une
  simple vue d'ensemble du produit, soit a fouiller  aussi  profondement
  que  vous  le  desirez  dans les "tenants et aboutissants" du langage.
  Quelle que soit l'approche que vous choisirez, nous pensons  que  vous
  trouverez  que  heitml  a beaucoup a offrir, et nous esperons que vous
  serez d'accord pour trouver que reellement "il porte le monde du World
  Wide Web a un niveau plus eleve!"

  Le  menu,  sur  le  cote gauche de l'ecran vous aidera a naviguer dans
  notre Site Web Site de maniere  organisee  et  methodique,  mais  vous
  pouvez  aussi  utiliser  notre  Menu  Rapide  (Quick Menu) pour sauter
  directement a n'importe quelle page avec un seul clic sur le mulot.

  Si vous visitez ce Site pour la premiere  fois,  nous  vous  suggerons
  d'essayer   le   Livre   d'Or   Interactif  d'heitml  pour  avoir  une
  demonstration vraiment impressionnante de la facon  dont  heitml  peut
  rendre  vos  Pages  Web  plus interactives. Si vous signez notre Livre
  d'Or, vous pouvez nous laissez vos  commentaires  ou  nous  parler  de
  votre Site Web favori en utilisant les commandes de formatage de HTML.
  C'est comme si vous creiez votre propre page Web privee et que vous la
  voyiez publiee immediatement!

  La  section  traitant des Fonctionnalites de heitml fourni un Sommaire
  Rapide de ses Fonctionnalites et de ses Avantages,  de  meme  que  des
  Pages  destinees  a  repondre aux besoins specifiques et aux questions
  des Concepteurs et des Programmeurs. Notre Guide du Langage  offre  un
  didacticiel,  en ligne, qui montre, de maniere pratique, quelques unes
  des  facons  dont  vous  pouvez  utiliser   heitml  pour   developper,
  ameliorer et simplifier vos Pages Web et vos Applications.

  Le  document Reference du Langage est destine a ceux qui cherchent une
  information specifique sur la syntaxe, la structure, et  l'utilisation
  des  differents  elements  du langage. Cependant, ce pourrait etre une
  bonne idee pour tout le monde de lire la Page concernant la Conception
  Generale  qui  offre  une  vue  d'ensemble  sur les types de problemes
  specifiques pour lesquels heitml a ete concu  afin  d'y  apporter  une
  solution.

  Naturellement,  vous  voudrez  savoir  si heitml tourne sur le Systeme
  d'Exploitation specifique, le Serveur Web, ou le  SGBD  SQL  que  vous
  utilisez,  vous  trouverez  toutes ces informations dans notre section
  des Plates-formes Supportees.

  Enfin,  nous  vous  invitons  a  Tele-charger  une  copie  d'essai  du
  programme  pour  l'utiliser sur votre propre systeme. Nous sommes surs
  que vous apprecierez cette "methode  d'essai  avant  achat",  et  nous
  sommes  a l'ecoute de tout retour d'informations que vous voudrez bien
  nous donner.

  222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 gratuitr, AOLserver version 2.3 supporte des
  connexions   a   la  base  de  donnees  PostgreSQL  version  6.2.1  et
  ulterieure.  Pour des informations complementaires consultez

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

  2233..  PPHHPP//FFII LLaannggaaggee ddee ssccrriipptt ccoottee sseerrvveeuurr,, aavveecc  HHTTMMLL  iinntteeggrree,,  ppoouurr
  PPoossttggrreeSSQQLL

  Outil d'interfacage WWW

  +o  <http://www.php.net>

  +o  <http://www.vex.net/php>

  Page d'acceuil professionelle (PHP)

  +o  <http://www.php.net>

  +o  <http://php.iquest.net/>

  Pour les questions envoyer un courrier electronique a :

  +o  rasmus@lerdorf.on.ca

  On trouvera ci-dessous un eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee PPHHPP//FFII :-

  PHP/FI est un langage  de  script  cote  serveur,  avec  langage  HTML
  integre.  Il vous permet d'ecrire des scripts simples directement dans
  vos fichiers .HTML a la maniere JavaScript, sauf que, a la  difference
  de  JavaScript,  PHP/FI  n'est  pas  dependant  du  butineur  utilise.
  JavaScript est un langage, cote client, avec HTML  integre  alors  que
  PHP/FI  est  un  langage  cote serveur. PHP/FI 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
  systemes d'exploitation supportes, et vous  jetterez  probablement  un
  oeil  sur  LiveWire  Pro. Si vous preferez un logiciel libre, evoluant
  rapidement, qui est disponible avec la totalite de  son  code  source,
  vous apprecierez probablement PHP/FI.

  2233..11..  FFoonnccttiioonnnnaalliittees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/FI peut etre installe sur n'importe  quelle  machine
  Unix  sur  laquelle  tourne  n'importe  quel serveur web Unix. Avec le
  support de la nouvelle norme FastCGI, PHP/FI peut trouver avantage des
  gains  de  vitesse  apportes  par  ce  mecanisme. Comme module Apache,
  PHP/FI devient une alternative extremement puissante et brillante a la
  programmation CGI.

  +o  Enregistrement des acces Avec les possibilites d'enregistrement des
     acces de PHP/FI, les utilisateurs peuvent  entretenir  leur  propre
     compteur d'acces et l'enregistrer. Il n'utilise en aucune facon les
     fichiers de d'enregistrement des connexions du systeme central,  et
     il  permet  un  suivi  des  acces  en  temps  reel.  Le  Script  du
     Visualisateur de Connexions fournit un resume rapide des acces a un
     ensemble de pages possedees par un utilisateur individuel. De plus,
     le paquetage peut etre configure pour generer un pied de page,  sur
     chaque  page,  qui  montre l'information sur les acces. Regardez au
     bas de cette page pour en avoir un exemple.

  +o  Controle d'acces Un ecran de configuration  integre,  base  sur  le
     web, permet la configuration du controle des acces. Il est possible
     de creer des regles d'acces pour toutes ou quelques unes des  pages
     web   possedees   par   une  certaine  personne  qui  met  diverses
     restrictions sur qui peut voir ces pages et  comment  elles  seront
     vues.   Les  pages  peuvent  etre  protegees  par  un mot de passe,
     completement interdites, a connexion desactivee et l'acces base sur
     le   domaine   du   client,  le  butineur,  l'adresse  de  courrier
     electronique ou meme le document auquel on se refere.

  +o  Support de Postgres Postgres est un  SGBDR  (RDBMS)  avance  libre.
     PHP/FI  supporte les requetes Postgres95 et PostgreSQL SQL incluses
     directement dans les fichiers .html.

  +o  RFC-1867 Support du tele-chargement de fichier  Le  tele-chargement
     de  fichier  est  une  nouvelle fonctionnalite de Netscape 2.0.  Il
     permet aux  utilisateurs  de  tele-charger  des  fichiers  vers  le
     serveur  web.   PHP/FI  realise le decodage Mime reel pour faire ce
     travail et fournit aussi le cadre additionnel  pour  faire  quelque
     chose  d'utile  avec le fichier tele-charge une fois que celui-ci a
     ete recu.

  +o  Controle d'authentification base sur HTTP PHP/FI peut etre  utilise
     pour  creer  des  mecanismes d'authentification personnalises bases
     sur HTTP pour le serveur web Apache.

  +o  Variables,  Tableaux,  Tableaux  associatifs  PHP/FI  supporte  des
     variables  typees,  des tableaux et meme des tableaux associatifs a
     la Perl. Ils peuvent etre  passes  d'une  page  web  a  l'autre  en
     utilisant les methodes GET ou POST.

  +o  Conditions,  Boucles  Tant que (While) PHP/FI possede un langage de
     script aux fonctionnalites completes 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
     controler l'ordre logique et la maniere dont les pages html doivent
     etre affichees.

  +o  Expressions Regulieres etendues  Les  expressions  regulieres  sont
     tres  utilisees  pour  le filtrage, le remplacement de sequences et
     les  manipulations  generales  de  chaines  de  caracteres.  PHP/FI
     supporte   toutes  les  operations  communes  sur  les  expressions
     regulieres.

  +o  Controle de l'En-tete HTTP brute La possibilite d'envoyer a  partir
     de  pages  web  des en-tetes HTTP brutes personnalisees en fonction
     d'une condition est essentielle pour creer  un  site  web  de  haut
     niveau. Un usage frequent est l'envoi d'un emplacement: en-tete URL
     pour Rediriger le client appelant vers  une  autre  URL.   Il  peut
     aussi  etre  utilise  pour  stopper  le  stockage  ou  manipuler la
     derniere mise a jour de l'en-tete de pages.

  +o  Creation d'images  KIF  a  la  volee  PHP/FI  prend  en  compte  la
     bibliotheque   d'image  GD  de  Thomas  Boutell  ce  qui  offre  la
     possibilite de generer des images GIF a la volee.

  +o  Prise en charge du mode securite ("Safe Mode") ISP PHP/FI prend  en
     charge  un  "Mode  de  Securite" exceptionnel qui permet d'avoir de
     multiples utilisateurs executant des scripts PHP en toute  securite
     sur le meme serveur.

  +o  C'est Libre!  Pour finir, et c'est un point essentiel. Le paquetage
     est entierement 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 detailles.

  2233..22..  CCrreeddiittss

  *  De  grandes  parties  de  ce  code  ont  ete  developpees a et pour
  l'universite de Toronto. De grands Mercis a Lee Oattes du  Departement
  de  Developpement  des  Reseaux  a  l'universite  pour  ses  critiques
  constructives permanentes.

  * Le code de prise en charge  de  Postgres95  a  ete  ecrit  par  Adam
  Sussman

  +o  asussman@vidya.com

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

  2233..33..  PPHHPP//FFII VVeerrssiioonn 22..00 -- BBrreeff HHiissttoorriiqquuee

  PHP a commence sa vie comme simple  petite  enveloppe  cgi  ecrite  en
  Perl.   Je  l'ai  ecrit  en un apres-midi, dans une periode entre deux
  contrats, alors que j'avais besoin d'un outil rapide  pour  avoir  une
  idee de la personne qui etait en train de lire mon curriculum vitae en
  ligne. Je n'avais pas eu l'intention de le voir utiliser en dehors  de
  mon  propre  usage.   Le serveur web sur lequel j'avais mon curriculum
  vitae etait extremement surcharge et avait des problemes constants  de
  creation de processus. Je reecris le petit programme Perl en C pour me
  debarrasser de la surcharge considerable generee par la creation  d'un
  processus  d'execution  du  programme  Perl  a  chaque  fois  que  mon
  curriculum vitae etait consulte.

  Par la suite d'autres personnes, sur  le  meme  serveur  web,  prirent
  connaissance  de mon petit programme et me demanderent s'ils pouvaient
  l'utiliser. Alors, comme cela devait arriver, ils  commencerent  a  me
  demander  plus  de fonctionnalites. J'ajoutais plus de fonctionnalites
  et finalement constituais une  semi-distribution  en  y  incluant  une
  documentation,  une  liste  de  diffusion  et  une  FAQ.  Le nom de ce
  paquetage etait "Outils pour une Page d'Accueil Personnelle" (Personal
  Home  Page  Tools),  nom  qui devint plus tard "Kit de Construction de
  Page d'Accueil Personnelle" (Personal Home Page Construction Kit).

  A la meme epoque, je commencais a m'amuser avec les bases  de  donnees
  et  j'ecrivis  un  outil pour inclure facilement des requetes SQL dans
  des pages web. C'etait fondamentalement un autre petit  programme  CGI
  qui   analysait   les  requetes  SQL  et  facilitait  la  creation  de
  formulaires et de tables bases sur ces requetes. Cet outil fut  appele
  FI "Interpreteur de Formulaire" (Form Interpreter).

  La  version  2.0  PHP/FI  est  une  reecriture  complete  de  ces deux
  paquetages combines pour former un simple programme. il  a  maintenant
  evolue  au point de devenir un simple langage de programmation integre
  dans les fichiers HTML.  L'acronyme original, PHP, lui est  reste.  Il
  n'est  plus reellement approprie.  PHP/FI est aujourd'hui plus utilise
  pour mettre en place des sites web entiers que pour de  petites  pages
  d'accueil personnelles. Quel que soit son nom, il elimine le besoin de
  recourir a de  nombreux  petits  programmes  cgi  Perl  en  permettant
  d'inserer de simples scripts directement dans vos fichiers HTML.  Ceci
  ameliore les  performances  globales  de  vos  pages  web  puisque  la
  surcharge  due  au  lancement  de  processus  Perl  successifs  a  ete
  eliminee. La gestion de larges sites web a egalement ete facilitee  en
  placant  tous  les  composants  d'une  page  web  dans un fichier html
  unique. En incluant le support de differentes  bases  de  donnees,  il
  devient  trivial  de  developper  des  pages web mettant en oeuvre des
  bases  de  donnees.  Nombreux  sont  ceux  qui  trouvent   que   cette
  integration  est  plus  facile  a  gerer  que  d'essayer  de creer des
  fichiers HTML et CGI separes.

  Tout au long de cette documentation, toute  reference  a  PHP,  FI  ou
  PHP/FI  traite  de  la  meme  chose. La difference entre PHP et FI est
  seulement conceptuelle. Les deux sont construits a partir de  la  meme
  distribution  du  code  source. Lorsque je construit le paquetage sans
  aucun support de connexion d'acces ou de restriction d'acces, je nomme
  mon  binaire FI.  Quand je le construit avec ces options, je l'appelle
  PHP.

  2233..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 premiere chose que vous allez noter, si  vous  faites  tourner  une
  page par l'intermediaire de PHP/FI, c'est qu'il ajoute un pied de page
  vous informant du nombre d'acces a votre  page  (si  vous  incluez  le
  support des connexions d'acces dans votre binaire). C'est seulement un
  tout petit exemple de ce que PHP/FI peut  faire  pour  vous.  Il  joue
  egalement  le  role  tres  important d'interpreteur de formulaire cgi,
  d'ou la partie FI de son nom. Par exemple si vous creez un  formulaire
  dans  l'une  de  vos pages web, vous avez besoin de quelque chose pour
  traiter l'information  contenue  dans  ce  formulaire.  Meme  si  vous
  desirez  simplement  passer  l'information  a 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 donnees du formulaire
  pour en faire quelque chose.

  2233..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 \*(dR name, vous avez \*(dR age ans!<p>" >

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

  L'etape suivante, apres avoir vu comment utiliser ces  variables,  est
  de  commencer  a jouer avec quelques balises de gestion du deroulement
  logique de vos pages. Par exemple, si vous voulez afficher  differents
  messages  dependants  de  des  informations entrees par l'utilisateur,
  vous pouvez utiliser la logique si/alors (if/else). Dans notre exemple
  ci-dessus,  on  peut  afficher  differentes  choses dependant de l'age
  entre par l'utilisateur en modifiant notre fichier display.html en :

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

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

  Vous  pouvez  egalement utiliser PHP/FI pour configurer qui a le droit
  d'acceder a vos pages. Ceci  est  effectue  en  utilisant  l'ecran  de
  configuration  inclus.   Par  son  intermediaire  ,  vous pourrez, par
  exemple, specifier que seulement les gens  appartenant  a  un  certain
  domaine seront autorises a voir vos pages, vous pouvez egalement creer
  une regle protegeant certaines pages par un  mot  de  passe.  Voir  la
  section Controle d'Acces pour plus de details.

  PHP/FI est egalement capable de recevoir des fichiers tele-charges par
  n'importe  quel  butineur  conforme  a  la   norme   RFC-1867.   Cette
  fonctionnalite  permet aux gens de tele-charger egalement des fichiers
  de texte ou binaire.  Avec le controle  de  PHP/FI  et  les  fonctions
  logiques,  vous  disposez  d'un  controle total sur qui est autorise a
  tele-charger un fichier et sur ce que l'on peut faire  de  ce  fichier
  une  fois tele-charge. Voir la section Tele-chargement de fichier pour
  de plus amples details.

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

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

  2233..66..  RReeddiirreeccttiioonn CCGGII

  2233..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 maniere de faire tourner PHP/FI est d'utiliser un module  de
  redirection cgi avec le serveur Apache. Veuillez noter que vous n'avez
  pas a 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 developpe par Dave Andersen

  +o  angio@aros.net

     et est disponible a

  +o  ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c

     et l'autre est inclus avec Apache et est appele mod_actions.c.  Ces
     deux  modules  sont  extremement  similaires.  Ils  different  tres
     legerement dans leur  utilisation.  Les  deux  ont  ete  testes  et
     fonctionnent avec PHP/FI.

  Mise en garde importante: a la date de cette redaction (Apr.20/96), la
  version actuelle officielle  (1.0.5)  a  de  severes  limitations  qui
  empechent  les  requetes  de redirection cgi d'avoir des donnees post-
  method associees. J'ai etudie ce problemes  et  l'ai  resolu  dans  ma
  version  d'Apache.  Il  y  a  une rustine officielle dans les Fichiers
  Archives de la Page d'Accueil.

  Une autre mise en garde particulierement importante au sujet  d'Apache
  1.0.x  est  qu'il  n'aligne  pas correctement les types doubles sur la
  plupart des architectures. Vous decouvrirez d'etranges erreurs de  bus
  provenant  de  votre  httpd en utilisant mod_php. Comme solution, soit
  vous passez a la version Apache  1.1,  soit  vous  editez  le  fichier
  source  Apache  alloc.c.  Dans ce fichier vous trouverez le morceau de
  code suivant :

         union align
         {
           /* Types which are likely to have the longest RELEVANT alignment
            * restrictions... we don't do much with doubles.
            */

           char *cp;
           void (*f)();
           long l;
           FILE *fp;
         };

  Il vous faudra ajouter un type double a ce source et recompiler  votre
  serveur Apache. Le morceau de code correct est :

              union align
              {
                /* Types which are likely to have the longest RELEVANT alignment
                 * restrictions... we don't do much with doubles.
                 */

                char *cp;
                void (*f)();
                long l;
                FILE *fp;
                double d;
              };

  Regardez  dans la documentation Apache la maniere d'ajouter un module.
  En general vous ajoutez le nom de module dans un fichier  appele  Con-
  figuration.  La  ligne  a  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 creer 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  a  ajouter
  doit etre quelque chose comme :

            application/x-httpd-php phtml

  Si  vous vous appretez a 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  appretez  a  utiliser  mod_cgi_redirect.c  vous  devrez
  ajouter cette ligne a srm.conf :

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

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

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

  2233..66..22..  HHTTTTPPDD NNeettssccaappee

  Vous pouvez rediriger automatiquement les requetes pour  des  fichiers
  ayant  une extension donnee de facon a 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.

  2233..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.

  2233..77..  LLaanncceerr PPHHPP//FFII aa 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 a partir de  la  ligne  de  commande,  en  tapant:  php.cgi
  nom_de_fichier  ou  nom_de_fichier  est  le  fichier  que  vous voulez
  filtrer. Vous pouvez egalement creer des scripts PHP/FI  autonomes  en
  faisant  ressembler  la premiere ligne de votre script a quelque chose
  comme :

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

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

  2244..  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,  interprete et oriente objet. Il
  supporte le chargement dynamique d'objets, de classes, de  modules  et
  d'exceptions.   L'ajout  d'interfaces  a  de  nouvelles  bibliotheques
  systeme, a l'aide de code C est aise, rendant Python facile a utiliser
  en  cas  de  personnnalisation.Python est un langage de script de tres
  haut niveau  possedant  une  interface  X.  Le  paquetage  Python  est
  distribue dans les cdroms Linux, et il comprend la plupart des modules
  Python standards, ainsi que des modules d'interfacage a l'ensemble  de
  widgets Tix pour Tk.

  PyGres95 est une interface pour PostgreSQL. Il est disponible a

  +o  <ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.README >

  Le paquetage est disponible a :

  +o  <ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0b.tar.gz
     >

  On trouvera ci-dessous un eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee PPyyGGrreess9955 :-

  PyGres - v1.0b : module PostgresSQL pour Python

  PyGres95,  version  1.0b  Une interface Python pour la base de donnees
  PostgresSQL.  Ecrit par Pascal Andre,

  +o  andre@chimay.via.ecp.fr

     Python est un langage de programmation interprete. Il  est  oriente
     objet   et   facile   d'utilisation   (syntaxe  legere,  simple  et
     instructions simples), et dispose  de  nombreuses  extensions  pour
     construire  des  GUIs,  des  interfaces  WWW,...  Un  butineur  web
     "intelligent"  (a  la  HotJava)  est  actuellement  en   cours   de
     developpement (november 1995), et cela devrait ouvrir de nombreuses
     portes aux programmeurs. Python est protege  par  un  copyright  de
     Stichting   Mathematisch   Centrum,  Amsterdam,  Pays-Bas,  et  est
     diffusable librement.

  PyGres95 est un  module  python  d'interface  a  la  base  de  donnees
  PostgresSQL.   Il  comprend  une  bibliotheque de requetes PostgresSQL
  permettant une utilisation facile des  fonctionnalites  puissantes  de
  PostgresSQL  en cooperation avec tous les autres modules python.  Il a
  ete developpe sur un systeme Linux 1.3/ELF, mais a ete teste  sur  une
  plate-forme  Solaris 2.4. De toutes facons, il devrait fonctionner sur
  toute plate-forme ou  python et postgres95 sont disponibles.

  2244..11..  OOuu llee ttrroouuvveerr PPyyGGrreess ??

  Les sites principaux des differents paquetages sont :

  +o  Python :      <ftp.python.org:/pub/python>

  +o  Postgres95 :  <ftp.s2k-ftp.cs.berkeley.edu:/pub/postgres95>

  +o  PyGres95 :    <ftp.via.ecp.fr:/pub/python/contrib>

  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  repertoires  contrib
  des sites Python et PostgresSQL.
  2244..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:

  +o  Python :      <http://www.python.org/>

  +o  Postgres95                                                        :
     <http://epoch.cs.berkeley.edu:8000/postgres95/index.html>

  +o  PyGres95 :    <http://www.via.ecp.fr/via/products/pygres.html>

  Pour un support :

  +o  Python :     newsgroup comp.lang.python

  +o  PostgresSQL   :   mailing   list  (see  package  documentation  for
     information)

  +o  PyGres95  :    contact  me  andre@via.ecp.fr  pour   des   rapports
     d'erreurs, des idees et des remarques

  2255..  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  donnees
  PostgresSQL.  C'est a :

  +o  <http://www.eol.ists.ca/~dunlop/wdb-p95/>

  Voici un eexxttrraaiitt ddee llaa ppaaggee dd''aaccccuueeiill ddee WWDDBB--PP9955 :-

  Version 1.4b2 beta - Creee par J. Douglas Dunlop

  A propos de wdb-p95

  C'est une version modifiee de wdb-1.3a2 qui fournit une passerelle WWW
  a  PostgresSQL.  Cette version necessite egalement un Butineur capable
  de prendre en compte les Tables HTML pour avoir  une  sortie  tabulee.
  Ceci  n'est  pas  requis pour le  wdb original et on peut facilement y
  revenir.  (Je voulais seulement les tables parce que  je  n'etais  pas
  d'accord avec les commandes < et >!)

  Vous  pouvez  essayer ma Bande CASI et ma Requete d'Image. Vous pouvez
  jeter un coup d'oeil au Fichier de Definition de Formulaire (FDF)  que
  j'ai utilise pour creer la Bande CASI et egalement la Requete d'Image,
  qui comprends une jointure (JOIN) de 2 tables.

  Cette version contient tous les fichiers necessaires pour installer et
  faire  tourner  WDB-P95  en  tant  qu'interface a vos bases de donnees
  PostgresSQL. Le portage de ce systeme pour une autre base  de  donnees
  devrait etre relativement facile - a condition qu'elle supporte le SQL
  standard et possede une interface Perl.

  2255..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reessiiddeerr
  ssuurr llee mmeemmee hhoottee??

  Non - Le serveur PostgresSQL n'a pas a etre sur le  meme  hote.  Comme
  WDB-P95  est appele par le demon http, ils doivent resider sur le meme
  hote. - Et comme WDB-P95 a ete ecrit pour utiliser Pg.pm - pgperl doit
  etre  sur  le  meme hote egalement. Pgperl a ete ecrit en utilisant la
  bibliotheque libpq, donc, il sera capable d'acceder a  n'importe  quel
  serveur  Postgres95  n'importe ou sur le reseau, juste comme n'importe
  quel autre client PostgresSQL. Comme illustre ci-dessous

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

  Les parentheses () representent les machines.

  Chaque  machine  peut etre d'un type different : NT, SUN, HP, ... mais
  il faut que vous ayez la bibliotheque d'interface libpq pour  le  type
  de  machine  sur  lequel  vous envisagez d'utiliser WDB-P95, puisqu'il
  vous faut compiler pgperl.  (Le systeme a ete concu pour utiliser  les
  tables HTML donc un client WWW recent est meilleur)

  2255..22..  NNoouuvveellllee VVeerrssiioonn

  Les  nouvelles  versions  du  logiciel  et  des  pages  ci-dessus sont
  toujours disponibles a partir de la page d'Accueil de WDB-P95.

  +o  <http://www.eol.ists.ca/~dunlop/wdb-p95/>

  Pour  les  questions  et  pour  s'inscrire  aux  listes  de  diffusion
  contacter

  +o  dunlop@eol.ists.ca

  2266..  IInntteerrffaaccee aauu llaannggaaggee ""CC"" ppoouurr PPoossttggrreeSSQQLL

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

  2277..  IInntteerrffaaccee aauu llaannggaaggee ""CC++++"" ppoouurr PPoossttggrreeSSQQLL

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

  2288..  EESSQQLL//CC ppoouurr PPoossttggrreeSSQQLL

  C'est  un pre-compilateur C integre pour PostgreSQL ESQL/C comme Pro*C
  d'Oracle, et ESQL/C d'Informix :

  +o  <ftp://ftp.lysator.liu.se/pub/linus>

  +o  Email : linus@epact.se

  ESQL/C pour PostgreSQLest une interface de programmation d'application
  SQL  (API)  qui  permet  au  programmeur  C  de creer des applications
  personnalisees avec des possibilites de gestion de  base  de  donnees.
  ESQL/C  pour PostgreSQL vous permet d'utiliser un langage de troisieme
  generation avec lequel vous etes familiarise  tout  en  profitant  des
  avantages d'un Langage de Requetes Structure (SQL).

  ESQL/C est compose des elements logiciels suivants:

  +o  Les  bibliotheques  ESQL/C  de fonctions C fournissent les acces au
     serveur de base de donnees.

  +o  Les  fichiers  d'en-tete  ESQL/C  apportent  les  definitions   des
     structures  de donnees, les constantes et les macros utiles dans un
     programme ESQL/C.

  +o  Le pre-processeur ESQL/C, qui est un pre-processeur de code source,
     transforme  un  fichier C contenant des instructions SQL en fichier
     executable.

  2299..  OOppeerraatteeuurrss BBiitt--ppaarr--BBiitt ppoouurr PPoossttggrreeSSQQLL

  Les operateurs Bit-par-Bit ont ete ecrits par Nicolas Moldavsky

  +o  nico@overnet.com.ar

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

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

  De plus, il y a un "Makefile" qui marche bien sous Linux.

  3300..  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 tres utiles pour les Japonais.  On les trouvera au site suivant :

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

  3311..  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 realisation.  Ce
  portage de fait en utilisant  gcc, gmake pour Win NT/95. Le  programme
  gnu-win32  est  utilise  pour compiler le code source sous win32.  GNU
  gcc est disponible pour win32. Consultez ce site -

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

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

  Le   portage   peut  egalement  etre  realise  en  utilisant   l'outil
  "Emulateur Unix sous NT" (Unix-Emulator on NT) suivant de

  +o  <http://www.softway.com>

  3322..  LLiisstteess ddee DDiiffffuussiioonn eett GGrroouuppeess ddee DDiissccuussssiioonn

  3322..11..  NNeewwssggrroouuppss

  Il y a un groupe de discussion pour PostgreSQL  a  news.postgresql.org
  Veuillez suivre les etapes suivantes pour vous inscrire

       1. Choisir : Fenetre | Netscape News
       2. Choisir : Fichier | Open News Host
       3. Taper news.postgresql.org dans la boite de dialogue.
       4. Le nom du groupe de discussion est comp.databases.postgresql.questions.
       Pour l'ajouter, cliquez avec le bouton de droite sur news.postgresql.org, et
       choisir : Add Newsgroup.
       Taper alors le nom du groupe de discussion dans la boite de dialogue. Le
       groupe de discussion sera ajoute a la liste dans l'ecran de gauche.
       5. Les noms des Groupes de Discussion seront listes dans l'ecran de gauche.
       Tous les messages, dans les groupes selectionnes, seront affiches dans
       l'ecran de droite.

  3322..22..  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

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

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

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

     Inscrivez  vous a la liste de diffusion PostgreSQL et Yahoo dispose
     de la  fonctionnalite  complementaire  de  creation  d'un  classeur
     separe  pour  les courriers electroniques PostgreSQL e-mails, ainsi
     votre e-mail habituel ne sera  pas  pollue.  Selectionnez  le  menu
     Email-  >  Options-  > Filters et prenez un classeur separe pour e-
     mail.  Avec ce compte e-mail vous pouvez  acceder  au  courrier  de
     n'importe  ou dans le monde a partir du moment ou vous avez acces a
     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 separe.  De  cette  facon,  les  choses  seront  mieux
  organisees et vous eviterez de voir votre courrier pollue.

  3322..33..  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
  a :

  +o  <http://www.postgresql.org/>

  +o  Envoyez  vos  questions  par  courrier   electronique   a:   pgsql-
     questions@postgresql.org

  +o  Developpeurs pgsql-hackers@postgresql.org

  +o  Questions specifiques a un portage pgsql-ports@postgresql.org

  +o  Questions concernant la documentation pgsql-docs@postgresql.org

     Vous  recevrez  une  reponse,  par  courrier  electronique, dans la
     journee qui suit!!

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

  +o  pgsql-questions-request@postgresql.org

  +o  pgsql-hackers-request@postgresql.org

  +o  pgsql-ports-request@postgresql.org

  +o  pgsql-docs-request@postgresql.org

     Le corps du message doit uniquement contenir la simple ligne

  subscribe

  (ou)

  unsubscribe

  3322..44..  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 archivees au format html
  a l'endroit suivant -

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

  +o  <ftp://ftp.postgresql.org> dans le repertoire /pub/majordomo

  3322..55..  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  egalement  la  section  'Compte  gratuit   pour
  Organiser  vos  e-mails PostgreSQL e-mails' ci-dessus. Pour souscrire,
  l'utilisateur doit envoyer un message a :

  +o  majordomo@tlali.iztacala.unam.mx

     Le corps du message doit contenir la simple ligne :

  inscripcion pgsql-ayuda

  3333..  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

  3333..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  et  pages  de
  manuel  unix  les documents suivants. Si vous avez acces a l'internet,
  vous   pouvez   trouver   les   documents   indiques   ci-dessous    a
  <http://www.postgresql.org/docs>

  +o  Le 'Guide Utilisateur' pour PostgreSQL,

  +o  Le  'Guide  de  Realisation'  detaillant la constitution interne de
     PostgreSQL.

  +o  Les manuels "en ligne".

  +o  Le manuels en ligne au format HTML.

  +o  Egalement les manuels au format Postscript pour faire des  editions
     papier.

  3333..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

  +o  Liste  et  description  des  types de donnees et des operateurs par
     defaut

       Cela fera partie des commandes PSQL dans la prochaine version 6.3.  Maintenant
       effectue.

  +o  Liste des mots-cles SQL supportes

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

  +o  Liste des instructions supportees -

       Utilisez la commande psql \h

  +o  Concepts  de  base  des  bases  de  donnees   relationnelles   sous
     PostgreSQL  (en  implementation)  et des tonnes d'exemples en ligne
     (requetes) -

       Consultez les tests de regression dans src/test. La, vous y trouver les
       repertoires regress/sql et suite/*.sql.

  +o  Didacticiel pour PostgreSQL.

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

  Voir egalement "Didacticiel SQL pour les debutants" dans l'appendice B
  de ce document ``''

  3333..33..  DDooccuummeennttss ddee RReeffeerreennccee:: OOuuvvrraaggeess ddee rreeffeerreennccee uuttiilleess ::

  +o  "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.

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

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

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

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

  +o  SQL Instant Reference, (Reference Immediate SQL) 1993

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

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

       Ce livre est la Bible des Systemes de Gestion de Bases de Donnees.
       Le livre detaille la normalisation, SQL, la recuperation, la concurrence,
       la securite, l'integrite, les extensions au modele relationnel original,
       des sujets actuels tels que  les systemes client/serveur et le(s) modele(s)
       Oriente(s) Objet. De nombreuses references sont donnees pour des lectures
       complementaires. Recommande pour la plupart des utilisateurs.

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

       Ce livre detaille la theorie des bases de donnees relationnelles, l'algebre
       relationnelle, le calcul et la normalisation. Mais il ne couvre pas les sujets
       du mode reel et les exemples sont un peu simplistes. Recommande pour la plupart
       des utilisateurs.

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

       Recommande pour la plupart des utilisateurs.

  +o  Michael  Stonebraker,  "Readings in Database Systems" (lectures sur
     les Systemes de Bases de  Donnees),  Morgan  Kaufmann,  1988,  ISBN
     0-934613-65-6

       Ce livre est un recueil de papiers, sur les bases de donnees, qui ont ete
       publies sur plusieurs annees. Il n'est pas pour l'utilisateur occasionnel
       mais, c'est reellement une reference pour les etudiants en classes superieures
       (troisieme cycle) ou pour les developpeurs de systemes de bases de donnees.

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

       Ce livre est un recueil de papiers, sur les bases de donnees, qui ont ete
       publies sur plusieurs annees. Il n'est pas pour l'utilisateur occasionnel
       mais c'est reellement une reference pour les etudiants en classes
       superieures (troisieme cycle) ou pour les developpeurs de systemes de
       bases de donnees.

  +o  Nick   Ryan   and   Dan   Smith,  "Database  Systems  Engineering",
     (Ingenierie de Systemes de Bases de Donnees), International Thomson
     Computer Press, 1995, ISBN 1-85032-115-9

       Ce livre traite des details des methodes d'acces, et des technique de stockage.

  +o  Bipin  C.  Desai,  "An  introduction  to  Database  Systems",  (Une
     introduction aux systemes de bases de donnees) West Publishing Co.,
     1990, ISBN 0-314-66771-7

       Il n'est pas pour l'utilisateur occasionnel mais c'est reellement une
       reference pour les etudiants en classes superieures (troisieme cycle)
       ou pour les developpeurs de systemes de bases de donnees.

  +o  Joe Celko "INSTANT SQL Programming" (Programmation SQL IMMEDIATE)

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

  +o  Michael  Gorman  "Database  Management  Systems:  Understanding and
     Applying Database" (Systemes de  Gestion  de  Bases  de  Donnees  :
     comprendre et appliquer les bases de donnees)

       Technology
       QED and John Wiley
       1991

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

  Presente les exigences de construction d'applications de base de donnees
  client/server par l'intermediaire de meta-modeles d'entrepot et l'utilisation
  de la norme SQL ANSI 1993

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

  3333..44..  DDooccuummeennttss ddee SSppeec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 Specifications ANSI/ISO SQL sont situes a l'endroit
  indique ci-dessous.

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

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

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

  +o  Specifications                     ANSI/ISO                     SQL
     <http://www.contrib.andrew.cmu.edu/~shadow/sql.html> Vous trouverez
     la Reference SQL ici.

  3333..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 ``''

  3333..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 specifications de SQL  1998  (SQL  3)  sont  encore  en  cours  de
  developpement.   Voir  le  paragraphe  'Electronic  Access to the SQL3
  Working Draft' de ce document document a ``''

  3333..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deebbuuttaannttss

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

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

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

  +o  Specification                    SQL-3                   Temporelle
     <ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/>

  Ce  repertoire  contient  les  specifications   pour   une   extension
  temporelle  au  langage SQL-92 standard. Ce nouveau langage est appele
  TSQL2.

  Les specifications  du  langage  presentees  ici  correspondent  a  la
  version finale du langage.

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

  +o  rts@cs.arizona.edu

     Les  affiliations  et  les  adresses  electroniques  des membres du
     Comite de Conception du langage TSQL2 peuvent etre  trouvees,  dans
     un chapitre separe, a la fin des specifications du langage.

  Le contenu du repertoire est le suivant :

  spec.dvi,.ps     Specifications du langage TSQL2, publie en Septembre,
  1994

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

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

  Un  ensemble  de commentaires, associes aux specifications du langage,
  parle des decisions de conception, fournit des exemples, et traite  de
  la  facon dont le langage peut etre implante. Ces commentaires sont, a
  l'origine, des propositions faites au Comite de Conception du  Langage
  TSQL2. Ils poursuivent actuellement un objectif different: fournir des
  exemples de syntaxe, expliquer les nombreuses decisions prises  durant
  la  conception  du  langage,  et  comparer TSQL2 aux nombreuses autres
  propositions de langage faites au cours des quinze  dernieres  annees.
  Il  faut  insister sur le fait que ces commentaires ne font pas partie
  integrante des specifications  du  langage  TSQL2  en  lui-meme,  mais
  plutot  qu'elles  le completent et constituent un apport. Le mot de la
  fin est donne par les specifications de TSQL2 proprement dit.

  Les commentaires, ainsi que les specifications du  langage,  plusieurs
  index, et d'autres elements de support ont ete publies dans un livre :

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

  Les commentaires d'evaluation sont donnes sous forme abregee  dans  le
  livre;  La  totalite  des  commentaires  est  fournie  dans le fichier
  eval.ps situe dans ce repertoire

  Le fichier tl2tsql2.pl est un programme prolog qui traduit la  logique
  temporelle  autorisee  en  TSQL2. Ce programme a ete ecrit par Michael
  Boehlen

  +o  boehlen@iesd.auc.dk

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

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

     (the TimeDB and Tiger systems).

  3333..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 acquerir (legalement) une  copie  de
  la  norme SQL-92 et comment acquerir une copie du Brouillon de Travail
  du SQL3 "actuel".

  La norme ANSI est protegee 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  excepte
  pour  quelques  sujets  triviaux tel que le titre du document, les en-
  tete 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
  a 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'etait  pas  disponible  en  stock au moment de la redaction, mais il
  devrait l'etre entre fin Mars et debut Mai, 1993). Il  devrait  couter
  US$ 225.00.

  Si  vous  achetez  l'un  ou  l'autre  document  a l'ANSI, il y aura un
  supplement de 7% pour le traitement (soit environ US$ 9.10). Les frais
  d'envoi  a  l'etranger  accroitront sans doute le cout. ANSI exige des
  societes un document de commande  ecrit  pour  chaque  commande;  d'un
  autre  cote,  vous  pouvez envoyer un cheque tire sur une banque US en
  dollars US, qu'ils encaisseront avant d'expedier votre commande. (Il y
  a  une  exception  : si votre organisation est membre de l'ANSI, alors
  l'ANSI enverra les documents et une facture a votre compagnie.)

  La norme ISO est aussi disponible en dehors des Etats-Unis a partir de
  representations  nationales  locales  (entites  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  representations  nationales,
  avec  leurs  adresses,  sont disponibles de l'ANSI ou d'autres entites
  nationales.  Ils sont aussi disponibles a l'ISO :

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

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

            Global Engineering Documents
            2805 McGaw Ave
            Irvine, CA 92714 (USA)
            USA
            Telephone (accessible de partout): +1.714.261.1455
            Telephone (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
  supplement.   Ils  peuvent vous envoyer un document tres rapidement et
  acceptent meme les "plus grandes cartes de  credit".  Global  n'a  pas
  encore  la  version ANSI pas plus qu'un prix ou qu'une date previsible
  de disponibilite (bien que je l'attende  dans  les  quelques  semaines
  suivant  la  publication par l' ANSI et a 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
  secretariat  de  l'ANSI  X3,  CBEMA  (Computer  and Business Equipment
  Manufacturers  Association).  Leur  objectif  est  d'avoir  la   "plus
  recente"  version  du  document de travail de SQL3 disponible et de la
  vendre pour environ US$ 60.00 a  US$  65.00.   Vous  pouvez  contacter
  CBEMA a:

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

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

  Acces Electronique au Document de Travail SQL3

  La  plus  recente  version  (a  la  date  de redaction) du document de
  travail SQL3 (a 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  repertoire  ,  il  y  a  de  nombreux fichiers.  Ce sont des
  fichiers PostScript et "texte ordinaire" (pas tres bien formates, mais
  lisibles sur un ecran sans logiciel specifique).

  En general, 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
  repertoire par FTP, nous avons ajoute un fichier ayant pour nom :

            ls

  dans le meme repertoire.  Ce fichier (surprise!) contient une liste du
  repertoire.

  Recuperer les Fichiers Directement par Ftp

  Voici un exemple sur  la  facon  d'utiliser  FTP.  Specifiquement,  il
  montre  comment se connecter a gatekeeper.dec.com, aller au repertoire
  ou le document de base est garde et a transferer ce document sur votre
  machine.  Notez  que  votre  machine doit pouvoir acceder a 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 utilisee pour s'assurer qu'aucuns bits  ne
  seront  supprimes  du  (des)  fichier(s)  recu(s).  La  commande 'get'
  recupere un fichier a la fois.  Les commentaires dans  le  script  ci-
  dessous sont places 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 egalement>
         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 repertoire sous le nom x3h2-93-082.txt>

  Recuperation de Fichiers Sans Faire un ftp Direct

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

  ftpmail@decwrl.dec.com

  Le  script  suivant  recuperera  la  derniere  version  PostScript  du
  document SQL3 :

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

  Le script suivant recuperera la derniere 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  premiere ligne du script commande au serveur de vous retourner les
  fichiers demandes; vous  devrez  remplacer  "joe.programmer@imaginary-
  corp.com" par votre adresse Internet.  Le fichier x3h2-93-091.ps, dans
  cet exemple, est retourne sous forme de 34  messages  e-mail  separes,
  "compresses" et "uuencodes". Si votre environnement ne dispose pas des
  outils pour reconstruire de tels fichiers, alors, il vous faudra recu-
  perer  le fichier sous forme de texte pur en utilisant le script suiv-
  ant:

            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 envoye en  plus
  de 70 morceaux!

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

  3333..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 a propos  du  processus
  de normalisation de SQL et de son etat actuel.

  Etat Actuel

  Le developpement pour ameliorer SQL afin d'en faire un langage complet
  pour la definition et la gestion d'objets  persistants  et  complexes.
  Ceci   comprend   :   les   hierarchies   de   generalisation   et  de
  specialisation, l'heritage multiple, les types de donnees definies par
  l'utilisateur,  les  declencheurs  et  les  assertions, le support des
  systemes a base de connaissances,  les  requetes  recursives,  et  des
  outils   complementaires  d'administration  de  donnees.  Cela  inclue
  egalement la specification des types de donnees abstraits (ADTs),  des
  identificateurs    d'objets,   des   methodes,   de   l'heritage,   du
  polymorphisme,  de  l'encapsulation  et  de  tous  les  autres  moyens
  normalement associes a la gestion d'objets.

  A l'automne 1996, plusieurs parties de SQL3 ont ete soumises a un vote
  de l'ISO CD. Ce sont SQL/Framework,  SQL/Foundation  et  SQL/Bindings.
  Ce  vote  echoua  (comme  prevu)  avec  environ  900 commentaires. Fin
  Janvier, un comite de redaction traita un grand  nombre  de  solutions
  aux  problemes  qui furent soit incluses avec les commentaires du vote
  ou soumises en  tant  que  documents  separes.  Depuis  le  comite  de
  redaction  DBL  n'a pas pu traiter tous les commentaires et sa duree a
  ete augmentee. La fin du comite de redaction est prevue  pour  la  fin
  Juillet 1997, a Londres.

  A  la  suite  du  comite de redaction de Juillet, on attend qu'un vote
  final du CD soit demande pour ces parties de SQL. Le processus  du  CD
  Final  prendra  environ 6 mois et un comite de redaction du DBL, apres
  lesquels il y aura un vote IS et un tres rapide vote IS.

  Les procedures ISO ont  change  depuis  SQL/92,  et  les  comites  SQL
  travaillent encore selon les regles du processus.

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

  En 1993, les comites de  developpement  ANSI  et  ISO  ont  decide  de
  d'eclater  le  developpement  futur de SQL en une norme multi-parties.
  Ces parties sont :

  +o  Partie 1: Structure Description non technique de la maniere dont le
     document doit etre structure.

  +o  Partie   2:  Base  Specifications  de  base,  incluant  toutes  les
     nouvelles fonctionnalites ADT.

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

  +o  Partie 4: SQL/PSM Specifications des procedures enregistrees

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

  +o  Partie 6: SQL/XA Une specialisation  de  l'interface  populaire  XA
     developpee par X/Open

  +o  Partie  7:SQL/Temporal  Ajoute  les  capacites  liees au temps a la
     norme SQL.

  Aux  USA, la totalite de SQL3 est en cours de  traitement  a  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  a  SQL-92.  Aux  USA,  ils sont traites
  uniquement comme projet International. SQL/CLI a ete termine en  1995.
  SQL/PSM devrait etre termine fin 1996.

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

  +o  SQL/MM Un effort  en  cours  pour  definir  une  norme  multi-media
     utilisant les possibilites de SQL3 ADT.

  +o  Acces aux donnees a distance (RDA)

  Comites et Processus de Standardisation

  Il  y  a  effectivement de nombreux comites 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 comites qui se
  consacrent a SQL. Ces pays (habituellement) envoient des representants
  aux  reunions  ISO/IEC  JTC1/SC  21/WG3  DBL. Les pays qui participent
  activement au processus de normalisation ISO SQL sont :

  +o  Australie

  +o  Bresil

  +o  Canada

  +o  France

  +o  Allemagne

  +o  Japon

  +o  Koree

  +o  Pays-Bas

  +o  Angleterre

  +o  Etats-Unis

  Validation NIST

  Les implementations SQL sont validees (aux Etats-Unis) par le National
  Institute  of  Standards and Testing (NIST). Le NIST possede une suite
  de tests de validation pour le niveau  de  base  SQL-92.  Les  details
  exacts  des  exigences  de  la  validation  NIST sont definis comme un
  Federal  Information  Processing  Standard   (FIPS).   Les   exigences
  actuelles  pour  SQL  sont  definies  dans le document FIPS 127-2. Les
  versions Postscript et Texte de ce document peuvent etre  obtenues  au
  NIST. La Liste des Produits Valides a jour peut egalement etre obtenue
  au NIST.

  Publications et Articles sur le Standard SQL

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

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

  +o  ANSI X3.135-1992, "Database Language SQL"

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

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

  En supplement a 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 etre disponible a l'ANSI. Il n'y a qu'une version
  du TC 1 -- qui s'applique a la  fois  aux  versions  ISO  et  ANSI  de
  SQL-92.

  En  supplement  a  ces  normes, plusieurs livres ont ete ecrits sur la
  norme SQL 1992. Ces livrent donnent une description bien plus  lisible
  de la norme que celle donnee par le norme elle-meme.

  Standards connexes

  Un  certain  nombre  d'autres  normes  presentent de l'interet pour la
  communaute SQL. Cette  section  contient  des  pointeurs  donnant  des
  informations  sur  ces  efforts.  Ces pointeurs seront plus nombreux a
  mesure que des informations complementaires seront disponibles sur  le
  web.

  +o  SQL Environnements (FIPS 193) - (Environnements SQL)

  +o  Next  Generation Repository Systems (X3H4) - (Systemes Depositaires
     de la Prochaine Generation) Une version des  Nouvelles  appelant  a
     une participation au "Developpement des Standards pour les Systemes
     Depositaires de la Prochaine Generation."

  3333..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 reside dans le document de
  base SQL :

  +o  Capacites de Base SQL/PSM (venant de SQL/PSM-92)

  +o  Nouveaux types de donnees

  +o  Declencheurs

  +o  Sous-tables

  +o  Types de Donnees Abstraits (ADT)

  +o  Capacites Orientees Objets

  Il y a plusieurs pre-requis pour les capacites orientees objets :

  +o  Capacite de pouvoir definir des operations complexes

  +o  Stockage des operations complexes dans la base de donnees

  +o  Appels  de  Procedures Externes  Quelques operations peuvent ne pas
     exister dans SQL ou peuvent necessiter des interactions externes

  Ces capacites sont definies comme faisant partie de SQL/PSM

  Une grande quantite de  travail  est  en  cours  de  realisation  pour
  affiner le modele objet SQL-3 et l'aligner sur le modele objet propose
  par l'ODMG. Cet effort est decrit dans les papiers X3H2 et ISO  DBL  :
  Accommoder  SQL3  et  ODMG.  Une mise a jour recente sur le Fusionneur
  SQL3/OQL est egalement disponible.

  Planification de SQL3

  Le travail sur SQL3 se poursuit normalement, mais la publication de la
  norme finale se situe encore a un horizon de plusieurs annees.

  +o  Le  vote  International  pour  passer  du  Brouillon  de Travail au
     Brouillon du Comite (CD) aura lieu a l'automne 1996.

  +o  On s'attend a ce que le vote genere de nombreux commentaires

  +o  Un second vote sera probablement necessaire

  +o  Le vote pour le Brouillon du Standard International  devrait  avoir
     lieu a la mi-1998

  +o  Le Standard International doit etre termine a la mi-1999.

     Le programme de la version ANSI sera similaire.

  3333..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
  donnees SQL.  Il est concu pour acceder aux bases de donnees a  partir
  d'applications  fermees.   CLI  a,  a l'origine, ete cree par un sous-
  comite du groupe SQL Access (SAG).  Les specifications de SAG/CLI  ont
  ete  publiees,  en  1992,  en  tant  que specifications Microsoft Open
  DataBase Connectivity (ODBC) en 1992. En 1993, le SAG a soumis le  CLI
  aux  comites  ANSI  et  ISO  SQL.  (Le  groupe  "SQL  Access  Group" a
  maintenant ete fusionne avec le consortium X/Open.)

  SQL/CLI fournit une norme internationale pour :

  +o  Un CLI dependant de l'implementation  pour  acceder  aux  bases  de
     donnees SQL

  +o  Des  outils  Client-serveur  pour  acceder facilement a une base de
     donnees au moyen de Bibliotheques de Lien Dynamique

  +o  Supporter et encourager un riche ensemble d'outils Client-serveur

  Planification de SQL/CLI

  Le processus de normalisation de SQL/CLI se  poursuit  a  une  vitesse
  aveuglante.

  +o  SQL/CLI est un addendum a la norme SQL de 1992 (SQL-92)

  +o  Acheve comme norme ISO en 1995

  +o  ISO/IEC 9075-3:1995 Information technology -- Database languages --
     SQL -- Partie 3: Call-Level Interface (SQL/CLI)

  +o  L'effort actuel  porte  sur  l'ajout  des  fonctionnalites  SQL3  a
     SQL/CLI

  3333..1133..  PPaarrttiiee 44 -- MMoodduulleess MMeemmoorriissees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 etend SQL en ajoutant :

  +o  Des extensions de langage procedural

  +o  Des procedures memorisees multi-instructions

  +o  Des appels de procedures et de fonctions externes

  SQL/PSM apporte, en plus du fait d'etre un bon outil de  developpement
  d'application,  une base pour des fonctionnalites orientees objet dans
  SQL3.

  Procedures memorisees et multi-instructions

  Multi-instructions et procedures memorisees offrent une grande variete
  d'avantages dans un environnement client/serveur :

  +o  Performance  -  Puisqu'une  procedure  memorisee  peut effectuer de
     multiples instructions SQL, les interactions sur le reseau, avec le
     client, sont reduites.

  +o  Securite  -  On peut donner a un utilisateur le droit d'appeler une
     procedure memorisee qui met a jour une  table  ou  un  ensemble  de
     tables  mais  lui  refuser  le  droit  de  mettre a jour les tables
     directement

  +o  Code partage - Le code d'une procedure memorisee  n'a  pas  a  etre
     reecrit  ni  re-teste pour chaque outil d'un client qui accede a la
     base de donnees.

  +o  Controle - Fournit un point unique de  definition  et  de  controle
     dans la logique de l'application.

  Extensions de Langage Procedural

  Le   langage   procedural   ajoute   la   puissance  d'un  langage  de
  programmation traditionnel a SQL grace a des instructions de  controle
  de flot et a d'autres constructions utilisees en programmation.

  Instructions de controle de flot

  +o  If-then-else  (si-alors-sinon)

  +o  Instructions de boucle

  +o  Prise en compte de erreurs

  +o  Instruction de choix multiple (Case)

  +o  Blocks (Begin-End blocks)

  Les    extensions   de   langage   procedural   comprennent   d'autres
  constructions des langages de programmation :

  +o  Declaration des variables

  +o  Instructions d'affectation de valeur

  +o  Lecture de diagnostiques sur les processus et l'etat

  De plus, toutes les  instructions  SQL  traditionnelles  peuvent  etre
  inclues dans de procedures multi-instructions.

  Appels de Fonctions et de Procedures externes

  Une  fonctionnalite souvent mentionnee dans la liste des souhaits pour
  de nombreuses base de donnees et produits et qui est implementee  dans
  quelques-uns, est la capacite de pouvoir augmenter les fonctionnalites
  du logiciel de  base  de  donnees  d'origine  par  des  appels  a  des
  procedures externes ecrites par les utilisateurs.

  +o  Cela permet a un site ou a une application en particulier d'ajouter
     leurs propres fonctions base de donnees

  +o  Peuvent etre utilisees tout  au  long  des  applications  bases  de
     donnees

  Le  benefice  de  cette  capacite est de donner acces, pour la base de
  donnees (et, par la, aux applications base de  donnees),  a  un  riche
  ensemble  de  procedures  et  de  fonctions  trop nombreuses pour etre
  definies par un comite de normalisation.

  Planification de SQL/PSM

  SQL/PSM evolue rapidement :

  +o  SQL/PSM est un addendum a SQL-92

  +o  Un vote international pour faire passer  SQL/PSM  de  Brouillon  de
     Norme  Internationale  a  Norme  Internationale s'est acheve en fin
     janvier 1996.

  +o  Une reunion de travail en mai 1996 n'a pas apporte  de  solution  a
     tous les commentaires

  +o  La  poursuite  de la reunion de travail du PSM est programmee du 30
     septembre au 4 octobre 1996

  +o  Le programme est serre, mais il y a  des  chances  que  le  PSM  le
     publie en 1996.

  +o  Sa   designation   officielle   sera   :  ISO/IEC  DIS  9075-4:199?
     Information technology -- Database languages -- SQL  --  Partie  4:
     SQL Persistent Stored Modules (SQL/PSM)

  +o  L'ajout  du support de SQL/PSM dans les fonctionnalites de SQL3 est
     en bonne voie.

  3333..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'acces, la description des liens avec le langage de
  programmation  a ete mise dans un document separe. La version actuelle
  consiste simplement en un extrait concernant les liens  dynamiques  et
  integres 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 donnees de SQL-92. Cependant, des
  transformations doivent etre definis  entre  les  objets  SQL  et  les
  variables des langages de programmation.

  Pour les langages orientes objets, la transformation doit etre definie
  pour les types de donnees courants SQL et entre le modele objet SQL et
  le modele objet du langage oriente objet.

  Le modele objet doit se stabiliser avant de resoudre ces problemes.

  Les liens avec le langage feront partie integrante de SQL3.

  3333..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peec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  specification  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  semantique  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 derive d'une publication de l'X/Open, avec sa permission,
  qui specifie explicitement les parametres d'entree, de  sortie  et  la
  semantique,  en  termes  de  types  de donnees 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 specifications XA de l'X/Open.
  Ce  processus  de  suivi,  au  plus  pres,  consiste  a  adopter   les
  specifications  de  l'industrie  sans changements. Le vote pour l'XA a
  l'ISO SC21, JTC 1 a debute le 27  avril  1995  et  se  termine  le  27
  octobre  1995.  Si  les  specifications XA sont approuvees par 75% des
  votants, et par 2/3 des membres participants de JTC 1, cela  deviendra
  une  Norme  Internationale.  Si  le vote est approuve, SQL/XA pourrait
  devenir une norme en 1996.

  3333..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  donnees  en  relation  avec  le  temps.
  Conceptuellement,  cela  consiste  a  dire  qu'il  est  utile  d'aller
  chercher des donnees pour decouvrir l'allure  qu'elles  avaient  a  un
  certain  moment.  L'origine  du  SQL Temporel reside dans un papier de
  decembre 1994 de Rick Snodgrass qui en decrivait les concepts.

  X3 Annonce l'Approbation d'un Nouveau Projet, ISO/IEC 9075 Partie 7  :
  SQL/Temporel est un communique de presse concernant le SQL/Temporel.

  ----------------------------------------------------------------------------
                                  SQL Temporel
                                  ************
  Rick Snodgrass (President du comite TSQL2)
  31-Dec-1994

  Plusieurs  personnes  se  sont  pose la question de la necessite de la
  prise en charge de la gestion du temps dans SQL3  (comme  cela  a  ete
  propose par DBL RIO-75, demandant qu'une nouvelle partie de SQL prenne
  en charge les bases de donnees temporelles). Le sentiment est que  les
  types  de donnees abstraits (ADT) sont suffisants pour gerer les ques-
  tions de temps. Dans ce papier, je demontre,  par  des  exemples  con-
  crets, que l'utilisation de colonnes typees, avec des types de donnees
  abstraits, est inadaptee pour des requetes  temporelles.   En  partic-
  ulier, beaucoup de requetes temporelles courantes sont soit difficiles
  a simuler en SQL, soit necessitent d'integrer SQL dans un langage pro-
  cedural.  Des  solutions  alternatives  sont  exposees dans TSQL2, une
  extension temporelle a SQL-92.

  3333..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 validite va  au-dela  de  celle  de
  types  de donnees temporels abstraits (ADT temporel). Avec ce dernier,
  on specifie qu'une colonne sera celle consacree au  domaine  temporel,
  tel  que  la DATE ou un INTERVALLE (je donnerai des exemples bientot).
  Avec un instant  de  validite,  les  lignes  d'une  table  varient  en
  fonction  du  temps,  refletant  les  modifications  de la realite. Le
  timbre dateur associe a une ligne d'une table a  instant  de  validite
  est  interprete  par  le langage d'interrogation comme l'instant ou la
  combinaison des valeurs dans les colonnes d'une  ligne  etait  valide.
  Ce  timbre  dateur implicite permet d'exprimer des requetes de maniere
  simple et intuitive.

  3333..1166..22..  EET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)  salarie  de l'universite de l'Arizona
  possede un certain nombre d'informations, dans une  base  de  donnees,
  dont le nom de chaque employe, son salaire actuel ainsi que son titre.
  On peut representer cela dans une simple table.

               Employee(Name, Salary, Title)

  Etant donne cette table, retrouver le salaire  d'un  employe  est  une
  operation aisee.

               SELECT Salary
               FROM Employee
               WHERE Name = 'Bob'

  Maintenant, le BP souhaite enregistrer les dates de naissance. Pour ce
  faire, on ajoute une colonne a la table, ce qui donne le schema  suiv-
  ant.

          Employee(Name, Salary, Title, DateofBirth DATE)

  Retrouver  la  date de naissance d'un employe est analogue a retrouver
  son salaire.

               SELECT DateofBirth
               FROM Employee
               WHERE Name = 'Bob'

  3333..1166..33..  EET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
  validite de cette information.

  Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)

  Pour le modele de donnees, ces nouvelles colonnes sont identiques a la
  date  de  naissance.  Cependant,  leur  presence  a des consequences a
  grande echelle.

  3333..1166..44..  EET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  salarie,  les  choses  sont  plus
  difficiles.

               SELECT Salary
               FROM Employee
               WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop

  Cette  requete  est  plus compliquee que la precedente. Le coupable se
  situe, de toute evidence, dans ces deux nouvelles colonnes. Le BP veut
  fournir  a  chaque  employe  l'historique de leur salaire. Pour chaque
  personne, specifiquement, il est necessaire de determiner  les  inter-
  valles  correspondants  a  chacun  des salaires. Malheureusement, cela
  n'est pas possible en SQL. Un employe 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 a $ 70,000. De la, le resultat 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 a l'utilisateur une edition des informa-
  tions Salaire et Titre, et de laisser l'utilisateur  determiner  quand
  son  salaire  a  change.  Cette alternative n'est ni tres attirante ni
  tres realiste. Une seconde alternative est d'utiliser SQL  autant  que
  possible.

       CREATE TABLE Temp(Salary, Start, Stop)
       AS      SELECT Salary, Start, Stop
               FROM Employee;

  repeter

               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'a ce qu'aucune ligne ne soit mise a 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 etre fusionnes. La boucle est  executee  log  N  fois
  dans  le pire des cas, ou N est le nombre de lignes dans une chaine de
  lignes de valeur equivalente qui se chevauchent ou sont adjacentes. Le
  lecteur  peut  simuler cette requete sur la table de l'exemple pour se
  convaincre de sa verite.

  Une troisieme alternative consiste  a  utiliser  SQL  uniquement  pour
  ouvrir  un  curseur  sur  la  table. Une liste chainee de periodes est
  entretenue, chacune avec  un  salaire.  La  liste  chainee  doit  etre
  initialisee 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-donnees est retourne alors aller a fin;
          trouver la position dans la liste chainee pour inserer cette information;
          aller a boucle;
  fin:
  CLOSE emp_cursor;

  Repeter  tout  au  long  de la liste chainee, edition des dates et des
  salaires

  La liste chainee peut ne pas etre necessaire au cas ou le curseur  est
  ORDER BY Start.

  Dans  tous  les  cas,  la requete, tout ce qu'il y a de naturelle, est
  tout a  fait  difficile  a  exprimer  en  utilisant  les  possibilites
  offertes par SQL-92. La requete est triviale en TSQL2.

               SELECT Salary
               FROM Employee

  3333..1166..55..  EET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 a eviter le probleme d'extraction
  de l'historique du salaire en reorganisant le schema pour separer  les
  informations  de  salaire,  de titre, et de date de naissance (dans ce
  qui suit,  nous  ignorerons  la  date  de  naissance  pour  raison  de
  simplicite).

               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
  employe 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-a-dire,  supposons  que le BP veuille qu'une
  table soit calculee dans la forme de la Figure 1)? Une alternative est
  d'editer  les deux tables, et de laisser l'utilisateur en calculer les
  combinaisons. Une seconde alternative est d'utiliser entierement  SQL.
  Malheureusement,  cette  requete  doit  faire  une etude de cas sur la
  maniere 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 facon correcte, tous les cas constitue une
  tache qui releve du challenge. En TSQL2, realiser  une  jointure  tem-
  porelle correspond simplement a ce que l'on peut esperer.

               SELECT Employee1.Name, Salary, Dept
               FROM Employee1, Employee2
               WHERE Employee1.Name = Employee2.Name

  3333..1166..66..  EETTUUDDEE DDEE CCAASS -- AAGGRREEGGAATTSS

  Maintenant,  on  demande  au  BP  quel  est le salaire maximum ? Avant
  d'ajouter les donnees de temps, c'etait facile.

               SELECT MAX(Salary)
               FROM Employee

  Maintenant que l'historique du salaire est  enregistre,  nous  obtien-
  drons quelque chose comme l'historique du salaire maximum a travers le
  temps. Le probleme est que, naturellement, SQL ne fournit pas  d'agre-
  gats  temporels.  Le  moyen  simple de realiser cela consiste a editer
  l'information, et a chercher, a la main, le maximum.  Une  alternative
  consiste  a  etre  plus  astucieux  et  a convertir l'instantane de la
  requete agregee en une requete non agregee, puis a convertir le resul-
  tat  en  requete  temporelle.  La  requete  non  agregee  retrouve les
  salaires pour lesquels un salaire plus eleve n'existe pas.

               SELECT Salary
               FROM Employee AS E1
               WHERE NOT EXISTS (SELECT *
                                 FROM Employee AS E2
                                 WHERE E2.Salary > E1.Salary)

  Convertir cette requete en une requete temporelle est loin d'etre evi-
  dent. 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 cree une table auxiliaire. Nous ajoutons a cette table
  la periode inferieure soustraite d'une periode et la partie superieure
  soustraite  d'une  periode.  Nous supprimons alors toutes les periodes
  qui se chevauchent avec une ligne definie dans la sous-requete, de  ce
  fait realisant le NOT EXISTS(n'existe pas). Finalement nous generons a
  partir de la table auxiliaire les periodes maximales, de la meme facon
  que  l'information  de  salaire avait ete calculee ci-dessus. Comme on
  peut  l'imaginer,  un  tel  code  SQLest  extremement   inefficace   a
  l'execution,  compte  tenu des requetes complexes imbriquees contenant
  des predicats d'inegalite.

  Une troisieme alternative consiste a utiliser le moins  possible  SQL,
  et  plutot  de  calculer  le  maximum  desire  dans un langage hote en
  utilisant des curseurs.

  La requete en TSQL2 est de nouveau simple et intuitive.

               SELECT MAX(Salary)
               FROM Employee

  3333..1166..77..  RREESSUUMMEE

  Dans la plupart des applications de base de donnees  on  manipule  des
  donnees  qui  changent  en  fonction  du  temps. La prise en compte de
  l'instant de  validite  est  absente  de  SQL.  Beaucoup  de  requetes
  temporelles ordinaires sont difficiles a simuler en SQL, ou requierent
  du SQL integre dans un langage procedural, ceci etant du au manque  de
  support des tables avec instant de validite dans son modele de donnees
  et dans la structure des requetes.

  Ailleurs, nous avons montre que l'ajout du  support  de  l'instant  de
  validite  ne  requiert  que peu de modifications dans l'implementation
  des SGDB, peut radicalement simplifier un certain nombre  de  requetes
  et   en   permettre  d'autres,  et  peut,  plus  tard,  permettre  des
  optimisations  dans  les  structures   de   memoires,   les   methodes
  d'indexation  et  les  strategies d'optimisation qui peuvent entrainer
  des ameliorations notables dans les performances.

  Avec une nouvelle partie  de  SQL3  supportant  les  informations  qui
  varient  avec  le  temps, permettant une meilleure gestion des donnees
  temporelles par SQL3, nous pouvons commencer a apporter une reponse  a
  de telles application.

       ----------------------------------------------------------------------------
                  Comite de Normalisation Accredite* 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 Comite de Normalisation Accredite 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 etre
  realise au sein du Comite Technique X3H2,  Bases  de  Donnees.   Cette
  proposition de norme concerne un nouvelle partie de la norme naissante
  SQL3, e.g., Partie 7, SQL Temporel, et specifie les extensions au lan-
  gage  SQL  pour gerer le stockage, l'extraction et la manipulation des
  donnees temporelles dans un environnement de base de donnees SQL.

  La prochaine reunion du comite X3H2 est planifie pour la periode du 11
  au 14 Mars 1996 dans le Kansas.

  Les  questions concernant ce projet doivent etre envoyees au president
  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'etre emis. Soumettez, s'il
  vous plait, les informations a ce propos au secretariat de X3 a :

               X3 Secretariat
               1250 Eye Street
               NW, Suite 200,
               Washington DC  20005.
               Email: x3sec@itic.nw.dc.us
               FAX:  (202)638-4922.

  3333..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
  developpement  d'une  bibliotheque de classe SQL pour les applications
  multi-media a ete approuve debut  1993.  Cette  nouvelle  activite  de
  normalisation,   appelee  SQL  Multi-media  (SQL/MM),  specifiera  les
  paquetages de definition de types de donnees abstraites SQL  (ADT)  en
  utilisant   les   fonctions  fournies  dans  les  specifications  SQL3
  naissantes pour  ADT.   SQL/MM  a  pour  objectif  de  normaliser  des
  bibliotheques   de   classes  pour  la  science  et  l'ingenierie,  le
  traitement des textes et des documents, ainsi que des methodes pour la
  gestion  d'objets  multi-media  tels  que  les  images,  les sons, les
  animations, la musique et la video. Il fournira  vraisemblablement  un
  lien  entre  le  langage SQL et les objets multi-media definis par les
  autres entites de normalisation du JTC1 (e.g. SC18 pour les documents,
  SC24  pour  les  images,  et SC29 pour les photographies et les images
  animees).

  Le Plan du Projet pour SQL/MM prevoit que ce  sera  une  norme  multi-
  parties  dont  le  nombre  de  parties  pourra  evoluer.  La  partie 1
  consistera en un cadre specifiant comment les autres  parties  doivent
  etre  architecture.  Chacune de ces autres parties sera consacree a un
  paquetage d'application SQL specifique. En  aout  1994,  la  structure
  existante etait la suivante :

  +o  Partie  1:  Cadre - Description non technique de la maniere dont le
     document est structure.

  +o  Partie  2:  Methodes  pour  le  Texte  et  ADT  (types  de  donnees
     abstraits) pour le traitement des textes. Environ 45 pages.
  +o  Partie  3:  Methodes  Spatiales  et ADT pour la gestion des donnees
     spatiales Environ 200 pages avec l'active contribution d'experts en
     Donnees Spatiales de 3 entites nationales.

  +o  Partie  4:  Methode  a  Usage  General  et  ADT  pour  les  nombres
     complexes, et des fonctionnalites incluant la trigonometrie et  les
     fonctions   exponentielles   les   vecteurs,   les  ensembles  etc.
     Actuellement environ 90 pages.

  On assiste  a  des  efforts  de  normalisation  dans  le  domaine  des
  informations Spatiales et Geographiques :

  +o  ANSI  X3L1 - Systemes d'Information Geographique.  Mark Ashworth de
     Unisys est charge de la liaison entre X3L1 et  ANSI  X3H2.  Il  est
     egalement  le  redacteur  des  parties  1, 3, and 4 du brouillon de
     SQL/MM.

  +o  ISO TC 211 - Information geographique/Geomatique.

  3344..  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
  problemes vous pouvez envoyer un courrier electronique a :

  +o  pgsql-questions@postgresql.org

     et  vous  recevrez  par  courrier  electronique une reponse dans la
     journee qui suit.  Comme le nombre de produits  internet  est  tres
     large,  et  que  les  utilisateurs  aident les autres utilisateurs,
     internet est capable d'apporter facilement un support  technique  a
     des  millions  d'utilisateurs.  Le  support  par  Email est de loin
     beaucoup plus adapte que celui effectue par telephone car  on  peut
     recuperer 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
  activite  serviront  a entretenir plusieurs sites miroirs (web et ftp)
  partout dans le monde. Ces revenus pourront aussi servir a  creer  une
  documentation imprimee, des guides, des livres pour aider les clients.
  Les   profits   seront   egalement   utilises   a    construire    des
  immeubles/salles  de  classe  et  a  offrir  des  cours techniques sur
  l'administration et la gestion des bases de donnees et a organiser des
  conferences  annuelles  pour  les  utilisateurs.   Ceci  devrait aider
  l'organisation PostgreSQL a se debrouiller toute seule.

  Vous pouvez aussi  vous  faire  aider  par  des  societes  de  conseil
  professionnelles telles que Anderson, WGS (Work Group Solutions). Pour
  de l'aide, contactez les a -

  +o  Work Group Solutions  <http://www.wgs.com>

  +o  Anderson Consulting  <http://www.ac.com>

  3355..  AAssppeeccttss EEc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 donnees commerciales paient de  nombreuses  taxes  telles
  que  des taxes federales, d'etat, sur les ventes, sur les salaries, la
  securite sociale, les taxes pour les soins  medicaux,  des  indemnites
  pour  les  employes,  des couts de marketing et de publicite. Tous ces
  couts ne sont pas destines directement au developpement de la base  de
  donnee.  Quand vous achetez une base de donnees commerciale une partie
  du montant est  destine  aux  taxes,  aux  depenses  de  recherche  et
  developpement  (  R&D ). Donc la valeur reelle pour la base de donnees
  est beaucoup plus faible.

  De plus les bases de donnees commerciales  doivent  payer  pour  leurs
  immeubles/biens et pour l'achat de machines Unix, leur installation et
  leur maintenance. Tous ces couts sont repercutes sur les clients.

  PostgreSQL possede l'avantage, sur les bases de donnees  commerciales,
  de  ne  pas  supporter  de taxes puisque developpee sur l'internet. Un
  tres grand nombre de personnes contribuent a  son  developpement.  Par
  exemple, cas hypothetique, 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 magie du developpement sur internet.

  Actuellement, le code source de PostgreSQL est constitue d'environ 200
  000  lignes  de  code "C" et "C++". Si le cout de chaque ligne de code
  "C" est evalue a $ 10, alors le cout total de  PostgreSQL,  tel  qu'il
  est aujourd'hui est de $ 2 000 000 (deux millions de dollars!!).

  De  nombreuses  compagnies  ont deja developpe de grandes quantites de
  code "C", "C++" maison. Donc, en prenant le code source de  PostgreSQL
  et  en  collaborant avec les autres compagnies sur internet, cela leur
  beneficierait beaucoup en leur faisant  economiser  du  temps  et  des
  efforts.

  3366..  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neeeess

  On  trouvera  ci-dessous la liste des autres bases de donnees SQL pour
  Unix, Linux.

  +o  Cliquez       et       allez       a       Applications->databases.
     <http://www.caldera.com/tech-ref/linuxapps/linapps.html>

  +o  Cliquez       et       allez       a       Applications->databases.
     <http://www.xnet.com/~blatura/linapps.shtml>

  +o  Ressources pour Bases de Donnees <http://linas.org/linux/db.html>

  +o  Liste       des        Bases        de        Donnees        libres
     <http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html>

  +o  Liste des SGBDR de Browne <http://www.hex.net/~cbbrowne/rdbms.html>
     ecrit par Christopher B. Browne cbbrowne@hex.net

  +o  Liste des SGBDR de SAL <http://SAL.KachinaTech.COM/H/1/>

  +o  Liste      des      SGBD      Orientes      Objets      de      SAL
     <http://SAL.KachinaTech.COM/H/2/>

  +o  Liste     des    Utilitaires    et    d'Autres    SGDB    de    SAL
     <http://SAL.KachinaTech.COM/H/3/>

  +o  Index des Logiciels de Base de Donnees  Publics   de  l'ACM  SIGMOD
     <http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/>

  3377..  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, recele un tres grand nombre de logiciels  et  un
  ocean  d'informations.  Il  s'accroit  a la vitesse de 500% par an. On
  estime le nombre de sites Web a  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
  criteres de recherche. La methode de recherche par defaut consiste  en
  une "recherche intelligente" qui est plus generale et donne toutes les
  possibilites. Cliquez sur "Options" et selectionnez la  recherche  par
  "EXACT  phrase"  , par "AND" , par "OR" , etc... De cette maniere vous
  trouverez l'information que vous cherchez beaucoup plus rapidement.

  3388..  CCoonncclluussiioonn

  Apres avoir cherche toutes les bases de donnees disponibles qui soient
  libres  et  dont  le code source soit disponible, j'ai trouve que SEUL
  PostgreSQL, le SGBDR (Relationnel Objet)SQL libre, est le PLUS  mature
  et  le  plus largement utilise au monde. PostgreSQL est tres attractif
  en ce que beaucoup de travail a deja ete effectue et qu'il possede des
  pilotes   ODBC   et   JDBC   permettant   d'ecrire   des  applications
  independantes des  bases  de  donnees.  Les  applications  ecrites  en
  PostgreSQL  qui  utilisent  les  pilotes  ODBC,  JDBC  sont facilement
  portables sur d'autres systemes tels que Oracle, Sybase  et  Informix.
  Et  les  applications  ecrites  pour  Oracle,  Sybase  et Informix qui
  utilisent les pilotes ODBC, JDBC sont facilement portables sur la base
  de donnees PostgreSQL.

  Vous  pouvez  vous  demander "Mais pourquoi PostgreSQL ?" La reponse a
  cela est que puisqu'il faut  pas  mal  de  temps  pour  developper  un
  systeme  de  gestion  de  base  de  donnees  ex  nihilo,  il  est plus
  raisonnable d'en utiliser un qui satisfasse aux conditions suivantes -

  Un systeme de gestion de base de donnees

  +o  Dont le code source soit disponible

  +o  Qui ne necessite pas de licence, qui n'a pas de doits de propriete

  +o  Qui puisse etre distribue sur internet

  +o  Qui a necessite plusieurs annees de developpement.

  +o  Qui puisse repondre aux besoins futurs telles que SQL 3 (SQL 98)

  +o  Qui possede des fonctionnalites avancees

     Et,  justement,  il appert que c'est 'PostgreSQL' qui repond a tous
     ces criteres et que c'est un logiciel approprie dans ce cas.

  3399..  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

  3399..11..  DDeerrnniieerree vveerrssiioonn ddeess QQuueessttiioonnss FFrreeqquueemmmmeenntt PPoosseeeess ((FFAAQQ)) -- QQuueess--
  ttiioonnss ssuurr PPoossttggrreeSSQQLL

  Veuillez vous referer a  la  derniere  version  de  la  FAQ  pour  les
  questions generales, celles concernant Linux et Irix a :

  +o  <http://www.postgresql.org/docs/faq-english.shtml>

  4400..  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 reserves.

  AUCUNE  RESPONSABILITE  NE  SAURAIT  TRE  RETENUE  POUR  DES  DOMMAGES
  CONSECUTIFS A L'UTILISATION DE TOUT OU PARTIE DE CE DOCUMENT. En aucun
  cas  l'auteur ou le traducteur de ce document ne pourra etre tenu pour
  responsable vis-a-vis de de qui que ce soit pour tous  dommages  quels
  qu'ils  soient  (y  compris  et  sans  limitation,  special,  fortuit,
  consecutif, blessures  directes  ou  indirectes  pour  les  personnes,
  pertes   financieres   dues  au  manque  a  gagner,  a  l'interruption
  d'activite,  pertes  d'informations  commerciales   ou  toutes  autres
  pertes financieres) resultant de l'utilisation de ce document.

  L'auteur   et   le   traducteur   n'offrent   aucunes   garanties  sur
  l'adequation, l'utilite ou la valeur marchande  de  ce  document.  Les
  marques,  les  compagnies  et  les noms de produits mentionnes dans ce
  document sont des marques de fabrique ou des marques deposees de leurs
  proprietaires   respectifs.  Veuillez  vous  referer  aux  notices  de
  copyright individuelles des marques, compagnies et produits mentionnes
  dans  ce  document.  Il  est  de  votre  responsabilite  de lire et de
  comprendre       les       notices       de       copyright        des
  organisations/compagnies/produits/auteurs  mentionnes dans ce document
  avant d'utiliser leurs informations respectives.

  AAOO..  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
  exploree d'abord en profondeur, realisee le 27-AOT-1992 11:03:41.64.
  La version specifique de BNF donnee 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APP..  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 aa ll''uussaaggee ddeess ddeebbuuttaannttss

  AAPP..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 repertoire src/tutorial

  AAPP..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 ce didacticiel SQL a

  +o  <http://w3.one.net/~jhoffman/sqltut.htm>

     Pour  les  commentaires  ou  suggestions,   envoyer   un   courrier
     electronique a

  +o  jhoffman@one.net

     Vous pouvez egalement aller jeter un oeil a :

  +o  <http://w3.one.net/~jhoffman/index.html>

  +o  Jim Hoffman is at jhoffman@one.net

     John Hoffman suggere de visiter les sites suivants :

  +o  <http://www.contrib.andrew.cmu.edu/~shadow/sql.html>Reference SQL

  +o  <http://www.inquiry.com/techtips/thesqlpro/>Demandez SQL Pro

  +o  <http://www.inquiry.com/techtips/thesqlpro/usefulsites.html>Sites
     utiles pour les BD relationnelles SQL Pro

  +o  <http://infoweb.magi.com/~steve/develop.html>    Le     site     du
     programmeur

  +o  Sites  DBMS   <http://info.itu.ch/special/wwwfiles> Et la consultez
     le fichier : comp_db.html

  +o  <http://www.compapp.dcu.ie/databases/f017.html>Ingredients DB

  +o  <http://www.stars.com/Tutorial/CGI/>Web Authoring

  +o  <http://wfn-shop.princeton.edu/cgi-bin/foldoc>Dictionnaire
     informatique

  +o  <http://www-ccs.cs.umass.edu/db.html>DBMS Lab/Links

  +o  SQL                                                             FAQ
     <http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ> Et  la,
     consultez le fichier SQL_TOC.html

  +o  <http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html>Bases de donnees
     SQL

  +o  <http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.html>RIT
     Database Design Page

  +o  <http://www.pcslink.com/~ej/dbweb.html>Site de renvoi sur les Bases
     de Donnees

  +o  <http://www.eng.uc.edu/~jtilley/tutorial.html>Didacticiels       de
     programmation sur le Web

  +o  <http://www.ndev.com/ndc2/support/resources.htp>Ressources       de
     deceloppement

  +o  <http://ashok.pair.com/sql.htm>Query List

  +o  <http://jazz.external.hp.com/training/sqltables/main.html>IMAGE SQL
     Divers

  +o  <http://www.eit.com/web/netservices.html>Liste     de    ressources
     Internet

