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

Contenu de cette section

13.1 interface Perl 5 pour PostgreSQL

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

13.2 Qu'est-ce que DBI ???

L'interface de SGBD Perl (Perl Database Interface - DBI) est une interface logicielle d'accès à un SGBD (Application Programming Interface - API) pour le langage PERL. Les spécifications de l'API DBI perl définissent un ensemble de fonctions, de variables et de conventions d'accès à un SGDB cohérent et indépendant du SGBD utilisé.

13.3 Annonce du pilote DBI DBD-Pg-0.63 DBI pour PostgreSQL

Sur le site CPAN on trouve DBD-Pg-0.63.tar.gz. Depuis sortie de la dernière version publique, les modifications suivantes ont été effectuées :

- - adaptation à PostgreSQL-6.2 : o $ sth->rows de même que $ sth->execute et $ sth->do renvoient le nombre de lignes affectées même pour les instructions non-Select. o ajout du support d'autorisation par mot de passe, lire la page du manuel concernant pg_passwd.

- - the data_source parameter of the connect method accepts two additional parameters which are treated as host and port: DBI->connect("dbi:Pg:dbname:host:port", "uid", "pwd")

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

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

Pour de plus amples informations voir:

http://www.perl.com/CPAN

http://www.postgresql.org

http://www.hermetica.com/technologia/DBI

13.4 Notes concernant cette version et fichier LISEZ-MOI

#---------------------------------------------------------
#
# $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 complémentaires concernant DBI consulter:

http://www.fugue.com/dbi/

COPYRIGHT :

-----------

La distribution de ce document est soumise aux conditions de la licence publique générale GNU ou la licence protégeant la création Artistique (Artistic License), ainsi que c'est spécifié dans le fichier LISEZ-MOI perl.

SI VOUS AVEZ DES PROBLEMES :

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

Envoyez vos commentaires et vos rapports d'erreur à E.Mergl@bawue.de

Pensez à inclure les messages affichés 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 :

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

- compiler, tester et installer Perl 5 (au moins 5.002) - compiler, tester et installer le module DBI (au moins 0.89) - compiler, tester et installer PostgreSQL (au moins 6.2)

PLATEFORMES :

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

Cette version def DBD-Pg a été développée pour Linux 2.0 avec chargement dynamique des extensions perl. Merci de me faire savoir si vous rencontrez des problèmes 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 répertoire racine de votre installation Postgres. Taper les commandes suivantes:

1. perl Makefile.PL 2. make 3. make test 4. make install

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

TEST :

------

Lancer 'make test'. Noter que l'utilisateur lançant ce script doit avoir été créé avec des droits d'accès lui permettant de créer des bases de données "ET" des utilisateurs !. Ne pas lancer ce script en tant que root!.

Si le test échoue avec le message 'login failed', vérifier que l'accès à template1 de la base de données ainsi qu'à pgperltest ne sont pas protégés dans pg_hba.conf.

Si vous utilisez la bibliothèque partagée libpq.so vérifiez que votre chargeur dynamique trouve libpq.so. La commande Linux /sbin/ldconfig -v devrait vous renseigner sur l'endroit où se trouve libpq.so. Si ldconfig ne trouve pas libpq.so, soit ajoutez une entrée appropriée 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 résultant 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 incomplète de perl. Si vous avez des erreurs de compilation du style "XS_VERSION_BOOTCHECK undeclared", exécutez un 'find .../lib/perl5 -name XSUB.h -print' Si ce fichier n'est pas présent, il est indispensable de recompiler et de réinstaller perl.

Utilisateurs SGI : si vous avez un défaut 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 défaut). "David R. Noble" drnoble@engsci.sandia.gov drnoble@engsci.sandia.gov

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

E.Mergl@bawue.de October 05, 1997

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

13.5 FAQ pour DBI

On trouvera ci-dessous les Questions Fréquemment Posées (FAQ) pour DBI. La page Web d'accueil se trouve à

http://www.hermetica.com/technologia/perl/DBI

                         DBI Foire Aux Questions v.0.35
                       Derniere mise a jour : 20 Juin, 1997

* NAME
* SYNOPSIS
* VERSION
* DESCRIPTION
* Information & Sources d'Informations 

   * 1.1 Qu'est-ce que DBI, DBperl, Oraperl and *perl?
   * 1.2. Ou puis-je les trouver?
   * 1.3. Ou puis-je trouver plus d'informations?

* Problemes de compilation

   * 2.1. Problemes de compilation ou "echec aux tests!"

