Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 19 utilisateurs en ligne, consultez le détail
Auteur Message
Jul
#0 Message posté le : 13-12-2005 à 08:10:23


Elfe


Forum : Modérateur
Association : Membre actif
Arrivé(e) le : 16-01-2003
Nombre de messages : 3699

1. Introduction ,qu'est ce postgre ? :



PostgreSQL est ce que l'on appelle un SGDB (système de gestion de base de données),est un logiciel capable d'enregistrer et conserver des informations (numérique) et de les restituer à la demande d'un utilisateur. Les concurrents de postgreSQL les plus courants sont oracle, sybase, informix, interbase etc...,mais l'avantage de PostgreSQL par rapport aux autres SGDB est sa gratuité , alors que des systèmes tel qu'oracle ne sont abordable que par de très grosse société.

PostgreSQL est toutefois un peu plus rudimentaire que ses compagnons qui possèdent énormément d'outils d'aide à l'utilisation ou développement. Il possède toutefois leurs caractéristiques principales et essentielles. Le site officiel de PostgreSQL

2. Installation :


2.1 Pré-requis :



J'ai testé postgreSQL sur Red hat 7.3, les outils nécessaires sont :
  • g++(gcc) avec iostream
  • perl avec le module dbi.
  • Python disponible sur vos cdroms
  • Readlines et zlib, disponibles sur vos cdroms
  • Avoir un compte qui ne soit pas root, dans les exemples l'utilisateur "Nico" et son mot de passe "MyPass" sont à substituer par vos propres informations de login.

2.2 Installation depuis les sources :



téléchargez les sources ici. Téléchargez la version la plus à jour. Enregistrez-la dans un dossier provisoire par ex: /tmp/postgre/. Pour décomprésser l'archive, tapez :
cd /tmp/postgre/
tar -xzvf postgresql-7.3.2tar.gz


Pour l'installer, tapez:
cd postgresql-7.3
./configure --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib --enable-syslog --enable-depend --with-gnu-ld --with-maxbackends=1024 --with-tcl --with-python --with-perl --enable-locale --enable-nls --enable-multibyte --with-CXX --enable-obdc
make
make install


Voilà le système est près à fonctionner. Vous pouvez désormais utiliser, php avec postgresql. Pour cela installez php avec les bonnes options ou les bons paquetages. Si vous utilisez php4+apache lisez ceci et si vous utilisez php5+apache2 lisez ceci.

3. Personalisation :


3.1 Préparation :



Maintenant que postgre est installé, vous devez vous assurez qu'un utilisateur postgres et un groupe postgres, existent sur votre système. Pour ce faire, tapez :
cat /etc/passwd | grep postgres


Si vous n'aviez aucune réponse, c'est que vous n'avez pas d'utilisateur postgres, vous pouvez le créer par :
groupadd postgres
useradd -g postgres -d /var/lib/postgresql postgres


Il vous reste à lui attribuer le répertoire qui contiendra les bases de données :
# mkdir -p /var/lib/postgresql
# mkdir -p /var/lib/postgresql/data
# chown -Rf postgres.postgres /var/lib/postgresql
# chmod 700 /var/lib/postgresql/data
# su - postgres -c "/usr/bin/initdb --pgdata /var/lib/postgresql/data"
# su - postgres -c "/usr/bin/pg_ctl start -D '/var/lib/postgresql/data' -s -l '/var/lib/postgresql/data/postgresql.log' -o '-N 1024 -B 2048'"


Cette fois postgresql est lancé avec les droits de l'utilisateur postgres, c'est à dire aucun. Je fournis un script, que vous placerez dans /etc/rc.d/ (slackware,Mandriva, Rh ...) ou /etc/init.d/ (debian). Rendez-le exécutable :
chmod 744 /etc/rc.d/postgresql


Désormais vous pourrez lancer postgres par : /etc/rc.d/postgresql start, le stopper par : /etc/rc.d/postgresql stop et le redémarrer par : /etc/rc.d/postgresql restart.

Si vous souhaitez, lancer postgres à l'amorçage de la machine, rajoutez simplement la ligne suivante à votre /etc/rc.d/rc.local :
/etc/rc.d/postgresql start

3.2 Gestion des utilisateurs :



