<h2>But de ce document</h2>
<p class="spip">Ce document me sert de mémo pour installer la base de données PostgreSQL sur une Debian Sarge (Stable). Ce mémo a été testé sous Debian Sarge, mais il doit être possible de l’adapter facilement aux autres distributions Linux.</p>

<p class="spip">PostgreSQL est moins connue et moins utilisée que MySQL, pourtant cette base à des fonctionnalités très intéressantes qui la rend comparable aux bases de données commerciales comme Oracle ou DB2.</p>

<h2>Pré-requis</h2>
<p class="spip">Pour installer PostgreSQL, il faut installer une Debian Sarge de base :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=337" class="spip_out">http://www.coagul.org/article.php3 ?id_article=337</a>
<h2>Installation</h2>
<p class="spip">Paquets à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'># apt-get install postgresql postgresql-client</code></p>

<p class="spip">Lors de l’installation, l’utilisateur « <strong class="spip">  postgres </strong> » est créé automatiquement. Par défaut, le mot de passe de cet utilisateur n’est pas connu. Je conseil de lui en affecter un car cela permet de passer sous l’utilisateur « postgres » sans passer par l’utilisateur « root » :</p>

<p class="spip"><code class='spip_code' dir='ltr'># passwd postgres </code></p>

<p class="spip">Pour travailler sur la base de données, il faut commencer par se connecter sous le compte de ce nouvel utilisateur :</p>

<p class="spip"><code class='spip_code' dir='ltr'># su postgres </code></p>

<h2>psql : Interface en ligne de commande pour accéder à PostgreSQL</h2>
<p class="spip">La commande « <strong class="spip"> psql </strong> » est une interface en ligne de commandes permettant d’accéder et de manipuler une base de données PostgreSQL.</p>

<p class="spip">La commande suivante, qu’il faut toujours saisir sous le compte « <strong class="spip"> postgres </strong> », permet de se connecter à la base de données « <strong class="spip"> mabase </strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ psql mabase</code></p>

<p class="spip">Une fois dans l’interface, voici quelques commandes utiles :
<br /></p>
<li> \ ? : Donne la liste des commandes
<br /><li> \h : Donne la liste des commandes SQL
<br /><li> \h SELECT : Donne une aide sur la commande SQL SELECT
<br /><li> \l : Donne la liste des bases de données.
<br /><li> \q : Pour sortir de l’interface.
<p class="spip">La commande suivante, permet par exemple de connaître la liste des bases de données :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ psql -l</code></p>

<h2>Gestion des droits d’accès à PostgreSQL</h2>
<p class="spip">Par défaut, pour accéder à PostgreSQL, il faut se connecter sous l’utilisateur « <strong class="spip"> postgres </strong> ». Pour créer un nouvel utilisateur, il faudrait commencer par lui créer un compte sur le système, ce qui n’est peut-être pas souhaitable. Pour changer cette configuration, il faut modifier le fichier « <strong class="spip">/etc/postgresql/pg_hba.conf</strong> » et mettre « <strong class="spip"> password </strong> » à la place de « <strong class="spip"> ident</strong> <strong class="spip">sameuser </strong> » sur les deux lignes suivantes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>local  all     all                                        ident sameuser<br />
host   all     all    127.0.0.1         255.255.255.255   ident sameuser</code></div>
<p class="spip">ce qui donne :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>local  all     all                                        password<br />
host   all     all    127.0.0.1         255.255.255.255   password</code></div>
<p class="spip">Cette modification permet d’éviter de passer par des comptes du système et oblige à fournir un mot de passe à chaque connexion.</p>

<h2>Création d’un nouvel utilisateur</h2>
<p class="spip">La commande « <strong class="spip"> createuser </strong> » toujours sous le compte « postgres », permet de créer un nouvel utilisateur :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ createuser toto<br />
Le nouvel utilisateur a-t'il le droit de créer des bases de données ? (y/n) y<br />
Le nouvel utilisateur a-t'il le droit de créer des utilisateurs ? (y/n) n<br />
CREATE USER</code></div>
<p class="spip">Par défaut le nouvel utilisateur n’a pas de mot de passe et il n’est donc pas encore possible de l’utiliser. La commande suivante, permet de définir ce mot de passe :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ psql -d template1 -c "alter user toto with password 'motdepasse'" </code></p>

<p class="spip">La commande suivante, permet de vérifier que cet utilisateur est correctement reconnu :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>postgres@pgftp:/root$ psql -l -U toto<br />
Mot de passe :<br />
     Liste des bases de données<br />
    Nom    | Propriétaire | Encodage<br />
-----------+--------------+----------<br />
 template0 | postgres     | LATIN9<br />
 template1 | postgres     | LATIN9</code></div>
<h2>Création d’une base de données</h2>
<p class="spip">La commande suivante, permet de créer la base de données « <strong class="spip">mabase </strong> » pour l’utilisateur « <strong class="spip"> toto </strong> » en utilisant l’encodage « <strong class="spip"> UNICODE </strong> » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ createdb -O toto -E UNICODE mabase<br />
CREATE DATABASE</code></div>
<h2>Affectation d’un mot de passe pour l’utilisateur postgres </h2>
<p class="spip">L’utilisateur « postgres est le super-utilisateur de la base de données PostgreSQL. Il est donc important de lui donner un mot de passe, car par défaut celui-ci n’en pas.</p>

