retour à la liste des howto linux Page suivante Page précédente Table des matières

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

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

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

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

271.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 précédentes.            *
*                                                        *
*            Lire la documentation du module             *
*               pour l'attribut AutoCommit               *
*               et le type de donnée 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

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

271.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
                       Dernière mise à 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. Où puis-je les trouver?
   * 1.3. Où puis-je trouver plus d'informations?

* Problèmes de compilation

   * 2.1. Problèmes de compilation ou "échec aux tests!"

* Questions de Plates-formes et de Pilotes

   * 3.1 Quelle est la différence entre ODBC et DBI?
   * 3.2 DBI est-il supporté sur les plates-formes Windows 95 / NT ?
   * 3.3 Puis-je accéder à des bases de données 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 à sa place?
   * 3.6 Quand mSQL-2 sera t'il supporté?
   * 3.7 Quel système de gestion de base de données me recommandez vous?
   * 3.8 Est-ce que X est supporté dans DBI?

* Questions de programmation

   * 4.1 Est-ce que DBI est d'une quelconque utilité 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 à partir de la ligne de commande, çà
         marche, mais, quand je le lance à partir de C, çà échoue!" Pourquoi?
   * 5.1 Puis-je faire de l'exécution en parallèle avec DBI?
   * 5.2 Comment manipuler des données BLOB avec DBI?
   * 5.3 Comment puis-je invoquer des procédures enregistrées avec DBI?
   * 5.4 Comment puis-je récupérer les valeurs de retour des procédures enregistrées avec DBI?
   * 5.5 Comment puis-je créer ou détruire une base de données 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 méthodes func?

* Support et formation

   * Assistance Commerciale
   * Formation

* Autres Références
* 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 numéro 0.35.

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

DESCRIPTION

Ce document contient les réponses aux questions les plus fréquemment posées
 à la fois sur les Mailing Lists DBI et personnellement aux membres de l'équipe
de développement 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'accès aux bases de données (Application
      Programming Interface  -API) pour le langage Perl. Les spécifications DBI
      API définissent un ensemble de fonctions, de variables et de conventions
      cohérents d'interfaçage à une base de données indépendant de la base de
      données utilisée.''

En langage simple, l'interface DBI permet aux utilisateurs d'accéder de manière transparente
à de multiples base de données. Ainsi, Si vous vous connectez à une
base de données Oracle, Informix, mSQL, Sybase ou n'importe quelle autre, vous n'avez
pas besoin de connaître les mécanismes sous-jacents de la couche 3GL. L'API
définie par DBI fonctionnera sur tous ces types de bases de données.

On obtient un bénéfice du même ordre en ayant la possibilité de se connecter à deux bases de
données de différents fournisseurs à l'aide du même script perl, i.e., je veux lire des
données d'une base de données Oracle et les insérer dans une Informix à partir du même
programme. La couche logicielle DBI permet de le réaliser simplement et efficacement.

Voici un diagramme décrivant ce principe :

                            [ Architecture DBI  ]

DBperl est le nom ancien des spécifications de l'interface. Il est utilisé maintenant
pour désigner les modules perl4 d'interfaçage des bases de données tels que oraperl,
isqlperl, ingperl et autres. Ces interfaces n'ont pas d'API standard et ne sont
généralement pas supportés.

Voici une liste des modules DBperl, de leur équivalent DBI correspondants et du
support d'information. Notez que les auteurs cités ici ne maintiennent généralement
pas le module DBI de la base de données. Les adresses E-mail n'ont pas été vérifiées
et ne doivent être utilisées que pour les questions concernant les modules perl4 listés
ci-dessous. Les questions sur les pilotes DBI doivent être directement
adressées 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 possèdent des couches logicielles d'émulation. Ainsi
DBD::Oracle est livré avec une couche d'émulation Oraperl, ce qui permet d'exécuter
d'anciens scripts oraperl sans modification. La couche logicielle d'émulation traduit
les appels oraperl API en appels DBI et les exécute.

Voici une table des  couches d'émulation :

    Module        Couche d'émulation     Etat
    ------          ---------------     ------
    DBD::Oracle     Oraperl             Complète
    DBD::Informix   Isqlperl            En cours de  développement
    DBD::Sybase     Sybperl             Fonctionnelle? ( Nécessite une
                                        vérification)
    DBD::mSQL       Msqlperl            En version expérimentale avec
                                        DBD::mSQL-0.61

