====== Installation PostGreSQL 16 ======
== Environnement: ==
* VM Rocky Linux 9
* 8 GB RAM
* FS:
* Binaires: /u01 =>10GB
* Datafiles: /u02 => 15GB
* WAL: /u07 => 5GB
== Préparation des FS ==
[root@postgre1 ~]# pvcreate /dev/xvdb
[root@postgre1 ~]# pvcreate /dev/xvdc
[root@postgre1 ~]# pvcreate /dev/xvde
[root@postgre1 ~]# vgcreate vg_u01 /dev/xvdb
[root@postgre1 ~]# vgcreate vg_u02 /dev/xvdc
[root@postgre1 ~]# vgcreate vg_u07 /dev/xvde
[root@postgre1 ~]# lvcreate -n lv_u01 -l 100%VG vg_u01
[root@postgre1 ~]# lvcreate -n lv_u02 -l 100%VG vg_u02
[root@postgre1 ~]# lvcreate -n lv_u07 -l 100%VG vg_u07
[root@postgre1 ~]# mkfs -t xfs /dev/vg_u01/lv_u01
[root@postgre1 ~]# mkfs -t xfs /dev/vg_u02/lv_u02
[root@postgre1 ~]# mkfs -t xfs /dev/vg_u07/lv_u07
[root@postgre1 ~]# mkdir /u01
[root@postgre1 ~]# mkdir /u02
[root@postgre1 ~]# mkdir /u07
[root@postgre1 ~]# vi /etc/fstab
## PostGreSQL FS ##
/dev/vg_u01/lv_u01 /u01 xfs defaults 0 0
/dev/vg_u02/lv_u02 /u02 xfs defaults 0 0
/dev/vg_u07/lv_u07 /u07 xfs defaults 0 0
[root@postgre1 ~]# mount -a
[root@postgre1 ~]# chown postgres:postgres -R /u01/ /u02/ /u07/
== Installation: ==
* ajout du repos
[root@postgre1 ~]# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Dernière vérification de l’expiration des métadonnées effectuée il y a 0:41:03 le lun. 05 janv. 2026 13:45:38.
pgdg-redhat-repo-latest.noarch.rpm 125 kB/s | 13 kB 00:00
Dépendances résolues.
==============================================================================================================================================================================================================
Paquet Architecture Version Dépôt Taille
==============================================================================================================================================================================================================
Installation:
pgdg-redhat-repo noarch 42.0-63.rhel9PGDG @commandline 13 k
Résumé de la transaction
==============================================================================================================================================================================================================
Installer 1 Paquet
Taille totale : 13 k
Taille des paquets installés : 18 k
Téléchargement des paquets :
Test de la transaction
La vérification de la transaction a réussi.
Lancement de la transaction de test
Transaction de test réussie.
Exécution de la transaction
Préparation : 1/1
Installation : pgdg-redhat-repo-42.0-63.rhel9PGDG.noarch 1/1
Vérification de : pgdg-redhat-repo-42.0-63.rhel9PGDG.noarch 1/1
Installé:
pgdg-redhat-repo-42.0-63.rhel9PGDG.noarch
Terminé !
[root@postgre1 ~]# dnf update
Dernière vérification de l’expiration des métadonnées effectuée il y a 0:03:31 le lun. 05 janv. 2026 14:27:42.
Dépendances résolues.
Rien à faire.
Terminé !
[root@postgre1 ~]# dnf list postgresql16-server
Dernière vérification de l’expiration des métadonnées effectuée il y a 2:13:52 le lun. 05 janv. 2026 14:44:04.
Paquets installés
postgresql16-server.x86_64 16.11-1PGDG.rhel9 @pgdg16
* création user postgres
[root@postgre1 ~]# groupadd postgres
[root@postgre1 ~]# useradd -g postgres -G postgres -d /home/postgres -m postgres
[root@postgre1 ~]# chown postgres:postgres -R /u01/ /u02/ /u07/
* ajout variables environnement custom
[root@postgre1 ~]# vi /home/postgres/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
# Postgres ENV Variables
export PGDATA=/u01/pgsql/data
* installation du moteur
[root@postgre1 ~]# dnf install postgresql16-server
Dernière vérification de l’expiration des métadonnées effectuée il y a 2:12:03 le lun. 05 janv. 2026 14:44:04.
Dépendances résolues.
==============================================================================================================================================================================================================
Paquet Architecture Version Dépôt Taille
==============================================================================================================================================================================================================
Installation:
postgresql16-server x86_64 16.11-1PGDG.rhel9 pgdg16 6.8 M
Installation des dépendances:
postgresql16 x86_64 16.11-1PGDG.rhel9 pgdg16 1.8 M
postgresql16-libs x86_64 16.11-1PGDG.rhel9 pgdg16 336 k
Résumé de la transaction
==============================================================================================================================================================================================================
Installer 3 Paquets
Taille totale des téléchargements : 8.9 M
Taille des paquets installés : 40 M
Voulez-vous continuer ? [o/N] : o
Téléchargement des paquets :
(1/3): postgresql16-libs-16.11-1PGDG.rhel9.x86_64.rpm 1.9 MB/s | 336 kB 00:00
(2/3): postgresql16-16.11-1PGDG.rhel9.x86_64.rpm 8.8 MB/s | 1.8 MB 00:00
(3/3): postgresql16-server-16.11-1PGDG.rhel9.x86_64.rpm 12 MB/s | 6.8 MB 00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 16 MB/s | 8.9 MB 00:00
PostgreSQL 16 for RHEL / Rocky Linux / AlmaLinux 9 - x86_64 2.4 MB/s | 2.4 kB 00:00
Import de la clef GPG 0x08B40D20 :
Utilisateur : « PostgreSQL RPM Repository »
Empreinte : D4BF 08AE 67A0 B4C7 A1DB CCD2 40BC A2B4 08B4 0D20
Provenance : /etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL
Voulez-vous continuer ? [o/N] : o
La clé a bien été importée
Test de la transaction
La vérification de la transaction a réussi.
Lancement de la transaction de test
Transaction de test réussie.
Exécution de la transaction
Préparation : 1/1
Installation : postgresql16-libs-16.11-1PGDG.rhel9.x86_64 1/3
Exécution du scriptlet: postgresql16-libs-16.11-1PGDG.rhel9.x86_64 1/3
Installation : postgresql16-16.11-1PGDG.rhel9.x86_64 2/3
Exécution du scriptlet: postgresql16-16.11-1PGDG.rhel9.x86_64 2/3
Exécution du scriptlet: postgresql16-server-16.11-1PGDG.rhel9.x86_64 3/3
Installation : postgresql16-server-16.11-1PGDG.rhel9.x86_64 3/3
Exécution du scriptlet: postgresql16-server-16.11-1PGDG.rhel9.x86_64 3/3
Vérification de : postgresql16-16.11-1PGDG.rhel9.x86_64 1/3
Vérification de : postgresql16-libs-16.11-1PGDG.rhel9.x86_64 2/3
Vérification de : postgresql16-server-16.11-1PGDG.rhel9.x86_64 3/3
Installé:
postgresql16-16.11-1PGDG.rhel9.x86_64 postgresql16-libs-16.11-1PGDG.rhel9.x86_64 postgresql16-server-16.11-1PGDG.rhel9.x86_64
Terminé !
[root@postgre1 ~]#
== Initialisation du moteur dans un répertoire custom ==
Ce script permet de générer le dictionnaire et les vues système
[postgres@postgre1 ~]$ mkdir -p /u01/pgsql/data
[postgres@postgre1 ~]$ /usr/pgsql-16/bin/initdb -D /u01/pgsql/data
== Démarrage automatique ==
[root@postgre1 ~]# vi /usr/lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog
# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
# ... but allow it still to be effective for child processes
# (note that these settings are ignored by Postgres releases before 9.5)
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0
# Maximum number of seconds pg_ctl will wait for postgres to start. Note that
# PGSTARTTIMEOUT should be less than TimeoutSec value.
Environment=PGSTARTTIMEOUT=270
Environment=PGDATA=/u01/pgsql/data
ExecStart=/usr/pgsql-16/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT}
ExecStop=/usr/pgsql-16/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/pgsql-16/bin/pg_ctl reload -D ${PGDATA} -s
# Give a reasonable amount of time for the server to start up/shut down.
# Ideally, the timeout for starting PostgreSQL server should be handled more
# nicely by pg_ctl in ExecStart, so keep its timeout smaller than this value.
TimeoutSec=300
[Install]
WantedBy=multi-user.target
[root@postgre1 ~]# systemctl daemon-reload
[root@postgre1 ~]# systemctl enable postgresql
[root@postgre1 ~]# systemctl start postgresql
== Paramétrage du moteur ==
* personnalisation conf
[root@postgre1 ~]# vi /u01/pgsql/data/postgresql.conf
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
[...]
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
[root@postgre1 ~]# systemctl restart postgresql
[root@postgre1 ~]# ll /u01/pgsql/data/log/
total 8
-rw-------. 1 postgres postgres 778 16 janv. 16:27 postgresql-2026-01-16_162757.log
-rw-------. 1 postgres postgres 1957 16 janv. 16:27 postgresql-Fri.log
== Ouverture port 5432 sur le firewall ==
[root@postgre1 ~]# firewall-cmd --add-port=5432/tcp --permanent
success
[root@postgre1 ~]# firewall-cmd --reload
success
[root@postgre1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enX0
sources:
services: cockpit dhcpv6-client ssh
ports: 5432/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
== Ouverture accès au client sur le moteur ==
Pour qu'un client accède à l'instance, il est nécessaire de le référencer dans $PGDATA/pg_hba.conf