web-dev-qa-db-fra.com

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

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? 

39

Pourquoi ne pas essayer la commande which?

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

> which psql
>

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

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

En regardant man which, il semble également 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.

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é. De là, vous pouvez imprimer ce résultat comme bon vous semble.

J'ai postgres installé sur ma machine, donc je lance le programme suivant

> 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 $?

57
campo

Si c'est basé sur Debian.

aptitude show postgresql | grep State

Mais je suppose que vous pouvez simplement essayer de le lancer avec un drapeau comme --version, qui affiche simplement des informations et des sorties.

Mise à jour utilisant "service postgres status". Essayer:

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

Il n'y a pas de moyen simple de faire cela. Tout ce que vous pouvez faire est de vérifier avec le gestionnaire de paquets (rpm, dpkg) ou de rechercher des emplacements probables pour les fichiers souhaités. Vous pouvez également essayer de vous connecter à un port probable (5432) et voir si vous obtenez une réponse au protocole PostgreSQL. Mais rien de tout cela ne va être très robuste. Vous voudrez peut-être revoir vos besoins.

5
Peter Eisentraut

Si vous utilisez Debian Linux (ou une version dérivée) et que vous avez un retour positif avec > which psql, tapez simplement psql -V ("V" en majuscule) et vous obtiendrez un retour du type: psql (PostgreSQL) 9.4.8 .

4
Roland Shield

Il n'y a pas de moyen simple et simple de le faire, car PostgreSQL peut être installé et configuré de différentes manières:

  • Installé à partir de la source dans un répertoire personnel de l'utilisateur
  • Installé à partir de la source dans /opt ou /usr/local, démarré manuellement ou démarré par un script init
  • Installé à partir des packages du distributeur rpm/deb et démarré via le script init
  • Installé à partir de packages rpm/deb tiers et démarré via le script init
  • Installé à partir de paquets mais pas défini pour démarrer
  • Client installé, connexion à un serveur sur un autre ordinateur
  • Installé et en cours d'exécution mais pas sur la valeur par défaut PATH ou par défaut

Vous ne pouvez pas compter sur psql pour être sur la PATH. Vous ne pouvez pas compter sur la présence d'une seule psql sur le système (plusieurs versions peuvent être installées de différentes manières). Vous ne pouvez pas le faire sur le port, car rien ne garantit qu'il est sur le port 5432 ou qu'il n'y a pas plusieurs versions.

Demander à l'utilisateur et leur demander.

4
Craig Ringer

Et si tout le reste échoue à partir de ce grand choix de réponses, vous pouvez toujours utiliser "trouver" comme ceci. Ou vous devrez peut-être utiliser Sudo 

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

Si vous êtes un utilisateur, vous aurez besoin de Sudo priv pour l'exécuter dans tous les répertoires. 

Je l’exécute de cette façon, à partir de la base / pour trouver le chemin complet dans lequel se trouve l’élément. Cela renverra tous les fichiers ou répertoires contenant le "postgres".

Vous pouvez faire la même chose en recherchant les fichiers pg_hba.conf ou postgresql.conf également.

3
netfluence

Accédez au répertoire bin de la base de données PostgreSQL tel que /opt/postgresql/bin et exécuter ci-dessous la commande: 

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

psql (PostgreSQL) 9.0.4

Voici . .

2
Finn

aptitude show postgresql | grep Version a travaillé pour moi

1
user2584621

Pendant de nombreuses années, j'ai utilisé la commande: 

ps aux | grep postgres

D'une part, il est utile (pour tout processus) et donne des informations utiles (mais à partir du processus POV). Mais d’autre part, c’est pour vérifier si le serveur que vous connaissez déjà installé est en cours d’exécution.

À un moment donné, j'ai trouvé ce tutoriel , où l'utilisation de la commande localiser est indiquée. Il semble que cette commande est beaucoup plus pertinente pour ce cas.

0
johnniepop

Vous pouvez également enregistrer /opt mount dans le chemin suivant /opt/PostgresPlus/9.5AS/bin/

0
vinoy vincent