L'émulation Msqlperl est un cas particulier. Msqlperl est un pilote perl5 pour les
bases de données mSQL , mais il ne se conforme pas aux spécifications DBI. On
désapprouve son utilisation en faveur de  DBD::mSQL. On peut télécharger Msqlperl à
partir du site CPAN via :

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

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

1.2. Où 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 récupérer les
versions à jour des pilotes, en général absentes des sites miroirs. On peut accéder
à CPAN grâce au splendide programme "CPAN multiplexeur" de Tom Christiansen's situé
à:

    http://www.perl.com/CPAN/

Pour des informations plus spécifiques 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. Où puis-je trouver plus d'informations?

Il existe quelques sources d'information sur  DBI.

Spécifications DBI

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

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

     Il faut considérer ce dernier document comme ne présentant qu'un intérêt
     historique et ne pas l'utiliser en tant que manuel de programmation ou
     document de référence. Il demeure cependant une source d'informations
     très utile.

Documentation POD (Plain Old Documentation)
     Les PODs sont des morceaux de documentation généralement noyés à
     l'intérieur des programmes perl qui documentent le code "sur place".
     Ce sont des ressources très utiles pour les programmeurs et les
     utilisateurs des modules. Les PODs pour DBI et pour les pilotes
     deviennent monnaie courante et la documentation pour les modules
     contenant ces PODs peut être lue avec les commandes suivantes.

     La Spécification DBI
          Les PODs pour la spécification DBI peut être lue avec la commande :

              perldoc DBI

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

              perldoc Oraperl

          Ce qui permettra d'obtenir une copie à jour de la page de manuel
          originale écrite par Kevin Stock pour perl4. L'API oraperl y est
          entièrement listée et décrite.

     DBD::mSQL
          Les utilisateurs du module DBD::mSQL peuvent lire des informations
          sur quelques fonctions privées 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 système
          en tapant :

              perldoc DBI::FAQ

          Ceci peut être plus pratique pour ceux qui ne sont pas connectés à
          l'Internet ou le sont d'une manière peu pratique.

     Les POD en général
          On peut lire des informations sur la manière d'écrire des PODs,
          ainsi que sur la philosophie des PODs en général en tapant :

              perldoc perlpod

          Les utilisateurs ayant le module Tk installé seront peut-être
          intéressés d'apprendre qu'il existe un lecteur de POD basé sur Tk
          nommé tkpod. Il formate les POD de manière pratique et lisible.

Discussions, Cancans et Observations

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

     Il y a , de temps en temps, une série de discussions de la part de
     certaines personnes, dans les listes de diffusion sur DBI,
     qui, pour essayer d'éclaircir un simple point, finissent par
     transformer en brouillon des documents tout à fait complets. Ces
     documents sont souvent de qualité variable, mais donnent un
     aperçu du fonctionnement des interfaces.

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

         http://www.tpj.com

``DBperl''
     Cet article, publié dans l'édition de novembre 1996 du ``Dr. Dobbs
     Journal'' traitait de DBperl. L'auteur de cet article n'a apparemment
     pas contacté un seul membre de l'équipe de développement DBI pour
     vérifier l'information contenue dans son article. Plusieurs critiques
     de cet article dans les listes de diffusion des utilisateurs
     de dbi ont été 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 fraîcheur de l'information.

     Cependant, cette référence est donnée par soucis d'exhaustivité.