<p class="spip">Pour créer ce mot de passe, nous allons utiliser la commande « psql » présenté au chapitre précédent :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ psql -d mabase -c "ALTER USER postgres WITH PASSWORD 'LeMotDePasse'" </code></p>

<p class="spip">Remarque 1 : Le mot de passe de l’utilisateur système de postgres (créé à l’installation) peut-être différent du mot de passe de l’utilisateur postgres de la base de données.</p>

<p class="spip">Remarque 2 : Pour faire fonctionner les clients Web ou les clients graphiques présentés aux chapitres suivant, il est obligatoire de définir un mot de passe pour « postgres »</p>

<h2>PhpPgAdmin : Interface Web pour accéder à PostgreSQL</h2>
<p class="spip">Dans le même style que le célèbre « <strong class="spip"> phpmyadmin </strong> », il existe « <strong class="spip"> phppgadmin </strong> » pour manipuler une base de données PostgreSQL à partir d’une interface web en php.</p>

<p class="spip">Avant d’installer « <strong class="spip"> phppgadmin </strong> », il est nécessaire d’avoir un serveur Web+PHP opérationnel.</p>

<p class="spip">Pour installer apache et php, vous pouvez vous aider de ce mémo :
<br /></p>
<li> <a href="http://www.coagul.org/article_imprime.php3?id_article=169" class="spip_out">http://www.coagul.org/article_imprime.php3 ?id_article=169</a>
<p class="spip">Paquet à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'># apt-get install phppgadmin</code></p>

<p class="spip">Remarque pour que le site soit accessible, j’ai dû reconfigurer le paquet avant de pouvoir l’utiliser (Lors de cette configuration, il faut lui indiquer le serveur Web à utiliser) :</p>

<p class="spip"><code class='spip_code' dir='ltr'># dpkg-reconfigure phppgadmin</code></p>

<h3>Accès en local</h3>
<p class="spip">Si vous avez un navigateur Web installé sur le serveur, vous pouvez saisir l’adresse suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>http://localhost/phppgadmin/</code></p>

<h3>Accès depuis le réseau</h3>
<p class="spip">Pour pouvoir accéder à l’interface depuis un autre poste du réseau, il est nécessaire d’autoriser l’accès en modifiant le fichier « <strong class="spip">/etc/apache/conf.d/phppgadmin</strong> ». Pour cela, il faut ajouter après la ligne « <strong class="spip">deny </strong><strong class="spip">from</strong><strong class="spip"> </strong><strong class="spip">all</strong> », une ou plusieurs lignes pour indiquer un masque de sous-réseau ou les adresses des postes autorisés.</p>

<p class="spip">Pour autoriser deux postes, il faut ajouter les adresses IP de ceux-ci :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>allow from 192.168.0.1<br />
allow from 192.168.0.2</code></div>
<p class="spip">Pour autoriser un sous réseau, il faut ajouter une ligne de ce type :</p>

<p class="spip"><code class='spip_code' dir='ltr'>allow from 192.168.0.0/255.255.255.0</code></p>

<p class="spip">Pour finir, il faut redémarrer le serveur « apache » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/apache restart</code></p>

<p class="spip">Enfin, il est possible avec le navigateur des postes autorisés d’accéder au serveur à l’adresse suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>http://AdresseIPduServeur/phppgadmin/</code></p>

<h3>Autoriser le login « postgres »</h3>
<p class="spip">Pour des raisons de sécurité, le login « <strong class="spip"> postgres </strong> » n’est pas autorisé à accéder à la base de données via « <strong class="spip"> phppgadmin </strong> ». Pour l’autoriser, il faut modifier le fichier « <strong class="spip">/etc/phppgadmin/config.inc.php</strong> ». Dans ce fichier, il faut mettre « <strong class="spip">false</strong> » à la ligne suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$conf['extra_login_security']  = false</code></p>

<p class="spip">Il faut également ajouter l’adresse ip locale sur la ligne suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$conf['servers'][0]['host'] = '127.0.0.1';</code></p>

<h2>Liens pour avoir plus d’informations</h2>
<p class="spip">Le site francophone de PostgreSQL : <a href="http://www.postgresqlfr.org/" class="spip_out">http://www.postgresqlfr.org/</a></p>

<p class="spip">Une documentation sur linux-france : <a href="http://www.linux-france.org/article/serveur/psql/" class="spip_out">http://www.linux-france.org/article/serveur/psql/</a></p>

<p class="spip">Un article que j’ai trouvé intéressant : <a href="http://trustonme.net/didactels/183.html" class="spip_out">http://trustonme.net/didactels/183.html</a></p>

<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>26/07/05</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.3</td><td>28/03/06</td><td>Mise à jour suite à nouvelle installation</td></tr>
</tbody>
</table>