PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 28/03/2022 18:29:28

[Résolu] Problème avec le service Postgresql sur Debian 11

Bonjour,


J'espère ne pas me tromper de section afin d'exposer mon problème.


J'ai un serveur perso chez moi avec Debian 11 (totalement à jour) et Postgresql 13.

J'ai installé sur ce serveur quelques applications qui utilisent postgresql (Nextcloud, Wallabag, ..) et je développe aussi un peu de SQL depuis mes pc clients sur mon LAN.

Le soucis est que lorsque je dois redémarrer mon serveur pour une raison X ou Y, mon instance postgresql n'est pas accessible immédiatement après le boot.


je précise que j'ai bien entendu enable le service avec ces 2 commandes :

    sudo systemctl enable postgresql

    sudo update-rc.d postgresql enable


rien à y faire, après un reboot mon instance n'est pas accessible par mes applications ou par moi-même lorsque je veux développer. DBeaver me renvoie cette erreur par exemple :

     Connection to server_ip:port refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.


La seule chose que j'ai a faire pour pouvoir rendre mon instance accessible est

    sudo systemctl restart postgresql


Mon fichier start.conf présent dans /etc/postgresql/13/main/ est bien remplie avec la valeur "auto".


Et lorsque je reboot mon serveur et que je controle juste après le statut du service postgres j'ai ça en retour :


    postgresql.service - PostgreSQL RDBMS
         Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
         Active: active (exited) since Mon 2022-03-28 12:48:30 CEST; 2min 10s ago
         Process: 958 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
         Main PID: 958 (code=exited, status=0/SUCCESS)
         CPU: 1ms


Il faut que je "restart" le service pour que mes applications (et moi-même) puissent accéder à mes bases.


Je ne sais vraiment pas ou chercher, et je tourne en ronds depuis quelques semaines.


Merci d'avance pour l'aide que vous pourrez m'apporter.

Dernière modification par GrosJambon33000 (29/03/2022 09:46:41)

Hors ligne

#2 28/03/2022 18:52:54

dverite
Membre

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

Le plus probable est que l'adresse réseau ne soit pas encore montée quand postgres démarre dans le contexte d'un boot, et donc il n'écoute pas dessus. Il faudrait regarder le log serveur (/var/log/postgresql/postgresql-13-main.log juste après un boot, si c'est ça il y aura des messages d'erreur à ce sujet.

Hors ligne

#3 28/03/2022 19:16:41

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

dverite a écrit :

Le plus probable est que l'adresse réseau ne soit pas encore montée quand postgres démarre dans le contexte d'un boot, et donc il n'écoute pas dessus. Il faudrait regarder le log serveur (/var/log/postgresql/postgresql-13-main.log juste après un boot, si c'est ça il y aura des messages d'erreur à ce sujet.

Merci de votre réponse.


Voici le contenu des logs suite à un reboot du serveur :


    2022-03-28 19:12:49.937 CEST [789] LOG:  a reçu une demande d'arrêt rapide
    2022-03-28 19:12:49.968 CEST [789] LOG:  annulation des transactions actives
    2022-03-28 19:12:49.969 CEST [789] LOG:  processus en tâche de fond « logical replication launcher » (PID 809) a quitté avec le code de sortie 1
    2022-03-28 19:12:49.972 CEST [804] LOG:  arrêt en cours
    2022-03-28 19:12:50.133 CEST [789] LOG:  le système de base de données est arrêté
    2022-03-28 19:13:11.771 CEST [792] LOG:  démarrage de PostgreSQL 13.5 (Debian 13.5-0+deb11u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
    2022-03-28 19:13:11.772 CEST [792] LOG:  en écoute sur IPv4, adresse « 127.0.0.1 », port 5432
    2022-03-28 19:13:11.816 CEST [792] LOG:  n'a pas pu lier IPv4 à l'adresse « 192.168.1.2 » : Ne peut attribuer l'adresse demandée
    2022-03-28 19:13:11.816 CEST [792] ASTUCE :  Un autre postmaster fonctionne-t'il déjà sur le port 5432 ?
            Sinon, attendez quelques secondes et réessayez.
    2022-03-28 19:13:11.817 CEST [792] ATTENTION:  n'a pas pu créer le socket d'écoute pour « 192.168.1.2 »
    2022-03-28 19:13:11.819 CEST [792] LOG:  écoute sur la socket Unix « /var/run/postgresql/.s.PGSQL.5432 »
    2022-03-28 19:13:11.896 CEST [805] LOG:  le système de bases de données a été arrêté à 2022-03-28 19:12:50 CEST
    2022-03-28 19:13:11.977 CEST [792] LOG:  le système de bases de données est prêt pour accepter les connexions


Merci d'avance pour votre aide.

Hors ligne

#4 28/03/2022 21:12:55

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

si je modifie mon fichier pg_hba.conf pour lui retirer la ligne :


    # IPv4 local connections:
    host    all             all             127.0.0.1/32            md5


et que je laisse uniquement les lignes concernant l'IP local de mon serveur ainsi que les clients locaux, cela peut régler le soucis ?


EDIT : j'ai commenté la ligne dans le fichier cela n'a pas arrangé le soucis.

Dernière modification par GrosJambon33000 (28/03/2022 21:30:25)

Hors ligne

#5 28/03/2022 21:40:32

dverite
Membre

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

Cette erreur ressemble effectivement à ce que je supposais en #2:

2022-03-28 19:13:11.816 CEST [792] LOG:  n'a pas pu lier IPv4 à l'adresse « 192.168.1.2 » : Ne peut attribuer l'adresse demandée
    2022-03-28 19:13:11.816 CEST [792] ASTUCE :  Un autre postmaster fonctionne-t'il déjà sur le port 5432 ?
            Sinon, attendez quelques secondes et réessayez.
    2022-03-28 19:13:11.817 CEST [792] ATTENTION:  n'a pas pu créer le socket d'écoute pour « 192.168.1.2 »

dans le postgresql.conf, il doit y avoir une déclaration du style:

  listen_addresses = 127.0.0.1,192.168.1.2

Ca dit à postgres d'écouter sur ces deux interfaces réseau. Le problème est que si 127.0.0.1 est bien accessible dès que postgres démarre au boot, 192.168.1.2 ne l'est pas.


Ca devrait pouvoir être corrigé, soit
1) de la manière la plus simple en mettant