``The Perl5 Database Interface''
     Cette référence est celle d'un livre à écrire par Alligator Descartes
     (pour lui, c'est moi) publié par O'Reilly et Associés à paraître
     cet hiver.

     La table des matières de ce livre devrait contenir :

          * Introduction
               + Les Bases de Données
               + CGI / WWW
               + perl
          * Concepts de Base des Bases de données
               + Types de Bases de Données
                    o Flat File
                    o AnyDBM
                    o RDBMS
               + Utiliser Quelle Base de Données, pour Quoi faire...
          * SQL
               + Pourquoi SQL?
               + Structuration de l'Information dans les Bases de Données
               + Extraction des Données d'une Base de Données
               + Manipulation des Données et des Structures de Données
          * Architecture DBI
          * Programmation avec DBI
               + Initialisation DBI
               + Identifiants
                    o Identifiants de pilotes
                    o Identifiants de bases de données
                    o Identifiants d'instructions
               + Connexion and Déconnexion
               + Gestion des Erreurs
               + Emission de Requêtes Simples
               + Exécution d'Instructions Atomiques
               + Instructions MetaDonnées
               + Instruction plus dans le style perl
               + Liaison
               + Gestion des Transactions
               + Méthodes utilitaires
               + Gestion des Attributs et des Variables Dynamiques
          * DBI et ODBC
          * Les Pilotes de Bases de Données
               + DBD::Oracle et oraperl
               + DBD::Informix et isqlperl
               + DBD::mSQL et Msqlperl
          * Etude de Cas
               + DBI et le WWW
               + Migration des Données et Stockage
               + Logiciel d'Administration
          * Appendice: API Référence / Spécification
          * Appendice: Ressources

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

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

Listes de diffusion
     Il y a trois listes de diffusion pour DBI gérées par Ted Lemon.
     On peut s'inscrire à toutes et résilier cette inscription à
     travers le World Wide Web à l'URL :

         http://www.fugue.com/dbi

     Les listes où les utilisateurs peuvent participer sont:

     dbi-announce
          Cette liste de diffusion est réservée uniquement aux annonces.
          Très peu de trafic. Les annonces sont généralement postées
          sur la page WWW DBI principale.

          Si vous n'arrivez pas à utiliser le formulaire sur la page WWW
          indiquée ci-dessus, inscrivez-vous à cette liste de la manière
          suivante :

              Email: 'dbi-announce-request@fugue.com' avec le mot 'subscribe'
          dans le corps du message.

     dbi-dev
          Cette liste de diffusion est à l'usage des développeurs pour discuter
          des idées et des concepts de l'interface DBI, API et des mécanismes
          des pilotes. Seulement utiles pour les développeurs et les personnes
          intéressées. Trafic faible.

          Si vous n'arrivez pas à utiliser le formulaire sur la page WWW
          indiquée ci-dessus, inscrivez-vous à cette liste de la manière
          suivante :

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

     dbi-users
          Cette liste de diffusion est un lieu de discussion générale utilisée
          pour les rapports d'erreurs, la discussion sur différents problèmes
          et des demandes de renseignement d'intérêt général. Trafic moyen.

          Si vous n'arrivez pas à utiliser le formulaire sur la page WWW
          indiquée ci-dessus, inscrivez-vous à cette liste de la manière
          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 été mis en place
         pour permettre une recherche par les utilisateurs.

     Archives des Listes de Diffusion Européennes

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

          Identique à l'archive US ci-dessus.

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

Problèmes de compilation

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

2.1. Problèmes de compilation ou "Il échoue aux tests!"

En premier lieu, consulter la documentation en ligne concernant ce module, que ce
soit DBI lui-même ou un module DBD, et vérifier que ce n'est pas un problème de
compilation connu pour votre architecture. On peut trouver ces documents à :

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

Si c'est un problème connu, vous devrez probablement attendre qu'il ait été corrigé.
Si vraiment vous avez besoin d'une solution, essayez l'une des solutions suivantes :

Essayez de le corriger vous même
     Cette technique n'est généralement par recommandée aux craintifs. Si vous pensez
     que vous y êtes arrivé, alors, envoyer un fichier patch (context diff ) à
     l'auteur en expliquant les points suivants :

        o Quel était le problème, et, si possible, des jeux d'essai.

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

        o Donnez des informations concernant la Plate-forme utilisée, les versions :
          de la Base de Données, de Perl, du module et de DBI.

Envoyez un Email à l'auteur SANS RALER!
     S'il vous plaît, postez votre email à l'adresse indiquée dans les pages
     WWW du pilote avec lequel vous avez rencontré des problèmes. Ne pas poster
     directement à une adresse que vous connaissez à moins qu'elle ne
     corresponde à l'une de celles qui sont indiquées.

     Nous avons un vrai travail à faire, et nous devons consulter les listes de
     diffusion traitant des problèmes rencontrés. De plus nous ne pouvons pas
     forcément avoir accès à <insérez ici le nom de votre plate-forme favorite,
     celle qui vous cause des lésions cérébrales> et de ce fait vous apporter
     une quelconque assistance!
     Désolé de vous paraître dur, mais c'est comme cela!

     Cependant, vous pouvez tomber sur l'un de ces génies créatifs, qui, à 3
     heures du matin résoudra votre problème et vous fournira une rustine en 5
     minutes. L'ambiance dans le cercle DBI est que nous apprécions de
     connaître les problèmes des utilisateurs puisque nous travaillons dans
     le même environnement.

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

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

        o Si vous disposez d'un vidage mémoire, essayer de générer une trace du
          contenu de la pile (stack) à partir du vidage mémoire (core dump) en
          utilisant le module Devel::CoreStack. L'envoyer également. On peut
          trouver le module Devel::CoreStack sur CPAN à :

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

        o Les numéros de version du Module, de perl, des jeux d'essai, du
          système d'exploitation ainsi que tout autre information pertinente.

     Souvenez-vous que, plus vous nous enverrez d'informations plus vite
     nous pourrons résoudre le problème. 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 général une idée astucieuse de rapporter les problèmes
     rencontrés dans les listes de diffusion. Les auteurs lisent tous
     ces listes d'une part et d'autre part vous ne perdez rien à le faire,
     donc, faites-le.

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

Questions de Plates-formes et de Pilotes

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

3.1 Quelle est la différence entre ODBC et DBI?

Çà, c'est une bonne question! Réponse à rédiger de manière détaillée!

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

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

Finalement, oui! Jeff Urlwin s'est employé avec constance à porter DBI et DBD::Oracle
sur ces plates-formes, et, depuis la disponibilité d'un perl plus stable et d'un
portage de MakeMaker, le projet a progressé à pas de géant.

Les portages de DBI et de DBD::Oracle pour Win32 ports font maintenant partie
intégrante de DBI, donc, la récupération d'une version de DBI supérieure à 0.81 doit
donner satisfaction. Pour ce qui est des rustines nécessaires pour DBD::Oracle,
veuillez lire la page d'information de portage pour Win32 à :

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

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

3.3 Puis-je accéder aux bases de données Microsoft Access ou SQL-Server avec DBI?

    Contribution de Tim Bunce et Jeff Urlwin

Il existe une couche logicielle d'émulation expérimentale 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 à :

    http://www.roth.net

Etant donné son état, les rapports de problèmes, sans correction, ont de bonnes
chances d'être ignorés. Vous aurez également besoin du patch kit Win32 DBI tel qu'il
est fourni par Jeff Urlwin. Pour trouver l'endroit où il est disponible, lire la
réponse à la question précédente.

Jeff Urlwin fournit actuellement un gros travail sur la couche logicielle ODBC.
Pour en revenir à la question initiale, théoriquement, oui, on peut accéder aux bases
de données Microsoft Access ou SQL-Server avec DBI via ODBC!

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

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

Est-il cité dans la liste des pilotes DBI ?

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

Sinon, non. L'absence complète d'un pilote pour un SGBD donné dans cette page
signifie que personne n'a manifesté l'intention d'y travailler.

Comme corollaire à 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 réellement un pilote DBI, et qu'il puisse ne pas respecter les spécifications.
Par conséquent, les questions pour des problèmes concernant ce code ne doivent
pas être posées dans les listes de diffusion DBI.

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

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

Extrait de ``DBI - L'Interface de Base de Données pour Perl 5'' :

    ``A l'origine UNIX était bienheureux avec sa "Base de Données" rustique reposant
sur des fichiers, nommée système dbm. Avec dbm vous enregistrez les données dans des
fichiers et les retrouvez rapidement. Cependant, il souffre de sérieux
inconvénients.

        Verrouillage des fichiers

        Les systèmes dbm ne permettent par un verrouillage particulièrement
        robuste des fichiers, de même qu'il n'y a pas de possibilité de
        corriger les problèmes survenants lors d'écritures [ dans la base
        de données ] simultanées.

        Structures de Données Arbitraires

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

    Cependant, les systèmes dbm continuent à offrir des fonctions utiles pour les
    utilisateurs ayant des ensembles de données simples et des ressources limitées,
    puisqu'ils sont rapides, robustes et extrêmement bien testés. Les modules Perl
    pour accéder aux systèmes dbm font maintenant partie intégrante de la
    distribution Perl via le module AnyDBM_File.''

