Какую версию PostgreSQL я использую?

1027

Я нахожусь в корпоративной среде (использую Debian Linux) и не установил его сам. Я получаю доступ к базам данных с помощью Navicat или phpPgAdmin (если это помогает). У меня также нет доступа к серверу, на котором работает база данных.

Очень нерегулярный
источник

Ответы:

1646

Запустите этот запрос из PostgreSQL:

SELECT version();
Очень нерегулярный
источник
4
Нет результата в моем случае в терминале на Ubuntu
Тимо
23
@Timo, это запрос для запуска через PostgreSQL. Это можно сделать через pgAdmin или любой другой механизм для выполнения запроса. Вы пытались запустить его из оболочки Ubuntu? (это не сработает)
Сильно нерегулярно
41
Это также можно psql -c 'SELECT version();'
запустить
3
Вы можете запустить прямо из bash, указав postgres db, как psql postgres -c 'SELECT version();'
показано ниже
22
@Frank H. Использование: sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQLдолжно пройти мимо вас "роль" имя пользователя "не существует".
Маркус Юний Брут
550

Я считаю, что это то, что вы ищете,

Версия сервера:

pg_config --version

Версия клиента:

psql --version
Тим Бюте
источник
1
Спасибо! Это работает, когда доступ к оболочке доступен. К сожалению, в моем случае у меня нет такого доступа; Я обновил вопрос.
Сильно нерегулярный
3
Иногда версия клиента - это то, что вы хотите знать в любом случае.
Trejkaz
12
Как отмечает Фрэнк, это может быть обманчиво. psql будет подключаться к любому запущенному процессу базы данных postmaster / postgres, и ядро ​​базы данных может отличаться от версии psql.
Бен Робертс
2
pg_config --versionможет вводить в заблуждение, например, если вы pg_upgradeclusterобновляете сервер Ubuntu и не запускаете , pg_config покажет новую версию вместо той, которую вы все еще используете.
Мариус Гедминас
у меня как раз это работает: pg_config --version команда: psql --versionне работает, жалуется на это: dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib Referenced from: /usr/local/bin/psql Reason: image not found
rld
217

Используя CLI:

Версия сервера:

$ postgres -V  # Or --version.  Use "locate bin/postgres" if not found.
postgres (PostgreSQL) 9.6.1
$ postgres -V | awk '{print $NF}'  # Last column is version.
9.6.1
$ postgres -V | egrep -o '[0-9]{1,}\.[0-9]{1,}'  # Major.Minor version
9.6

Если у вас есть более одной установки PostgreSQL, или если появляется postgres: command not foundошибка " ":

$ locate bin/postgres | xargs -i xargs -t '{}' -V  # xargs is intentionally twice.
/usr/pgsql-9.3/bin/postgres -V 
postgres (PostgreSQL) 9.3.5
/usr/pgsql-9.6/bin/postgres -V 
postgres (PostgreSQL) 9.6.1

Если locateне поможет, попробуйте find:

$ sudo find / -wholename '*/bin/postgres' 2>&- | xargs -i xargs -t '{}' -V  # xargs is intentionally twice.
/usr/pgsql-9.6/bin/postgres -V 
postgres (PostgreSQL) 9.6.1

Хотя postmasterтакже может использоваться вместо postgres, использование postgresпредпочтительнее, поскольку postmasterявляется устаревшим псевдонимом postgres.

Версия клиента:

Актуально, войдите какpostgres .

$ psql -V  # Or --version
psql (PostgreSQL) 9.6.1

Если у вас более одной установки PostgreSQL:

$ locate bin/psql | xargs -i xargs -t '{}' -V  # xargs is intentionally twice.
/usr/bin/psql -V 
psql (PostgreSQL) 9.3.5
/usr/pgsql-9.2/bin/psql -V 
psql (PostgreSQL) 9.2.9
/usr/pgsql-9.3/bin/psql -V 
psql (PostgreSQL) 9.3.5

Используя SQL:

Версия сервера:

=> SELECT version();
                                                   version                                                    
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.2.9 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit

=> SHOW server_version;
 server_version 
----------------
 9.2.9

=> SHOW server_version_num;
 server_version_num 
--------------------
 90209

Если любопытнее, попробуйте => SHOW all;.

Версия клиента:

Для этого стоит выполнить команду оболочки, psqlчтобы показать клиентскую версию psqlисполняемого файла в пути. Обратите внимание, что выполнение psqlможет потенциально отличаться от того, что в пути.

=> \! psql -V
psql (PostgreSQL) 9.2.9
Акаменус
источник
12
Спасибо!, SHOW server_version;Это очень удобно в скриптах, чтобы избежать разбора длинной строки SELECT version();.
Вааб
Большое спасибо. Люди не понимают, что для выдачи команд SQL вам нужно знать хотя бы одну роль для подключения к базе данных. Но с postgres -V вам не нужно знать, чтобы подключиться к базе данных, чтобы узнать ее версию.
ychaouche
Одна строка в CLI при условии доступа суперпользователя psql postgres -c "SHOW server_version" -t -A. -tудаляет заголовки, -Aудаляет пробелы выравнивания.
Карманы и
Спасибо, SHOW server_version_numв частности, что удобно для неравенства.
Эсвальд
64

Если вы используете CLI и являетесь postgres пользователем , вы можете сделать это:

psql -c "SELECT version();"


Возможный вывод :

                                                         version                                                         