Pour autoriser des utilisateurs du réseau (ou d'internet) à se connecter à votre serveur postgres, vous devez éditer le fichier /var/lib/postgresql/data/postgresql.conf, là assurez-vous d'avoir la ligne, suivante, décommentée :
tcpip_socket = true


Un peu de sécurité maintenant, éditez le fichier /var/lib/postgresql/data/pg_hba.conf :
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local all all trust
host all all 127.0.0.1 255.0.0.0 trust

Cela autorise tous les utilisateurs locaux à se connecter à la machine sans mot de passe. Commençons par mettre un mot de passe à l'utilisateur postgres :
su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD 'le_mdp_postgres'"
exit


Maintenant, modifiez /var/lib/postgresql/data/pg_hba.conf de la manière suivante :
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local all all password
host all all 127.0.0.1 255.0.0.0 password

Pour valider, vos modifs, redémarrez le serveur :
/etc/rc.d/postgresql restart
Nous allons maintenant créer un nouvel utilisateur : "Nico" avec comme mot de passe "MyPass". Vous devrez, évidemment adapter à vos besoins :
su - postgres
createuser -P
Enter name of user to add: Nico
Enter password for user "Nico":
Enter it again:
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
Mot de passe:
CREATE USER
exit


L'utilisateur Nico, est autorisé à créer de nouvelles bases de données, mais pas de nouveaux utilisateurs. A la fin un mot de passe, vous est demandé, c'est celui de postgres. CREATE USER, vous indique que l'opération s'est bien terminée.

Si vous souhaitez que les utilisateurs identifiés de votre réseau local et ou Internet, puissent accéder à votre postgre, modifiez /var/lib/postgresql/data/pg_hba.conf :
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local all all password
host all all 127.0.0.1 255.0.0.0 password
host all all 192.168.0.0 255.255.255.0 password
host all all 134.27.25.3 255.255.255.255 password

Avec ceci, vous autorisez les utilisateurs du réseau local 192.168.0.x à accéder à votre serveur sql par mot de passe, idem pour les utilisateurs de l'IP 134.27.25.3 sur Internet.

Vous pouvez définir d'autres politiques, consultez le fichier /var/lib/postgresql/data/pg_hba.conf, il est bien documenté.

3.3 Commandes de bases :



Quelques commandes d'admin, elles supposent que vous soyez logué en tant que postgre :
su - postgres


  • détruire une base de données ?
    dropdb ma_base


  • détruire un utilisateur ?
    dropuser un_utilisateur


  • la liste de toutes les bases de données créées ?
    psql template1 -c "\l"


  • les autres commandes ?
    • \? affiche les commandes disponibles
    • \l affiche la liste de toutes les bases de données
    • \d affiche la liste des tables d'une base de données
    • \z affiche la liste des permissions d'accès sur les différentes tables

  • la liste de tous les utilisateurs ?
    psql template1 -c "SELECT * from pg_user"


  • la liste de tous les utilisateurs avec leur mot de passe (en md5sum) ?
    psql template1 -c "SELECT * from pg_shadow"


  • modifier le mot de passe d'un utilisateur ?
    psql -d template1 -c "ALTER USER Nico WITH PASSWORD 'mot_de_passe'"


  • créer une base de données au nom d'un utilisateur ?
    # createdb -U user user_db


A la fin vous pouvez revenir à l'utilisateur courant par : exit

3.4 Création d'une base et d'une table de test :



maintenant que postgre est démarré, et l'utilisateur Nico créé, vous pouvez créer une base, ici testdb, par :
# createdb -U Nico testdb


-U fixe le nom de l'utilisateur à qui appartiendra la base. psql est l'utilitaire qui permet de gérer la base et ses données pour démarrer psql tapez simplement :
# psql -d testdb


vous pouvez alors exécuter toutes les requêtes sql ainsi que des instructions procédurales (PLpg/SQL), par exemple créer une table de test grâce à :
create table test

(

id integer primary key,

nom varchar(50),

prenom varchar(50)

);

Créez-vous un petit jeu de test en entrant des données grâce à l'instruction insert. N'oubliez pas, dans psql, de terminer les requêtes par ';' pour les executer. Pour sortir, c'est \q.

3.5 Exemples d'utilisation :



On peut écrire des interfaces pour postgre dans la plupart des langages tel que : C/C++, perl, java, php etc... Voici quelques exemples :

a)en php :



php nécessite le module pgsql. Mais peut être installer à la compilation de php en ajoutant "--with-pgsql" a la commande ./configure de php. Par défaut postgre nécessite une petite manip avant de pouvoir être connecté à un script php.

Grâce aux fonctions pg_pconnect, pg_ex, et pg_fetcharray et bien d'autres disponible ici Vous pouvez réaliser des accès a la db avec php.
<?

$connection = pg_pconnect("dbname=testdb user=Nico password=MyPass");//connexion

//pg_query("INSERT into test values(3,'Nico','Nico')");

//pg_query("INSERT into test values(3,'albert','einstein')");

$result = pg_query($connection, "select * from test");//execution de la requete