Pour résumer, DBM est une solution parfaitement satisfaisante pour les bases de
données essentiellement en lecture seule, ou pour des ensembles de données simples
et réduits. Toutefois, pour des ensembles de données plus importants, sans
mentionner un verrouillage des transactions robuste, on recommandera aux utilisateurs
de préférer DBI.

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

3.6 Quand mSQL-2 sera t'il supporté?

De même que pour DBD::mSQL-0.61, il y a eu un support pour mSQL-2. Cependant, il
n'y a encore aucun réel support pour les nouvelles méthodes func, concernant les
index, ajoutées à la bibliothèque de base mSQL. Celles-ci seront prochainement
disponibles et seront accessibles à DBD::mSQL au travers de méthodes func privées.
Vous pouvez obtenir plus d'informations concernant ces méthodes func privées dans
le POD DBD::mSQL en tapant :

    perldoc DBD::mSQL

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

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

3.7 Quel système de gestion de base de données me recommandez vous?

C'est un sujet particulièrement épineux pour lequel une réponse objective est
délicate dans la mesure où, chaque ensemble de données, chaque usage et chaque
configuration du système est différent d'un utilisateur à l'autre.

Du point de vue de l'auteur, si l'ensemble de données 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 données, alors mSQL est une solution parfaitement acceptable. Ce SGBD
est extrêmement bon marché, est merveilleusement robuste et bénéficie d'un excellent
support. Des informations complémentaires sont disponibles sur le site WWW Hughes
Technology à :

    http://www.hughes.com.au

