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

je veux vérifier dans un script si PostgreSQL est installé ou non sur Linux et imprimer le résultat. Des suggestions sur la façon de faire la vérification?

35
demandé sur Jonathan Leffler 2011-04-27 15:25:07

9 réponses

et la commande which ?

Si vous deviez exécuter which psql et Postgres n'est pas installé, il ne semble pas sortie. Vous obtenez juste l'invite de terminal prêt à accepter une autre commande:

> which psql
>

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

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

en regardant man which il semble aussi y avoir 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.

donc il semble que tant que le langage de script que vous utilisez can 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é. De là, vous pouvez imprimer ce résultat comme vous le souhaitez.

j'ai des postgres installés sur ma machine donc j'exécute ce qui suit

> which -s psql
> echo $?
0

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

Voici les informations sur l'utilisation de echo $?

55
répondu campo 2017-05-23 12:26:03

si elle est basée sur debian.

aptitude show postgresql | grep State

mais je suppose que vous pouvez juste essayer de le lancer avec un drapeau comme --version , qui imprime simplement quelques informations et sorties.

mise à Jour à l'aide de "service postgres d'état". Essayez:

service postgres status
if [ "$?" -gt "0" ]; then
  echo "Not installed".
else
  echo "Intalled"
fi
7
répondu Draco Ater 2011-04-27 11:55:33

Il n'y a pas de façon simple de le faire. Tout ce que vous pouvez faire est de vérifier avec le gestionnaire de paquets (rpm, dpkg) ou de sonder certains emplacements probables pour les fichiers que vous voulez. Ou vous pouvez essayer de vous connecter à un port probable (5432) et voir si vous obtenez une réponse de protocole PostgreSQL. Mais rien de tout cela va être très robuste. Vous pouvez examiner vos exigences.

5
répondu Peter Eisentraut 2011-04-27 13:31:49

il n'y a pas de façon simple de le faire, car PostgreSQL peut être installé et configuré de différentes façons:

  • installé à partir de la source dans un répertoire d'utilisateurs
  • installé à partir de la source dans /opt ou /usr/local , démarré manuellement ou démarré par un script d'initialisation
  • Installé à partir de distributeur rpm / deb packages et a commencé via le script d'initialisation
  • Installé à partir de la 3ème partie rpm / deb packages et a commencé via le script d'initialisation
  • installé à partir de paquets mais Non réglé pour démarrer
  • Client installé, se connectant à un serveur sur un autre ordinateur
  • installé et en cours d'exécution, mais pas sur le port par défaut PATH ou
  • "

Vous ne pouvez pas compter sur les psql le PATH . Vous ne pouvez pas compter sur l'existence d'un seul psql sur le système (plusieurs versions peuvent être installées de différentes façons). Vous ne pouvez pas le faire basé sur le port, car il n'y a aucune garantie qu'il soit sur le port 5432, ou qu'il n'y ait pas de versions multiples.

invite l'utilisateur et lui demande.

4
répondu Craig Ringer 2013-12-27 00:48:43

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

4
répondu Roland Shield 2016-09-05 16:08:47

aller dans le répertoire bin de Postgres db tels que /opt/postgresql/bin & exécuter la commande:

[...bin]# ./psql --version

psql (PostgreSQL) 9.0.4

voilà . .

2
répondu Finn 2013-12-26 07:20:11

et si tout le reste échoue de ce grand choix de réponses, vous pouvez toujours utiliser" trouver " comme ceci. Ou vous pourriez avoir besoin d'utiliser sudo

si vous êtes root, tapez $$> find / -name 'postgres'

si vous êtes un utilisateur, vous aurez besoin de sudo priv's pour l'exécuter à travers tous les répertoires

Je l'exécute de cette façon, à partir de la base / pour trouver le chemin entier dans lequel l'élément se trouve. Cela va retourner tous les fichiers ou répertoires avec le "postgres".

vous pouvez faire la même chose en cherchant les fichiers pg_hba.conf ou postgresql.conf .

2
répondu netfluence 2014-03-12 21:16:01

aptitude show postgresql | grep Version travaillé pour moi

1
répondu user2584621 2018-03-30 07:19:22

vous pouvez également enregistrer /opt montage dans le chemin suivant /opt/PostgresPlus/9.5AS/bin/

0
répondu vinoy vincent 2017-01-11 10:13:45