* Questions de Plates-formes et de Pilotes

   * 3.1 Quelle est la difference entre ODBC et DBI?
   * 3.2 DBI est-il supporte sur les plates-formes Windows 95 / NT ?
   * 3.3 Puis-je acceder a des bases de donnees Microsoft Access ou SQL-Server avec DBI?
   * 3.4 Y-a-t'il un DBD pour X?
   * 3.5 Qu'est-ce que DBM? Et pourquoi dois-je utiliser DBI a sa place?
   * 3.6 Quand mSQL-2 sera t'il supporte?
   * 3.7 Quel systeme de gestion de base de donnees me recommandez vous?
   * 3.8 Est-ce que X est supporte dans DBI?

* Questions de programmation

   * 4.1 Est-ce que DBI est d'une quelconque utilite pour la programmation CGI?
   * 4.2 Comment puis-je obtenir des temps de connexion plus rapides avec DBD::Oracle et CGI?
   * 4.3 Comment puis-je obtenir des connexions persistantes avec DBI et CGI?
   * 4.4 ``Quand je lance un script perl a partir de la ligne de commande, ca
         marche, mais, quand je le lance a partir de C, ca echoue!" Pourquoi?
   * 5.1 Puis-je faire de l'execution en parallele avec DBI?
   * 5.2 Comment manipuler des donnees BLOB avec DBI?
   * 5.3 Comment puis-je invoquer des procedures enregistrees avec DBI?
   * 5.4 Comment puis-je recuperer les valeurs de retour des procedures enregistrees avec DBI?
   * 5.5 Comment puis-je creer ou detruire une base de donnees avec DBI?
   * 5.6 Comment puis-je enregistrer ou annuler une instruction avec DBI?
   * 5.7 Comment les valeurs NULL sont-elles prises en compte par DBI?
   * 5.8 Qu'est-ce que c'est que ces histoires de methodes func?

* Support et formation

   * Assistance Commerciale
   * Formation

* Autres References
* AUTEUR
* COPYRIGHT

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

NAME

DBI::FAQ -- Foire Aux Questions pour l'interface de SGBD 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.

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

Information de base & Sources d'Information 

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

1.1 Qu'est-ce que c'est que DBI, DBperl, Oraperl and *perl?

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.

Voici un diagramme decrivant ce principe :

                            [ Architecture DBI  ]

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.

    Module Name 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 modification. 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 telecharger Msqlperl a 
partir du site CPAN via :

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

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

1.2. Ou puis-je le trouver?

DBI est disponible en premier sur :

    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:

    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:

    http://www.hermetica.com/technologia/perl/DBI

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

1.3. Ou puis-je trouver plus d'informations?

Il existe quelques sources d'information sur  DBI.

