Postgresql est puissant gestionnaire de base de données, mais le démarrage de cet outil pose parfois certains problèmes. Je vais expliquer comment les résoudre.
Il s'agit en premier de sélectionner le paquet qui convient. Dans Fedora le paquet 'postgresql' donnera seulement le client. Il faut donc installer le paquet 'postgresql-server', ce qui provoquera par entrainement l'installation du paquet 'postgresql'. Je procède en ligne de commande (dans un terminal):
mifel@fedora:~$ sudo dnf install postgresql-server
Puis
mifel@fedora:~$ sudo /usr/bin/postgresql-setup --initdb
mifel@fedora:~$ sudo systemctl start postgresql
mifel@fedora:~$ sudo systemctl enable postgresql
mifel@fedora:~$
Ensuite je passe à l'étape de la création d'un utilisateur postgresql.
Seul l'utilisateur postgres peut créer un nouvel utilisateur. Le problème est de devenir pour un temps postgres:
mifel@fedora:~$ sudo su postgres
[sudo] Mot de passe de mifel :
bash-5.2$ whoami
postgres
bash-5.2$ createuser -d -r michel
bash-5.2$ exit
exit
mifel@fedora:~$
Le retour de la commande whoami montre bien que je suis devenu postgres. En tant que tel, je crée l'utilisateur michel, qui peut créer des bases de données et d'autres utilisateurs. Puis je redeviens mifel.
Je tente ensuite de créer la base de données bd01:
mifel@fedora:~$ createdb bd01
createdb: erreur : la connexion au serveur sur le socket « /var/run/postgresql/.s.PGSQL.5432 » a échoué : FATAL: le rôle « mifel » n'existe pas
mifel@fedora:~$ createdb bd01 -U michel
createdb: erreur : la connexion au serveur sur le socket « /var/run/postgresql/.s.PGSQL.5432 » a échoué : FATAL: authentification peer échouée pour l'utilisateur « michel »
mifel@fedora:~$
Le plus simple aurait été bien sûr de créer mifel lorsque j'étais postgres. Mais comme mifel n'existe pas dans postgresql, il faut qu'il puisse se connecter en tant que michel. Je modifie en conséqence le fichier /var/lib/pgsql/data/pg_hba.conf (par exemple avec sudo nano /var/lib/pgsql/data/pg_hba.conf):
# "local" is for Unix domain socket connections only
local all all peer map=map01
# IPv4 local connections:
host all all 127.0.0.1/32 ident map=map01
# IPv6 local connections:
host all all ::1/128 ident map=map01
(en rouge, ce qui a été ajouté)
De même à la fin du fichier /var/lib/pgsql/data/pg_ident.conf, j'ajoute les lignes qui définissent map01:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
map01 postgres postgres
map01 mifel michel
map01 mifel titi
Pour finir je redémarre posgresql:
mifel@fedora:~$ sudo systemctl restart postgresql
[sudo] Mot de passe de mifel :
mifel@fedora:~$
Je peux maintenant créer la base de données bd01 et l'utilisateur titi.
En images:
Utilisant psql, je me connecte à bd01 en tant que titi:
Toutes les connexions ont été jusqu'à présent effectuées via le socket unix. Mais dans le cas d'une connexion via la boucle locale, le processus d'authentification s'effectue avec ident comme indiqué dans le fichier pg_hba.conf.
Pour tester je force psql à passer par la boucle locale:
mifel@fedora:~$ psql -h localhost bd01 titi
psql: erreur : la connexion au serveur sur « localhost » (::1), port 5432 a échoué : FATAL: Échec de l'authentification Ident pour l'utilisateur « titi »
mifel@fedora:~$
Ça ne fonctionne plus !
En fait il faut installer oidentd:
mifel@fedora:~$ sudo dnf install oidentd
Puis
mifel@fedora:~$ sudo systemctl start oidentd.socket
mifel@fedora:~$ sudo systemctl enable oidentd.socket
mifel@fedora:~$
Et maintenant ça fonctionne:
Dans un prochain article je traiterai des connexions depuis un poste client situé sur une autre machine.