Si l'ensemble de données entraîne 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 français) Oracle7. Le site WWW
Oracle's est une excellente source d'information complémentaire.

    http://www.oracle.com

Informix est un autre RDBMS de haut niveau qu'il faut envisager. Il existe plusieurs
différences entre Oracle et Informix qui sont trop complexes pour être détaillées
dans ce document. On trouvera l'information sur Informix sur leur site WWW à :

    http://www.informix.com

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

Ce point de vue n'est pas forcément partagé par tout le monde et n'est pas sponsorisé
ou dicté par une quelconque société. Il est donné tel quel.

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

3.8 Est-ce que <insérez une fonctionnalité ici> est supporté par DBI?

Si l'on suppose que la fonctionnalité en question n'est pas, en standard, spécifique
d'un SGBD, alors la réponse sera non.

DBI représente un API qui doit fonctionner avec la plupart des SGBD, et n'a pas de
fonctionnalité spécifique à un SGDB particulier.

Cependant, les auteurs d'un pilote peuvent, s'ils le désirent, ajouter une
fonctionnalité spécifique à un SGBD à travers les méthodes func définies dans l'API
DBI. Les développeurs de Scripts doivent noter que l'utilisation de cette
fonctionnalité au travers de ces méthodes func a de bonnes chances d'en sacrifier la
portabilité entre les différents SGDB.

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

Questions de Programmation

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

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

En un mot, oui! DBI est extrêmement utile pour la programmation CGI! En fait, je
serais tenté de répondre que la programmation CGI est une des deux principales
utilisation de DBI.

DBI confère aux programmeurs CGI la possibilité d'offrir des base de données WWW à
leurs utilisateurs, ce qui donne à ces utilisateurs la possibilité d'utiliser de
grandes quantités de données bien organisées. DBI donne aussi la possibilité , si un
site reçoit un trafic trop important pour les performances du serveur, d'améliorer
ce serveur de base de données de façon 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
requêtes clients.

En utilisant le module mod_perl Apache de Doug MacEachern, l'interpréteur perl est
inclus dans le processus fils httpd. Les modules CGI, DBI, et vos autres modules
favoris peuvent être chargés au lancement de chaque processus fils. Ces modules ne
seront pas rechargés à moins d'être modifiés sur disque.

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

    http://www.apache.org

Le module mod_perl peut être récupéré 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 à la base de
données sont enregistrées dans une table avec chacun des processus httpd fils. Si
votre application utilise une base de données simple utilisateur, cette connexion
peut être lancée avec chaque processus fils. Actuellement, les connexions à la base
de données ne peuvent pas être partagées entre processus httpd fils.

Apache::DBI peut être téléchargé 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, çà marche, mais, quand
je le lance sous httpd, çà échoue!" Pourquoi?