-------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.1 (Debian 11.1-3.pgdg80+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10+deb8u2) 4.9.2, 64-bit
(1 row)
simhumileco
источник
37

Принятый ответ хорош, но если вам нужно программно взаимодействовать с версией PostgreSQL, возможно, лучше сделать это:

SELECT current_setting('server_version_num'); -- Returns 90603 (9.6.3)
-- Or using SHOW command:
SHOW server_version_num; -- Returns 90603 too

Вернет версию сервера в виде целого числа. Вот как тестируется версия сервера в исходном коде PostgreSQL , например:

/*
 * This is a C code from pg_dump source.
 * It will do something if PostgreSQL remote version (server) is lower than 9.1.0
 */
if (fout->remoteVersion < 90100)
    /*
     * Do something...
     */  

Больше информации здесь и здесь .

Мишель Милеззи
источник
36

Выполнить команду

psql -V

куда

V должно быть в столице.

Vipin CP
источник
8
Это psql(клиентская) версия, а не версия сервера Postgres .
a_horse_with_no_name
Для рецензентов : если ответ неправильный, но является ответом (как и подразумевается в комментарии), не рекомендуется удалять: downvote! См., Например, « Вы делаете это неправильно: призыв к здравомыслию в очереди сообщений низкого качества » и « Если ответ отвечает на неправильный вопрос, это не ответ? ». Это ответ. Вы можете не согласиться с этим, но это попытка ответить на вопрос.
Вай Ха Ли
19

в оболочке psql.exe выполните

\! psql -V
Диего Санта Круз Мендесу
источник
13
Это даст ему версию клиента postgre. Я думаю, что OP запрашивает версию сервера sql.
SpKel
12

Простой способ - проверить версию, набрав psql --versionв терминале

Алекс Трн
источник
3
Обратите внимание, что это скажет вам только версию клиента, которая может отличаться от серверной. Смотрите ответ @ simhumileco для канонического пути.
JStr
12

Используя pgadmin4его можно увидеть с помощью двойного щелчка Серверы> server_name_here> вкладка Свойства> Версия:

Версия 3.5:

pgadmin4 показать версию postgres.  Серверы> имя_сервера> Свойства> Версия

Версия 4.1, 4.5:

введите описание изображения здесь

jmunsch
источник
Не вижу этого Использование pgadmin 4 версии 4.1.
faintsignal
1
@faintsignal добавил скриншот для pgadmin4 v4.1, этот скачок версий произошел довольно быстро.
Jmunsch
1
О, моя ошибка Я думал, что вы щелкаете правой кнопкой мыши по серверу, что приводит к другому диалогу «Свойства». Спасибо!
faintsignal
9

Команда pg_config сообщит о каталоге, в котором установлены программы PostgreSQL (--bindir), о расположении включаемых файлов C (--includedir) и библиотек объектного кода (--libdir), а также о версии PostgreSQL (--version) :

$ pg_config --version
PostgreSQL 9.3.6
Донато
источник
8

В моем случае

$psql
postgres=# \g
postgres=# SELECT version();
                                                       version
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.4.21 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.6.real (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
(1 row)

Надеюсь, это поможет кому-то

Викас Хардиа
источник
4

Если у вас есть доступ к серверу через оболочку (вопрос упоминает, что op не имеет, но в случае, если у вас есть) в системе Debian / Ubuntu

sudo apt-cache policy postgresql

который выведет установленную версию,

postgresql:
  Installed: 9.6+184ubuntu1.1
  Candidate: 9.6+184ubuntu1.1
  Version table:
 *** 9.6+184ubuntu1.1 500
        500 http://in.archive.ubuntu.com/ubuntu artful-updates/main amd64 Packages
        500 http://in.archive.ubuntu.com/ubuntu artful-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu artful-security/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu artful-security/main i386 Packages
        100 /var/lib/dpkg/status
     9.6+184ubuntu1 500
        500 http://in.archive.ubuntu.com/ubuntu artful/main amd64 Packages
        500 http://in.archive.ubuntu.com/ubuntu artful/main i386 Packages

где Installed: <version>- установленная версия пакета postgres.

Все это Ваити
источник
1
По аналогии я побежал, $ yum listчтобы увидеть, что были установлены определенные пакеты Postgresql.
Патрик
это работает хорошо. Не могли бы вы указать, как выполнить обновление с 9.6 до 10. в Ubuntu 16.04
kRazzy R
4

использовать VERSIONспециальную переменную

$psql -c "\echo :VERSION"
Фрэнк Лю
источник
2

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

psql --version 2>&1 | tail -1 | awk '{print $3}' | sed 's/\./ /g' | awk '{print $1 "." $2}'

Таким образом, вы можете построить пути к двоичным файлам:

/usr/lib/postgresql/9.2/bin/postgres

Просто замените 9.2 этой командой.

Алексей Петренко
источник
psql --versionвозвращает версию psqlклиента, а не версию сервера Postgres
a_horse_with_no_name
1

Для текущей версии PgAdmin: 4.16 на момент написания.

  1. Выберите БД, чья версия вам нужна.
  2. Нажмите на вкладку свойств в правой панели.

Смотрите скриншот ниже: PGAdmin 4.16 показывает версию БД 10.10

Левша Г Балог
источник
0

Если Select version()возвращается с Memo, попробуйте использовать команду следующим образом:

Select version::char(100) 

или

Select version::varchar(100)
ĀTA
источник
2
select version()::varchar(100);работал для меня, но был таким же, какversion()
isaaclw