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)

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



Avec les dépôts de la distribution



C'est la méthode la plus simple, si vous n'avez pas de besoins complexes (comme par exemple des modules spécifiques).

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, 13 et 15.
Il est possible, sur EL 9 d'utiliser PostgreSQL 13 et 15.

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 
postgresql    15        client, server [d]    PostgreSQL server and client module 
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled


Si on veut utiliser une autre version que la version 10, on va activer le module adéquat.

Par exemple, pour postgresql 15 :

Code BASH :
dnf module switch-to postgresql:15


Avec les dépôts de Postgre



Il est possible également d'installer Postgres depuis les dépôts officiels.

Pour cela, on va installer le dépôt de postgres :

Code BASH :
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %rhel)-x86_64/pgdg-redhat-repo-latest.noarch.rpm



Installation de PostgreSQL



Depuis les dépôts de la distribution



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


Depuis les dépôts Postgre



On va installer les paquets correspondants, en spécifiant le numéro de version souhaité dans le nom du paquet.

Pour plus de simplicité dans ce tuto on va définir une variable avec la version de postgre souhaitée :

Code BASH :
PGVER="14"


Désactivez le module postgres du système :

Code BASH :
dnf -y module disable postgresql


Ensuite on installe Postgres :

Code BASH :
dnf install postgresql$PGVER-server



Configuration des services



Initialisation du moteur de base de données



On initialise le moteur de base de données.

Si on a installé depuis les dépôts de la distribution :
Code BASH :
postgresql-setup --initdb


Si on a installé depuis les dépôts postgre :
Code BASH :
/usr/pgsql-$PGVER/bin/postgresql-$PGVER-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.

Si on a installé depuis les dépôts de la distribution :
Code BASH :
systemctl enable --now postgresql.service


Si on a installé depuis les dépôts postgre :
Code BASH :
systemctl enable --now postgresql-$PGVER.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


Changer le mot de passe de postgres



Il est possible de changer le mot de passe de l'utilisateur postgres (apr défaut sur postgres) :

Code BASH :
su -lc 'psql' postgres


Et on change le mot de passe avec la commande suivante :

Code SQL :
\password postgres



Fichiers de configuration



Le fichier de configuration de PostgreSQL est postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici pg_hba.conf.

Si l'installation a été faite depuis les dépôts de la distribution, les fichiers sont situés dans : /var/lib/pgsql/data/
Si l'installation a été faite depuis les dépôts de postgre, les fichiers sont situés dans : /var/lib/pgsql/$PGVER/data/

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 postgresql.conf et décommenter bind-address :

Code TEXT :
listen_addresses = '*'


Ne pas oublier de redémarrer le service.

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 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
Cette page a été vue 4496 fois