Red Hat et dérivées version SERVEUR

Red Hat, Alma Linux : Installer et configurer un serveur de base de données PostgreSQL (8 et 9)

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

postgresql-logo



Introduction



Dans cet article, nous allons voir comment mettre en place un serveur de base de données PostgreSQL sur RedHat Enterprise Linux 8 ou 9 (la procédure est identique.
Les manipulations proposées sont valides pour les dérivées de RHEL telles qu'Alma Linux, Rocky Linux ou Oracle Linux.

Sélection de la version souhaitée via les modules



Dans EL 8, par défaut, PostgreSQL est proposé en version 10.
Dans EL 9, par défaut, PostgreSQL est proposé en version 13.

Il est possible, sur EL 8 d'utiliser PostgreSQL 9.6, 12 et 13.

Pour EL 8 :

Listez les modules PostgreSQL disponibles :

Code BASH :
dnf module list postgresql


Code TEXT :
Name          Stream    Profiles              Summary                              
postgresql    9.6       client, server [d]    PostgreSQL server and client module  
postgresql    10 [d]    client, server [d]    PostgreSQL server and client module  
postgresql    12        client, server [d]    PostgreSQL server and client module  
postgresql    13        client, server [d]    PostgreSQL server and client module  
 
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled


Désactivez le module 10 :

Code BASH :
dnf module disable postgresql:10


Activez le module 13 par exemple :

Code BASH :
dnf module enable postgresql:13



Installation des prérequis



On va installer les 2 paquets qui vont nous fournir le serveur de base de données et les clients en ligne de commande :

Code BASH :
 dnf install postgresql-server postgresql


Configuration des services




Initialisation du moteur de base de données



On initialise le moteur de base de données :

Code BASH :
postgresql-setup --initdb


Code :
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log


Il reste maintenant à activer et démarrer le service postgres :

Code BASH :
systemctl enable --now postgresql.service


On peut tester la connexion :

Code BASH :
su -lc 'psql' postgres


Pour vérifier le bon fonctionnement, on pourra lister les utilisateurs par exemple :

Code SQL :
\du



Fichier de configuration my.cnf



Le fichier de configuration de PostgreSQL est /var/lib/pgsql/data/postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici /var/lib/pgsql/data/pg_hba.conf

Configurer un accès distant



Dans le cas d'un serveur PostgreSQL mutualisé, les applications ne seront pas sur le serveur de base de données.

Dans un premier temps, on va autoriser dans le pare-feu le protocole postgresql (port 5432) (ici si la zone de l'interface est public) et on recharge ce dernier :

Code BASH :
firewall-cmd --permanent --zone=public --add-service=postgresql
firewall-cmd --reload


On va également paramétrer le service PostgreSQL afin qu'il écoute sur toutes les adresses.
On va modifier le fichier /var/lib/pgsql/data/postgresql.conf et décommenter bind-address :

Code BASH :
vi /var/lib/pgsql/data/postgresql.conf


Code TEXT :
listen_addresses = '*'


On redémarre ensuite le service :

Code BASH :
systemctl restart postgresql


Ensuite, il nous reste à créer des utilisateurs qui pourront se connecter à distance.
Voici un exemple de commande CREATE USER avec l'utilisateur "adrien" :

Code SQL :
CREATE USER adrien WITH PASSWORD 'MotDePasse';


Pour donner des droits sur une base de données, c'est la commande GRANT, exemple ici avec les pleins droits sur la base baseadrien pour l'utilisateur adrien précédemment créé :

Code SQL :
GRANT ALL PRIVILEGES ON DATABASE baseadrien TO adrien;


On va gérer aussi les droits sur les utilisateurs dans le fichier /var/lib/pgsql/data/pg_hba.conf :

Code BASH :
vi /var/lib/pgsql/data/pg_hba.conf


Pour autoriser les connexions de adrien sur la base baseadrien depuis le réseau 192.168.21.0/24 :
Code TEXT :
host    baseadrien             adrien             192.168.21.0/24              md5


Et on recharge la config du serveur :

Code BASH :
su -lc 'psql -c "SELECT pg_reload_conf()'' postgres


Testons les accès, depuis la machine cliente concernée sur le serveur précédemment installé (exemple depuis ma machine 192.168.21.200 ) :

Code BASH :
psql -h 192.168.221.53 -d baseadrien -U adrien 


On peut lister les bases de données :

Code TEXT :
adrien=> \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 adrien    | postgres | UTF8     | fr_FR.utf8 | fr_FR.utf8 | =Tc/postgres         +
           |          |          |            |            | postgres=CTc/postgres+
           |          |          |            |            | adrien=CTc/postgres
 adrien2   | postgres | UTF8     | fr_FR.utf8 | fr_FR.utf8 | 
 postgres  | postgres | UTF8     | fr_FR.utf8 | fr_FR.utf8 | 
 template0 | postgres | UTF8     | fr_FR.utf8 | fr_FR.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | fr_FR.utf8 | fr_FR.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(5 rows)


On voit bien en changeant de base que je n'y ai pas accès :

Code TEXT :
adrien=> \c adrien2
connection to server at "192.168.221.53", port 5432 failed: FATAL:  aucune entrée dans pg_hba.conf pour l'hôte « 192.168.221.53 », utilisateur « adrien »,
base de données « adrien2 », SSL inactif
Previous connection kept
 



Plus d'informations sur PostgreSQL



Un guide des commandes de base est disponible ici : https://www.linuxtricks.fr/wiki/postgresql-memo-des-commandes-sql