while ($row = pg_fetch_assoc($result)) {

echo $row['id'].' | '.echo $row['nom'].' | '.echo $row['prenom'];

}

?>

Testez ce script dans votre navigateur via votre serveur web et devrait afficher les données contenues dans la table.

b)en perl :



La connexion entre un script perl et une db postgreSQL se fait grâce au module dbi, qui est un module capable de se connecter à plusieurs types de db, les plus courants bien entendu comme oracle, mysql, sybase et autre. Sur ma distribution, Red hat, ce module est installé par défaut (consultez le site officiel, si vous ne l'avez pas)

Un script similaire a celui ci dessus, peut être aisément réalisé, à l'aide du driver adéquat (dbi:Pg pour postgre).
#!perl

use DBI;

my $db = DBI -> connect("dbi:Pg:dbname=testdb","Nico","MyPass") || die $DBI::errstr;

$req = $db->prepare("Select * from test");

$req->execute();

while (($id,$nom,$prenom)= $req->fetchrow_array())

{

print $id.' | '.$nom.' | '.$prenom."\n";

}

$db->disconnect();

enregistrez le dans un fichier test.pl ,puis tapez :
perl test.pl


Pour l'exécuter. Je considère que vous êtes dans le même répertoire que le fichier test.pl, bien-sûr, sinon c'est le chemin relatif ou absolu qu'il faut passer en paramètre à perl. Si vous êtez intéressé par le sujet, je vous conseille cet ouvrage : "Perl DBI" des édition O'Reilley, cliquez [url=http://www.oreilly.fr/catalogue/perldbi.html ]ici[/url] pour plus d'info.

c) en c++



La connexion aux db avec C++ se fait grâce à la librairie libpq++. Voici un exemple adapté a notre bd, inspiré du code "example 2-1" de cette page, que je vous invite à consulter pour de plus amples informations sur les interfaces avec c++.

Copiez le code ci-dessous dans un fichier test.cpp ,placez le dans un répertoire ou l'utilisateur de la base a le droit d'exécuter un programme(dans son dossier personnel, par exemple : /home/Nico). On suppose que vous êtes dans /home/Nico dans le shell également.

Pour compiler, tapez :
g++ -I/pgsql/include test.cpp -L/pgsql/lib -lpq++ -lpq


Puis, exécutez :
./a.out


Voici le code :
#include <iostream.h>

#include <libpq++.h>

void main()

{

PgDatabase data("dbname=testdb");

if ( data.ConnectionBad() ) {

cout << "Connection was unsuccessful..." << endl

<< "Error message returned: " << data.ErrorMessage() << endl;

return 1;

}

else

cout << "Connection successful... Enter queries below:" << endl;

// Interactively obtain and execute queries

ExecStatusType status;

string buf;

int done = 0;

while (!done)

{

cout << "> ";

cout.flush();

getline(cin, buf);

if ( buf != "" )

if ( (status = data.Exec( buf.c_str() )) == PGRES_TUPLES_OK )

data.DisplayTuples();

else

cout << "No tuples returned..." << endl

<< "status = " << status << endl

<< "Error returned: " << data.ErrorMessage() << endl;

else

done = 1;

}

return 0;

}

Le programme demande a l'utilisateur d'entrer une requête, ensuite si la requête renvoi des résultats le programme les affiche sinon affiche "No tuples returned", mais exécute la requête si celle ci est valide.

3.6 Sauvegarde d'une base de données :



Sauver une base postgreSQL peut se faire a l'aide de l'utilitaire pg_dump dans la console, logger sous l'utilisateur pour lequel pour vous voulez la base ("Nico",dans notre exemple).

Pour ce faire, tapez dans la console :
pg_dump Nico -f base.sql


Ou Nico est le nom de la base, et base.sql le fichier dans lequel vous souhaitez sauver les données. L'utilistaire pg_dump va recreer un fichier "base.sql" qui contient toutes les instructions sql qui permettront de recrée la base a partir de rien.

Ensuite pour la restaurer , logger vous simplement a psql , et taper la commande suivante :
\i base.sql


La commande \i permet simplement d'executer les instructions qui se trouver dans le fichier base.sql. Je signale également l'existence du paramètre -t NOM_TABLE passer a pg_dump qui permet de ne sauver que la table indiqué.

4. Liens utiles :


  • Le site officiel de PostgreSQL ici
  • Tutorial complet sur PostgreSQL (7.2) ici
  • La doc de nexen sur php et postgreSQL ici
  • Un article sur l'utilisation du module DBI avec perl ici




--Message édité par Jul le 13-12-2005 à 08:10:23--


-------------------------------------
Le Paradis c'est www.trustonme.net