listen_addresses = * 

à la place. Le problème est que s'il y a d'autres interfaces réseau sur la machine, notamment ouvertes sur Internet, pour la sécurité c'est mauvais. Le reste du monde peut joindre votre instance postgres au lieu que ce soit limité à votre réseau local.


2) d'une manière plus compliquée mais plus sûre en forçant postgres à attendre que les interfaces soient prêtes via systemd, sans changer listen_addresses.  Il y a une réponse ici qui va dans ce sens:
https://stackoverflow.com/questions/622 … ot-systemd

Hors ligne

#6 28/03/2022 21:44:34

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

dverite a écrit :

Cette erreur ressemble effectivement à ce que je supposais en #2:

2022-03-28 19:13:11.816 CEST [792] LOG:  n'a pas pu lier IPv4 à l'adresse « 192.168.1.2 » : Ne peut attribuer l'adresse demandée
    2022-03-28 19:13:11.816 CEST [792] ASTUCE :  Un autre postmaster fonctionne-t'il déjà sur le port 5432 ?
            Sinon, attendez quelques secondes et réessayez.
    2022-03-28 19:13:11.817 CEST [792] ATTENTION:  n'a pas pu créer le socket d'écoute pour « 192.168.1.2 »

dans le postgresql.conf, il doit y avoir une déclaration du style:

  listen_addresses = 127.0.0.1,192.168.1.2

Ca dit à postgres d'écouter sur ces deux interfaces réseau. Le problème est que si 127.0.0.1 est bien accessible dès que postgres démarre au boot, 192.168.1.2 ne l'est pas.


Ca devrait pouvoir être corrigé, soit
1) de la manière la plus simple en mettant

listen_addresses = * 

à la place. Le problème est que s'il y a d'autres interfaces réseau sur la machine, notamment ouvertes sur Internet, pour la sécurité c'est mauvais. Le reste du monde peut joindre votre instance postgres au lieu que ce soit limité à votre réseau local.


2) d'une manière plus compliquée mais plus sûre en forçant postgres à attendre que les interfaces soient prêtes via systemd, sans changer listen_addresses.  Il y a une réponse ici qui va dans ce sens:
https://stackoverflow.com/questions/622 … ot-systemd

effectivement, je viens de voir ça dans le postgresql.conf.

Et si j'enlève 127.0.0.1 dans la conf et que je laisse uniquement l'IP locale de mon serveur à savoir 192.168.1.2 ?


EDIT : je viens de tester et Postgresql ne démarre carrément pas du tout...

Dernière modification par GrosJambon33000 (28/03/2022 21:46:10)

Hors ligne

#7 28/03/2022 22:08:24

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

dverite a écrit :

2) d'une manière plus compliquée mais plus sûre en forçant postgres à attendre que les interfaces soient prêtes via systemd, sans changer listen_addresses.  Il y a une réponse ici qui va dans ce sens:
https://stackoverflow.com/questions/622 … ot-systemd

je viens de tester en rajoutant les 2 lignes :


    Wants=network-online.target
    After=network.target network-online.target


dans le fichier ./etc/systemd/system/multi-user.target.wants/postgresql.service dans la section [unit] mais toujours le même soucis au reboot du serveur.

Dernière modification par GrosJambon33000 (28/03/2022 22:08:38)

Hors ligne

#8 28/03/2022 22:33:24

dverite
Membre

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

Et si j'enlève 127.0.0.1 dans la conf et que je laisse uniquement l'IP locale de mon serveur à savoir 192.168.1.2 ?

Ca enlève celle qui répond et ça garde celle qui ne répond pas (enfin pas tout de suite) donc effectivement ça ne peut pas marcher.

Encore une fois, si le serveur est protégé de l'extérieur,  listen_addresses=* serait OK.


Concernant systemd, je viens d'essayer et comme prévu c'est moins simple. Effectivement  faire le changement dans postgresql.service ne semble pas marcher pour moi non plus.

Sur Debian/Ubuntu l'unité systemd postgresql est en fait un lanceur et pas le service lui-même.
La vraie unité est générée pour chaque instance suivant le modèle dans /lib/systemd/postgresql@.service

Si dans la section [Unit] de ce fichier j'ajoute

After=network-online.target

ça semble marcher pour moi avec une interface DHCP.  Ceci sur un portable Ubuntu 18.04 qui a les mêmes packages Postgres que Debian à peu de choses près, donc que je pense que ce serait pareil sur Debian. A confirmer.

Hors ligne

#9 29/03/2022 09:46:18

Re : [Résolu] Problème avec le service Postgresql sur Debian 11

Bonjour,


Le soucis à l'air réglé. J'ai été modifié le fichier postgresql@.service dans :


    var/lib/systemd/system


j'avais déja cette ligne présente :


    After=network.target


que j'ai transformé sur vos conseils en :


    After=network-online.target


Merci pour votre aide.

Hors ligne

Pied de page des forums