97 votes

Comment puis-je vérifier si PostgreSQL est installé ou non via le script de Linux ?

Je veux vérifier dans un script si PostgreSQL est installé ou non sur Linux et imprimer le résultat. Avez-vous des suggestions sur la manière de procéder à cette vérification ?

0 votes

Que voulez-vous dire par "PostgreSQL est installé" ? Le client Pgsql ? Bibliothèques du client ? Serveur Pgsql ?

0 votes

Voir aussi ces commandes BASH génériques : stackoverflow.com/a/677212/1736679

132voto

campo Points 1096

Et si vous essayiez le which commande ?

Si tu devais exécuter which psql et que Postgres n'est pas installé, il ne semble pas y avoir de sortie. Vous obtenez juste l'invite du terminal prête à accepter une autre commande :

> which psql
>

Mais si Postgres est installé, vous obtiendrez une réponse contenant le chemin d'accès à l'emplacement de l'installation de Postgres :

> which psql
/opt/boxen/homebrew/bin/psql

Regarder man which il semble également exister une option qui pourrait vous aider :

-s      No output, just return 0 if any of the executables are found, or
        1 if none are found.

Il semble donc que tant que le langage de script que vous utilisez peut exécuter une commande de terminal, vous pouvez envoyer which -s psql et utiliser la valeur de retour pour déterminer si Postgres est installé. À partir de là, vous pouvez imprimer ce résultat comme vous le souhaitez.

J'ai installé postgres sur ma machine et j'exécute la commande suivante

> which -s psql
> echo $?
0

qui me dit que la commande a retourné 0, indiquant que l'exécutable Postgres a été trouvé sur ma machine.

Voici les informations sur l'utilisation de echo $?

2 votes

La seule option which a pour moi est -a (imprimer tous les chemins d'accès correspondants à chaque argument), ce qui donne une option illégale si j'utilise -s .

0 votes

Hey @Dennis Je ne suis pas sûr de vos motivations, mais je pense que dans l'esprit de ma réponse originale, vous pourriez probablement faire quelque chose en utilisant le drapeau -a. S'il n'y a pas de sortie, vous pouvez supposer qu'il n'est pas installé, et s'il y a une sortie, vous savez qu'il est (et où) installé parce que vous obtenez le chemin en retour. Faites-moi savoir si cela vous aide ou si vous avez d'autres idées.

0 votes

Le problème avec which est qu'elle varie beaucoup d'un système d'exploitation à l'autre. Mais vous avez raison de dire que le -a peut être utilisé, vous pouvez même ne pas utiliser de drapeau du tout : if which foo >/dev/null; then echo exists; fi . Un autre problème est que cette méthode ne recherche que dans votre PATH.

39voto

Chandan Sharma Points 1420

Nous pouvons simplement écrire :

psql --version

la sortie montre comme :

psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)

0 votes

Ce qui vous dira seulement si psql est installé, et non pas si le serveur est installé (et il signale que l'option psql et non la version d'un serveur potentiellement installé)

9voto

Draco Ater Points 8468

Si elle est basée sur Debian.

aptitude show postgresql | grep State

Mais j'imagine que vous pouvez essayer de le lancer avec un drapeau tel que --version qui imprime simplement quelques informations et sort.

Mise à jour de en utilisant "service postgres status". Essayez :

service postgres status
if [ "$?" -gt "0" ]; then
  echo "Not installed".
else
  echo "Intalled"
fi

0 votes

Il est à noter que cette commande ne fonctionne que sur la famille des distros Linux basées sur Debian.

1 votes

N'a pas fonctionné, aucune commande trouvée, je connais la commande service posrgres status mais comment vérifier le résultat

0 votes

Je ne l'ai pas installé, donc le message "posrgres : unrecognized service" s'est affiché.

6voto

Craig Ringer Points 72371

Il n'existe pas de méthode simple et unique pour le faire, car PostgreSQL peut être installé et configuré de nombreuses manières différentes :

  • Installé à partir des sources dans le répertoire personnel d'un utilisateur
  • Installé à partir des sources dans /opt ou /usr/local , lancé manuellement ou lancé par un init script.
  • Installé à partir du distributeur rpm / deb et lancé via init script.
  • Installé depuis une tierce partie rpm / deb et lancé via init script.
  • Installé à partir de paquets mais no prêt à démarrer
  • Client installé, se connectant à un serveur sur un autre ordinateur
  • Installé et en cours d'exécution, mais pas sur le système par défaut PATH ou le port par défaut

Vous ne pouvez pas compter sur psql être sur le PATH . Vous ne pouvez pas compter sur le fait qu'il n'y ait qu'une seule psql sur le système (plusieurs versions peuvent être installées de différentes manières). Vous ne pouvez pas le faire en vous basant sur le port, car il n'y a aucune garantie qu'il soit sur le port 5432 ou qu'il n'y ait pas plusieurs versions.

Invitez l'utilisateur et demandez-lui.

5voto

Roland Shield Points 59

Si vous utilisez Debian Linux (ou un dérivé) et si vous avez un retour positif avec > which psql puis tapez simplement psql -V (majuscule "V") et vous obtiendrez un retour comme : psql (PostgreSQL) 9.4.8

0 votes

Je suppose que cela indique seulement que le client psql existe et non le serveur comme l'a précisé l'OP dans son commentaire. De plus, la version du client psql peut ne pas correspondre à celle du serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X