Installation de PostgreSQL

Il existe plusieurs manières d'installer PostgreSQL. Sur notre environnement de TP basé sur Ubuntu 20.04, la manière recommandée est de passer par les dépots PostgreSQL pour apt.

Nous allons donc installer notre serveur de cette manière :

  • Commençons par mettre à jour la liste des paquets apt
apt update
  • Installer quelques dépendances nécessaires au reste des étapes
apt -y install vim bash-completion wget lsb-release gnupg2
  • Enregistrer la clé du dépot apt en provenance de postgresql.org
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
  • Ajouter le dépot à la liste des dépots aps
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee  /etc/apt/sources.list.d/pgdg.list

Ce dépot contient le serveur PostgreSQL, le client, les librairies de développement et quelques outils périphériques

  • Mettre à jour apt à nouveau, pour obtenir la liste des paquets dans le dépot nouvellement ajouté
  • Enfin, installer PostgreSQL
apt install -y postgresql-13 postgresql-client-13

Le serveur est maintenant installé, nous pouvons le démarrer et l'arrêter avec la commande service

  • Afficher l'état du serveur
service postgresql status
  • Démarrer le serveur
service postgresql start
  • Arrêter le serveur
service postgresql stop

pg_ctlcluster est un autre outil permet de démarrer / arrêter l'instance, ainsi que de réaliser quelques actions très spécifiques à PostgreSQL (comme la promotion d'un serveur standby par exemple)

pg_ctlcluster prend en argument la version de l'instance, son nom et une action. Pour trouver ces informations on peut utiliser la command pg_lsclusters

pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
13  main    5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
  • Démarrer le serveur avec pg_ctlcluster
pg_ctlcluster 13 main start
  • On peut vérifier que le serveur est bien démarré avec la commande ps. Profitons en pour constater la présence des sous-process de PostgreSQL.
ps fax

pg_lsclusters nous indique également deux informations utiles :

  • le répertoire de données : /var/lib/postgresql/13/main
  • l'emplacement du fichier de logs : /var/log/postgresql/postgresql-13-main.log

  • Afficher les logs du serveur

tail -500f /var/log/postgresql/postgresql-13-main.log
  • Se rendre dans le répertoire de données du serveur
cd /var/lib/postgresql/13/main

Attention, nous sommes encore connectés en root, il est très fortement recommandé de passer sur l'utilisateur postgres avant de faire une quelconque manipulation autre que nécessitant les droits root

  • Passer sur l'utilisateur postgres
su - postgres

On note au passage que le répertoire utilisateur de postgres est /var/lib/postgresql

postgres@03668c4e1013:~$ pwd
/var/lib/postgresql

Dans ce répertoire on retrouve par convention :

  • Un répertoire par version installée de PostgreSQL
  • Dans chacun de ces répertoires, un répertoire par instance installée

  • Profitons en pour nous familiariser avec les fichiers et répertoires qui constituent le répertoire de données d'une instance PostgreSQL

cd 13/main/
ls -ltra
ls pg_wal/
ls base/
ls global/
cat PG_VERSION
  • La configuration de l'instance peut se trouver dans ce répertoire mais on la trouve plus souvent dans /etc/postgresql
ls -l /etc/postgresql/13/main/
less /etc/postgresql/13/main/postgresql.conf
less /etc/postgresql/13/main/pg_hba.conf
  • Notre visite est terminée, nous pouvons nous connecter à l'instance.
psql