PostGreSQL est une base de données relationnelle objet, DBMS ( définition wikipedia ), libre, très riche en terme de fonctionnalités, très avancée, parfaitement stable, convenant donc pour des bases importantes.
Commençons par installer les paquets nécessaires à l'aide d'Aptitude :
|
sudo aptitude
install postgresql-8.1
|
Suivant le cas ces paquets supplémentaires vont être automatiquement installés : libpq4 postgresql-8.1 postgresql-client-8.1 postgresql-client-common postgresql-common ssl-cert.
Les messages affichés lors de l'installation et de la configuration nous donnent déjà des indications précieuses :
|
Paramétrage
de postgresql-common (66) ...
adduser : Attention : ce répertoire personnel n'appartient pas à l'utilisateur que vous êtes en train de créer. Ajout de l'utilisateur « postgres » au groupe « ssl-cert »... Terminé. Paramétrage de postgresql-8.1 (8.1.5-1) ... Creating new cluster (configuration: /etc/postgresql/8.1/main, data: /var/lib/postgresql/8.1/main)... Moving configuration file /var/lib/postgresql/8.1/main/postgresql.conf to /etc/postgresql/8.1/main... Moving configuration file /var/lib/postgresql/8.1/main/pg_hba.conf to /etc/postgresql/8.1/main... Moving configuration file /var/lib/postgresql/8.1/main/pg_ident.conf to /etc/postgresql/8.1/main... Configuring postgresql.conf to use port 5432... Starting PostgreSQL 8.1 database server: main. |
L'installation de postgresql a donc automatiquement créé un nouvel user : postgres.
Qu'en est-il de ce nouvel utilisateur postgres ? par sécurité, root ne peut pas se connecter en standard sur postgresql, il faudra donc s'identifier sous ce nouvel user pour gérer.
|
:~$ cat /etc/group
|grep postgres
ssl-cert:x:114:postgres postgres:x:115: :~$ sudo cat /etc/passwd |grep postgres postgres:x:108:115:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash :~$ sudo cat /etc/shadow |grep postgres postgres:!:13463:0:99999:7::: |
Ces trois commandes nous montrent que les groupes et l'user postrges ont bien été créés, mais que le nouvel user n'as pas de mot de passe. Par précaution on va lui en attribuer un :
|
:~$ sudo passwd
postgres
Enter new UNIX password: votre_pass Retype new UNIX password: votre_pass passwd : le mot de passe a été mis à jour avec succès :~$ sudo cat /etc/shadow |grep postgre postgres:$1$KSnJ8TBM$6tx2wKJ3RjiHPiC/Q5HQh/:13463:0:99999:7::: |
l'utilisateur postgres a maintenant un mot de passe.
Il faut aussi modifier le fichier pg_hba.conf pour simplifier et sécuriser la création de futurs users postgresql. On édite le fichier de configuration par la commande :
|
:~$ sudo nano -w -B
-m /etc/postgresql/8.1/main/pg_hba.conf
|
et on remplace ident
sameuser par md5
(configuration mot de passe) pour avoir :
|
. . .
local all postgres md5 # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 |
On a vu que pour gérer postgresql on ne le ferait pas en root mais avec l'utilisateur postgres. On se connecte donc sous cet user pour la suite :
|
:~$ su - postgres
Password: postgres@phusin:~$
|
Maintenant on peut créer un nouvel user pour postgresql avec la commande createuser, qui est une commande propre à postgresql ( voir le man ). Le nouvel user postgreql n'est pas un user du système d'exploitation mais peut avoir le même nom pour simplifier :
|
postgres@phusin:~$
createuser cep
Le nouvel rôle est-t'il un superutilisateur ? (y/n) n Le nouvel rôle doit-il être autorisé à créer des bases de données ? (y/n) y Le nouvel rôle doit-il être autorisé à créer de nouveaux rôles ? (y/n) n CREATE ROLE |
L'utilisateur cep n’a pas de mot de passe, il n’est donc pas encore opérationnel. On lui attribue un mot de passe :
|
postgres@phusin:~$
psql -d template1 -c "alter user cep with password 'votre_mot_pass'"
ALTER ROLE |
On peut aussi faire une nouvelle base pour l'user cep, avec comme nom de base cepbase1 :
|
postgres@phusin:~$
createdb -O cep -E UTF8 cepbase1
CREATE DATABASE |
Pour terminer, comme l'user postgres est un super user de postgresql, on va lui attribuer un mot de passe, toujours avec la commande générique psql :
|
postgres@phusin:~$
psql -d postgres -c "ALTER USER postgres WITH PASSWORD 'mot_pass'"
ALTER ROLE
|
On peut lister les bases et users par la commande psql -l :
|
postgres@phusin:~$
psql -l
Liste des bases de données Nom | Propriétaire | Encodage -----------+--------------+---------- cepbase1 | cep | UTF8 postgres | postgres | UTF8 template0 | postgres | UTF8 template1
| postgres | UTF8
|
La première partie de la configuration est terminée. On va donc relancer postgresql afin que les modifications soient prises en compte, en particulier les demandes de mots de passe. Pour cela on utilise su ou on déconnecte l'user postgres pour utiliser sudo :
|
cep@phusin:~$ sudo
/etc/init.d/postgresql-8.1 restart
Password: Restarting
PostgreSQL 8.1 database server: main.
|
On vérifie le fonctionnement :
|
cep@phusin:~$ psql
-l -U cep
Mot de passe pour l'utilisateur cep : Liste des bases de données Nom | Propriétaire | Encodage -----------+--------------+---------- cepbase1 | cep | UTF8 postgres | postgres | UTF8 template0 | postgres | UTF8 template1
| postgres | UTF8
(4 lignes) |
Le mot de passe est bien demandé. Pour l'exemple on pourrait créer une table avec les commandes :
|
cep@phusin:~$ psql
cepbase1
Mot de passe : Bienvenue dans psql 8.1.5, l'interface interactive de PostgreSQL. Tapez: \copyright pour les termes de distribution \h pour l'aide-mémoire sur les commandes SQL \? pour l'aide-mémoire sur les commandes psql \g ou terminez avec un point-virgule pour exécuter une requête \q pour quitter cepbase1=> CREATE TABLE jours ( cepbase1(> mois varchar(80), cepbase1(> unités int, -- chiffre mois cepbase1(> temps int, -- météo cepbase1(> date date cepbase1(> ); CREATE TABLE cepbase1=> INSERT INTO jours VALUES ( 'dimanche', n11, vent, '2006-11-12'); cepbase1-> \d jours Table «public.jours» Colonne | Type | Modificateurs ---------+-----------------------+--------------- mois | character varying(80) | unités | integer | temps | integer | date
|
date
|
|
Pour gérer postgresql avec une interface graphique, il est aussi possible d'installer pgadmin3 et / ou phppgadmin.
Concernant phppgadmin, après l'avoir installé ( de même que apache2 et php4 si necessaire ), il faudra éditer le fichier /etc/phppgadmin/apache.conf pour autoriser la connexion depuis certaines IP ou une plage d'IP, comme par exemple :
|
# allow from IP
allow from 192.168.1.10 |
Ensuite pour que tout fonctionne, il faudra reconfigurer phppgadmin et php4-pgsql, et relancer apache2 :
|
:~$ sudo
dpkg-reconfigure phppgadmin
selectionner Apache2 :~$ sudo dpkg-reconfigure php4-pgsql :~$ sudo /etc/init.d/apache2 restart |
Quelques liens utiles :
http://docs.postgresqlfr.org/
http://docs.postgresqlfr.org/8.1/
http://docs.postgresqlfr.org/8.1/admin.html
http://www.pgadmin.org/?locale=fr_FR
En annexe, quelques copies d'écrans de pgadmin3 et phppgadmin