Какую версию 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)

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 должно быть в столице.


8
Это psql(клиентская) версия, а не версия сервера Postgres .
a_horse_with_no_name

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


12

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


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

12

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

Версия 3.5:

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

Версия 4.1, 4.5:

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


Не вижу этого Использование 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


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)

2
select version()::varchar(100);работал для меня, но был таким же, какversion()
isaaclw
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.