Dans certaines circonstances, PostgreSQL peut laisser des ressources « permanentes » occupées sur le serveur aprés un violent problème (ou un redémarrage). Ces ressources sont des IPC (Inter Process Communication) et peuvent se manifester sous deux formes :

  • de la mémoire partagée (shm), utilisée essentiellement par PostgreSQL en fonction de la variable d'environnement shared_buffers
  • des sémaphores

Pour récupérer une liste des ressources, lancer la commande « ipcs » en tant qu'utilisateur root ou postgres. Cette commande liste l'ensemble des ressources IPC utilisées sur la machine. Vous obtiendrez une liste similaire à celle-ci :

[root@serveur root]# ipcs

------ Segments de mémoire partagée --------
touche shmid propriétaire perms octets nattch statut
0x0052e2c1 0 postgres 600 288038912 10

------ Tables de sémaphores --------
touche semid propriétaire perms nsems statut
0x0052e2c1 0 postgres 600 17
0x0052e2c2 32769 postgres 600 17
0x0052e2c3 65538 postgres 600 17

------ Files d'attente de messages --------
touche msqid propriétaire perms octets utilisés messages

Si PostgreSQL n'est pas lancé et que des ressources demeurent allouées vous pouvez les libérer avec la commande « ipcrm » en tant que root ou postgresql.

  • Pour les sémaphores : « ipcrm sem <semid> »
  • Pour la mémoire partagée : « ipcrm shm <shmid> »

Attention ! Assurez-vous de bien vérifier qu'aucun processus postgres ne soit lancé (postmaster notamment).