Specifications DBI 

         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

         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 :

         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 
     (pour lui, c'est moi) 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, vraiment! ) 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 :

         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 :

         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 :

              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 :

              Email: 'dbi-dev-request@fugue.com' with a message body of
              'subscribe'

     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 :

              Email: 'dbi-users-request@fugue.com' with a message body of
              'subscribe'

Archives des Listes de Diffusion
     Archives des Listes de Diffusion US

              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

              http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest

          Identique a l'archive US ci-dessus.

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

Problemes de compilation

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

2.1. Problemes de compilation ou "Il echoue aux tests!"

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 :

    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 patch (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 :

              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 d'une part et d'autre part vous ne perdez rien a le faire,
     donc, faites-le.

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

Questions de Plates-formes et de Pilotes

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

3.1 Quelle est la difference entre ODBC et DBI?

Ca, c'est une bonne question! Reponse a rediger de maniere detaillee!

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

3.2 DBI est-il supporte sur les plates-formes Windows 95 / NT ?

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 :

    http://www.hermetica.com/technologia/perl/DBI/win32

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

3.3 Puis-je acceder aux bases de donnees Microsoft Access ou SQL-Server avec DBI?

    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 :

    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!

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

3.4 Existe-t-il in DBD pour <inserez le nom de votre SGBD favori ici>?

Est-il cite dans la liste des pilotes DBI ?

    http://www.hermetica.com/technologia/perl/DBI/DBD

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

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

3.5 Qu'est-ce que DBM? Et pourquoi dois-je utiliser DBI a sa place?

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.

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

3.6 Quand mSQL-2 sera t'il supporte?

De meme que pour DBD::mSQL-0.61, il y a eu un support pour mSQL-2. Cependant, il 
n'y a encore aucun reel support pour les nouvelles methodes func, concernant les 
index, ajoutees a la bibliotheque de base mSQL. Celles-ci seront prochainement 
disponibles et seront accessibles a DBD::mSQL au travers de methodes func privees.
Vous pouvez obtenir plus d'informations concernant ces methodes func privees dans 
le POD DBD::mSQL en tapant :

    perldoc DBD::mSQL

a condition d'avoir une installation correcte de DBD::mSQL.

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

3.7 Quel systeme de gestion de base de donnees me recommandez vous?

C'est un sujet particulierement epineux pour lequel une reponse objective est 
delicate dans la mesure ou, chaque ensemble de donnees, chaque usage et chaque 
configuration du systeme est different d'un utilisateur a l'autre.

Du point de vue de l'auteur, si l'ensemble de donnees est relativement petit, donnant
des tables de moins de 1 million de lignes, et qu'il y ait moins de 1000 tables dans 
une base de donnees, alors mSQL est une solution parfaitement acceptable. Ce SGBD 
est extremement bon marche, est merveilleusement robuste et beneficie d'un excellent
support. Des informations complementaires sont disponibles sur le site WWW Hughes 
Technology a :

    http://www.hughes.com.au

Si l'ensemble de donnees entraine des tables de plus de  1 million de lignes ou plus 
de 1000 tables, ou si vous disposez de, soit plus d'argent, soit de machines plus
puissantes, je vous recommanderai le RDBMS (SGBDR en francais) Oracle7. Le site WWW 
Oracle's est une excellente source d'information complementaire.

    http://www.oracle.com

Informix est un autre RDBMS de haut niveau qu'il faut envisager. Il existe plusieurs 
differences entre Oracle et Informix qui sont trop complexes pour etre detaillees 
dans ce document. On trouvera l'information sur Informix sur leur site WWW a :

    http://www.informix.com

En cas d'utilisation dans des applications en frontal WWW, mSQL peut etre un 
meilleur choix du fait de ses temps de connexion courts entre le script CGI et le 
SGBD que Oracle RDBMS qui, a chaque connexion, reclame plus de ressources. mSQL est 
moins gourmand en ressources et plus rapide.

Ce point de vue n'est pas forcement partage par tout le monde et n'est pas sponsorise
ou dicte par une quelconque societe. Il est donne tel quel.

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

3.8 Est-ce que <inserez une fonctionnalite ici> est supporte par DBI?

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

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

Questions de Programmation

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

4.1 Est-ce que DBI est d'une quelconque utilite pour la programmation CGI?

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.

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

4.2 Comment puis-je obtenir un temps de connexion plus rapide avec DBD::Oracle et CGI CGI?

    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 :

    http://www.apache.org

Le module mod_perl peut etre recupere de CPAN via :

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

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

4.3 Comment puis-je obtenir une connexion persistante avec DBI et CGI?

    Contribution de by 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 telecharge de CPAN via :

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

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

4.4 ``Quand je lance un script perl de la ligne de commande, ca marche, mais, quand 
je le lance sous httpd, ca echoue!" Pourquoi?

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 :

    http://www.perl.com/perl/faq/index.html

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

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

5.1 Puis-je faire de l'execution en parallele avec DBI?

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 :

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

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

5.2 Comment manipuler des donnees BLOB avec DBI?

A ecrire.

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

5.3 Comment puis-je invoquer des procedures enregistrees avec DBI?

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

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

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

5.4 Comment puis-je recuperer les valeurs de retour de procedures enregistrees avec DBI?

    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!

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

5.5 Comment puis-je creer ou supprimer une base de donnees avec DBI?

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.

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

5.6 Comment puis-je valider ou annuler une instruction avec DBI?

A ecrire.

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

5.7 Comment les valeurs NULL sont-elles prises en compte par DBI?

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 
un standard pour tous les pilotes.

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

5.8 Qu'est-ce que c'est que ces histoires de methodes func?

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

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

Assistance et formation

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.

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

Assistance technique

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 :

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

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

Formation

Aucun programme de formation n'est connu a ce jour.

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

Autres References

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.

    http://www-ccs.cs.umass.edu/db.html
    http://www.odmg.org/odmg93/updates_dbarry.html
    http://www.jcc.com/sql_stnd.html

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

AUTEUR

Alligator Descartes <descarte@hermetica.com>

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

COPYRIGHT

Ce document est Copyright (c)1994-1997 Alligator Descartes, avec des parties
Copyright (c)1994-1997 leurs auteurs originaux. Ce module est publie selon les 
conditions d'une licence 'Artistique' que vous pouvez trouver dans la distribution 
de perl.

Ce document est Copyright (c)1997 Alligator Descartes. Tous droits reserves.
La permission de distribuer ce document, en entier ou en partie, via email,
Usenet, archives ftp ou http est accordee a condition que ce soit gratuitement, on a 
fait un effort raisonnable pour utiliser les versions les plus actuelles et tous les 
avis d'attribution et de copyright ont ete maintenus ( Se referer aux sections AUTEUR
et COPYRIGHT ). Les demandes pour d'autres droits de distribution, y compris 
l'incorporation dans des produits commerciaux, tels que livres, articles de magazines
ou CD-ROMs doit etre effectuee aupres de Alligator Descartes 
<descarte@hermetica.com>.

----------------------------------------------------------------------------
                             (c) 1995-97 Hermetica
                      Alligator Descartes - Hermetica


Chapitre suivant, Chapitre Précédent

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

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