PostgreSQL install

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Distribution RHEL / CentOS
Paquets postgresql postgresql-server postgresql-contrib
Init instance service postgresql initdb
Config $PGDATA/postgresql.conf, $PGDATA/pg_hba.conf
Voir aussi PostgreSQL · PostgreSQL debian · Psql

Installation et configuration de base d'une instance PostgreSQL sur RHEL/CentOS (paquets système, initialisation, accès réseau et ACL), suivi de quelques tâches d'exploitation courantes une fois l'instance en service.

Installation

Selon la version de la distribution, soit via le groupe de paquets, soit paquet par paquet :

# Installation via groupe de paquets (CentOS 5/6)
yum groupinstall "PostgreSQL Database"

# Ou paquet par paquet
yum install postgresql postgresql-server postgresql-contrib postgresql-docs

L'installation crée un compte système dédié postgres (jamais de connexion directe par mot de passe root/sudo pour l'exploitation courante — on bascule avec su - postgres).

Initialisation de l'instance

service postgresql initdb
chkconfig postgresql on

# Distributions récentes (systemd)
systemctl enable --now postgresql

Configuration réseau et authentification

Deux fichiers, dans le répertoire de données de l'instance (souvent /var/lib/pgsql/data/ ou /var/lib/pgsql/<version>/data/ selon la version) :

# postgresql.conf
listen_addresses = '*'
port = 5432
password_encryption = on
# pg_hba.conf — TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD

# connexions locales (socket Unix)
local   all   all                        peer

# IPv4, exemple
host    all   all   127.0.0.1/32         trust
host    all   all   192.168.1.0/24       md5
host	all	  all	10.20.4.0/24         md5

trust n'exige aucune authentification (à réserver aux tests locaux/labo) ; peer vérifie que l'utilisateur OS correspond au rôle PostgreSQL ; md5 (ou scram-sha-256 sur les versions récentes, plus robuste) exige un mot de passe — c'est la méthode à privilégier dès qu'on ouvre l'accès réseau.

Après modification :

service postgresql restart
# ou, pour ne recharger que pg_hba.conf sans couper les connexions en cours :
su - postgres -c "pg_ctl reload"

Vérification de la connexion

psql -h 127.0.0.1 -U postgres --password

Erreur fréquente si le fichier pg_hba.conf n'autorise que peer/trust en local et qu'on se connecte via -h (donc en TCP) :

psql: FATAL:  Ident authentication failed for user "postgres"

→ ajouter une ligne host avec méthode md5 pour l'adresse utilisée, puis recharger la configuration.

Premier test

su - postgres
createdb test
psql test
CREATE ROLE testuser WITH SUPERUSER LOGIN PASSWORD 'mot_de_passe';

Pour la suite (création de rôles/bases au quotidien, méta-commandes), voir Psql.

Tablespaces

Un tablespace associe un nom logique à un emplacement disque, utile pour répartir les données sur plusieurs volumes/FS :

CREATE TABLESPACE tablespace_name
  OWNER user_name
  LOCATION '/chemin/vers/repertoire';

Exploitation

Localiser la configuration et les logs en cours

Une fois connecté, l'instance elle-même sait où se trouvent ses fichiers actifs — plus fiable que de deviner le chemin :

SHOW log_destination;
SHOW syslog_facility;
SHOW syslog_ident;
SHOW logging_collector;
SHOW data_directory;
SHOW log_directory;
SHOW log_filename;
locate pg_log

Démarrage / arrêt manuel

En dehors du service système, utile en dépannage ou pour une instance non enregistrée comme service :

/usr/pgsql-9.4/bin/pg_ctl -D /var/lib/pgsql/9.4/data -l logfile start
/usr/pgsql-9.4/bin/pg_ctl -D /var/lib/pgsql/9.4/data -l logfile stop

(chemins d'exemple pour une installation multi-version via les paquets postgresql<X.Y>-server du dépôt PGDG — à adapter à la version réellement installée.)

Désactiver IPv6 (si nécessaire)

vi /etc/sysctl.conf
# net.ipv6.conf.all.disable_ipv6 = 1
sysctl -p

(à vérifier selon le contexte) : ce réglage désactive IPv6 pour tout le système, pas seulement pour PostgreSQL — à n'appliquer que si c'est vraiment l'intention (ex. éviter que listen_addresses = '*' n'ouvre aussi une écoute en IPv6 non souhaitée) ; sinon, restreindre plutôt listen_addresses ou le pare-feu.

Voir aussi

  • PostgreSQL — panorama général
  • PostgreSQL debian — administration avancée (Debian, pgbouncer, multi-instances)
  • Psql — client CLI, création de bases/rôles, méta-commandes
  • Pg dump — sauvegarde et restauration