Как я могу проверить, установлен PostgreSQL или нет с помощью скрипта Linux? - PullRequest
45 голосов
/ 27 апреля 2011

Я хочу проверить в скрипте, установлен PostgreSQL или нет в Linux, и распечатать результат. Любые предложения о том, как сделать проверку?

Ответы [ 10 ]

64 голосов
/ 05 апреля 2013

Как насчет попытки ввода команды which?

Если вы запустили which psql, а Postgres не установлен, то, похоже, ничего не выводится. Вы просто получаете приглашение терминала принять другую команду:

> which psql
>

Но если Postgres установлен, вы получите ответ с указанием пути к месту установки Postgres:

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

Глядя на man which, кажется, есть вариант, который может вам помочь:

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

Таким образом, кажется, что любой используемый вами язык сценариев может выполнять команду терминала, которую вы можете отправить which -s psql, и использовать возвращаемое значение, чтобы определить, установлен ли Postgres. Оттуда вы можете распечатать этот результат, как вам нравится.

На моем компьютере установлены postgres, поэтому я запускаю следующее

> which -s psql
> echo $?
0

, который сообщает мне, что команда вернула 0, указывая, что исполняемый файл Postgres был найден на моей машине.

Вот информация об использовании echo $?

8 голосов
/ 27 апреля 2011

Если он основан на Debian.

aptitude show postgresql | grep State

Но я думаю, вы можете просто попробовать запустить его с каким-нибудь флагом, например --version, который просто печатает некоторую информацию и завершается. Обновлено с использованием «статуса службы postgres».Попробуйте:

service postgres status
if [ "$?" -gt "0" ]; then
  echo "Not installed".
else
  echo "Intalled"
fi
5 голосов
/ 27 апреля 2011

Нет простого способа сделать это. Все, что вы можете сделать, это проверить с помощью менеджера пакетов (rpm, dpkg) или проверить некоторые возможные места для файлов, которые вы хотите. Или вы можете попытаться подключиться к вероятному порту (5432) и посмотреть, получите ли вы ответ протокола PostgreSQL. Но все это не будет очень надежным. Возможно, вы захотите пересмотреть свои требования.

4 голосов
/ 05 сентября 2016

Если вы используете Debian Linux (или производную) и если у вас положительное возвращение с > which psql, просто введите psql -V (заглавная "V"), и вы получите ответ, подобный: psql (PostgreSQL) 9.4.8

4 голосов
/ 27 декабря 2013

Нет простого способа сделать это, потому что PostgreSQL может быть установлен и настроен разными способами:

  • Установлен из источника в домашнем каталоге пользователя
  • Установлениз источника в /opt или /usr/local, запускается вручную или запускается сценарием инициализации
  • Устанавливается из пакетов дистрибьютора rpm / deb и запускается через сценарий инициализации
  • Устанавливается из 3-гоparty rpm / deb пакетов и запускается через сценарий инициализации
  • Установлен из пакетов, но не установлен для запуска
  • Клиент установлен, подключается к серверу на другом серверекомпьютер
  • Установлен и работает, но не по умолчанию PATH или по умолчанию порт

Нельзя полагаться на psql на PATH.Вы не можете полагаться на то, что в системе есть только один psql (несколько версий могут быть установлены по-разному).Вы не можете сделать это в зависимости от порта, поскольку нет гарантии, что он находится на порту 5432 или что нет нескольких версий.

Запрашивает у пользователя запрос и спрашивает его.

3 голосов
/ 13 марта 2014

И если все остальное терпит неудачу из-за этого большого выбора ответов, вы всегда можете использовать «найти» вот так. Или вам может понадобиться использовать sudo

Если вы root, просто наберите $$> find / -name 'postgres'

Если вы пользователь, вам понадобятся sudo priv для запуска всех каталогов

Я запускаю его таким образом, из базы /, чтобы найти полный путь, в котором находится элемент. Это вернет все файлы или каталоги с "postgres" в нем.

Вы можете сделать то же самое, посмотрев файлы pg_hba.conf или postgresql.conf.

2 голосов
/ 30 марта 2018

aptitude show postgresql | grep Version работал для меня

2 голосов
/ 08 января 2013

Перейдите в каталог bin postgres db, например, /opt/postgresql/bin и выполните следующую команду:

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

psql (PostgreSQL) 9.0.4

Вот, пожалуйста..

0 голосов
/ 07 ноября 2018

В течение многих лет я использовал команду:

ps aux | grep postgres

С одной стороны, это полезно (для любого процесса) и дает полезную информацию (но из процесса POV).Но, с другой стороны, он предназначен для проверки, работает ли уже известный вам сервер, который вы установили.

В какой-то момент я обнаружил этот учебник , где используется Команда показана.Похоже, что эта команда гораздо важнее для этого случая.

0 голосов
/ 11 января 2017

Вы также можете проверить /opt монтировать по следующему пути /opt/PostgresPlus/9.5AS/bin/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...