Fondamentalement, il y a une bonne chance que cela provienne du fait que
l'utilisateur à partir duquel vous avez lancé la ligne de commande a
un ensemble de variables d'environnement correctement configuré, ce sont, dans la
cas de DBD::Oracle, des variables telles que $ORACLE_HOME, $ORACLE_SID or TWO_TASK.

Le processus httpd s'exécute habituellement sous un utilisateur id ne correspondant
pas à un utilisateur, ce qui implique qu'il n'y a pas d'environnement configuré.
Tous scripts essayant de s'exécuter dans ces circonstances échoueront.

Pour résoudre ce problème, initialisez l'environnement de votre base de données dans
un bloc BEGIN ( ) en tête de votre script. Ceci devrait résoudre votre problème.

De même, 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 complémentaires. Il est peu
probable que ce problème concerne DBI.

Le guide ``Idiot's Guide To Solving Perl / CGI Problems'' peut être trouvé à :

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

ainsi que ``Perl CGI Programming FAQ''. Lisez ces DEUX documents très soigneusement!

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

5.1 Puis-je faire de l'exécution en parallèle avec DBI?

A la date de ce document ( voir en tête ), non. perl ne permet pas l'exécution en
parallèle. Cependant, l'exécution en parallèle doit faire partie de la distribution
perl de base à compter de la version 5.005, ce qui sous-entend que le support de
l'exécution en parallèle pour DBI devrait suivre rapidement.

Pour quelques exemples de code OCI pour Oracle ayant des instructions SELECT avec
exécution en parallèle, voir :

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

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

5.2 Comment manipuler des données BLOB avec DBI?

A écrire.

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

5.3 Comment puis-je invoquer des procédures enregistrées avec DBI?

En supposant que vous avez créé une procédure enregistrée à l'intérieur de la base
de données cible, eg, une base de données Oracle, vous pouvez utiliser $dbh->do pour
exécuter immédiatement cette procédure. Par exemple,

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

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

5.4 Comment puis-je récupérer les valeurs de retour de procédures enregistrées 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 créer ou supprimer une base de données avec DBI?

La création et la suppression de bases de données sont des concepts qui sont
beaucoup trop abstraits pour être supportés par DBI. Par exemple, Oracle ne supporte
pas le concept de détruire une base de données du tout! Ainsi, dans Oracle, le
serveur de base de données est essentiellement la base de données elle-même alors
que dans mSQL, le processus serveur s'exécute tranquillement sans aucune base de
données créée. C'est un problème trop hétérogène pour s'y attaquer.

Quelques pilotes, cependant, supportent la création et la suppression de bases de
données à travers des méthodes func privées. Il vous faut regarder dans la
documentation des pilotes que vous utilisez pour vérifier s'ils supportent de tels
mécanismes.

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

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

A écrire.

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

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

Les valeurs NULL dans DBI sont traitées comme la valeur undef. Des NULLs peuvent
être insérés dans les bases de données en tant que NULL, par exemple :

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

mais lors d'une interrogation, les NULLs devront être testés comme des undef. C'est
un standard pour tous les pilotes.

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

5.8 Qu'est-ce que c'est que ces histoires de méthodes func?

Une méthode func est définie à l'intérieur de DBI comme étant un point d'entrée pour
une fonctionnalité d'une base de données spécifique, eg, la possibilité de créer ou
supprimer des bases de données. L'invocation de ces méthodes spécifiques aux pilotes
est simple. Par exemple, pour invoquer une méthode createDatabase qui n'a qu'un seul
argument, on écrira :

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

Les développeurs de logiciels doivent cependant noter que ces méthodes 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 qualité de ces services (le traducteur non plus!). Les liens ci-dessous ne sont
indiqués qu'à titre de référence.

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

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 effectuée par la compagnie
pour laquelle Tim Bunce, auteur de DBI, travaille. Pour des informations
complémentaires sur leurs services, veuillez voir :

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

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

Formation

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

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

Autres Références

Dans cette section, on trouvera des liens WWW divers pouvant présenter un intérêt
pour les utilisateurs de DBI. Ils n'ont pas été vérifiés et peuvent mener à des
sites inconnus ou à 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 publié 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 réservés.
La permission de distribuer ce document, en entier ou en partie, via email,
Usenet, archives ftp ou http est accordée à 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 été maintenus ( Se référer 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 être effectuée auprès de Alligator Descartes
<descarte@hermetica.com>.

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


Page suivante Page précédente Table des matières