Installation de PostgreSQL

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

L’installation de PostgreSQL sur Debian m’a réservé quelques surprises…​ Plus précisément, il y a quelques différences entre la doc qui traite surtout de l’installation depuis les sources et l’installation par les dépôts. C’est donc pour ça que j’ai fait cette page.

Debian

Installation

Debian propose une version par défaut de PostgreSQL, mais le fournisseur de la base de données propose ses propres dépôts, permettant de choisir sa version.

J’ai installé PostgreSQL 9.3 sur Debian 8 (Jessie) :

touch /etc/apt/sources.list.d/pgdg.list
echo "deb link:http://apt.postgresql.org/pub/repos/apt/[http://apt.postgresql.org/pub/repos/apt/] jessie-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - link:https://www.postgresql.org/media/keys/ACCC4CF8.asc[https://www.postgresql.org/media/keys/ACCC4CF8.asc] | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.3

Le package client est installé automatiquement. Par contre, la base ne peut pas encore être démarrée, il faut d’abord initialiser sont cluster (répertoire de données).

Cluster

Pour cela il ne faut pas utiliser directement initdb, mais pg_createcluster. Dans un premier temps, la commande a échoué à cause d’une incohérence dans ma configuration le locale. J’ai donc du la réinitialiser au préalable (l’option --locale aurait peut-être été suffisante).

dpkg-reconfigure locales
pg_createcluster 9.3 main

Le cluster est maintenant créé dans /var/lib/postgresql/9.3/main/, avec ses fichiers de configuration dans /etc/postgresql/9.3/main/. Les autres commandes pour les clusters sont pg_lsclusters (liste des clusters), pg_dropcluster et pg_ctlcluster.

Il reste à démarrer la base (sur le port 5432) :

/etc/init.d/postgresql start

User et Database

On utilise le client en ligne de commande psql :

su -postgres
psql

On crée ensuite l’utilisateur avec son mot de passe et sa base de données :

postgres=# CREATE USER myuser WITH PASSWORD 'mypwd';
postgres=# CREATE DATABASE mydb OWNER myuser;

Dorénavant, je peux me connecter à cette base de données :

psql -h 127.0.0.1 -d mydb -U myuser

Pour pouvoir se connecter sans préciser le host, il faut modifier la ligne concernant la connexion local dans le fichier /etc/postgresql/9.3/main/pg_hba.conf, et passer sa connexion de peer (utilisation des credentials système) à md5 (utilisation d’un mot de passe) :

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer

devient

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     md5

Dans la configuration par défaut, aucune connexion distante n’est acceptée. Il est possible de les autoriser, ou d’utiliser plus simplement un tunnel SSH :

 ssh -L 65432:localhost:5432 -f sysuser@myserver -N