Quelle version de PostgreSQL j'utilise?


1027

Je suis dans un environnement d'entreprise (exécutant Debian Linux) et ne l'ai pas installé moi-même. J'accède aux bases de données en utilisant Navicat ou phpPgAdmin (si cela aide). Je n'ai pas non plus d'accès shell au serveur exécutant la base de données.

Réponses:


1646

Exécutez cette requête à partir de PostgreSQL:

SELECT version();

4
Aucun résultat dans mon cas dans le terminal sur Ubuntu
Timo

23
@Timo, il s'agit d'une requête à exécuter via PostgreSQL. Cela pourrait être fait via pgAdmin ou tout autre mécanisme pour exécuter une requête. Avez-vous essayé de l'exécuter à partir d'un shell Ubuntu? (cela ne fonctionnera pas)
Highly Irregular

41
Cela peut également être exécuté à partir de la ligne de commande avecpsql -c 'SELECT version();'
Aaron Lelevier

3
Vous pouvez exécuter directement depuis le bash en spécifiant la base de données postgres comme suit:psql postgres -c 'SELECT version();'
thathashd

22
@Frank H. Utilisation: sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQLdevrait vous faire passer "le rôle" nom d'utilisateur "n'existe pas".
Marcus Junius Brutus

550

Je crois que c'est ce que vous recherchez,

Version du serveur:

pg_config --version

Version client:

psql --version

1
Merci! Cela fonctionne lorsque l'accès au shell est disponible. Malheureusement dans mon cas, je n'ai pas cet accès; J'ai mis à jour la question.
Très irrégulier

3
Parfois, la version client est ce que vous voulez savoir de toute façon.
Trejkaz

12
Comme le note Frank, cela peut être trompeur. psql se connectera à tout processus de base de données postmaster / postgres en cours d'exécution et le moteur de base de données peut ne pas être la même version que la commande psql.
Ben Roberts

2
pg_config --versionpourrait être trompeur, par exemple si vous mettez à niveau un serveur Ubuntu et ne l'exécutez pas pg_upgradecluster, pg_config affichera la nouvelle version au lieu de celle que vous utilisez toujours.
Marius Gedminas

juste cela fonctionne pour moi: pg_config --version La commande: psql --versionne fonctionne pas, se plaint pour cela: dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib Referenced from: /usr/local/bin/psql Reason: image not found
rld

217

Utilisation de CLI:

Version du serveur:

$ 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

Si vous avez plusieurs installations de PostgreSQL, ou si vous obtenez l' postgres: command not founderreur " ":

$ 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

Si cela locaten'aide pas, essayez 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

Bien qu'il postmasterpuisse également être utilisé à la place de postgres, l'utilisation postgresest préférable car il postmasters'agit d'un alias obsolète de postgres.

Version client:

Le cas échéant, connectez-vous en tant quepostgres .

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

Si vous disposez de plusieurs installations de 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

Utilisation de SQL:

Version du serveur:

=> 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

Si vous êtes plus curieux, essayez => SHOW all;.

Version client:

Pour ce que ça vaut, une commande shell peut être exécutée à l'intérieur psqlpour afficher la version client de l' psqlexécutable dans le chemin. Notez que l'exécution psqlpeut potentiellement être différente de celle du chemin.

=> \! psql -V
psql (PostgreSQL) 9.2.9

12
Merci!, Le SHOW server_version;est très pratique dans les scripts pour éviter d'avoir à analyser la longue chaîne de SELECT version();.
vaab

Merci beaucoup. Les gens ne réalisent pas que pour émettre des commandes SQL, vous devez connaître au moins un rôle pour vous connecter à la base de données. Mais avec postgres -V, vous n'avez pas besoin de vous connecter à la base de données pour connaître sa version.
ychaouche

Une ligne en CLI en supposant un accès super - utilisateur: psql postgres -c "SHOW server_version" -t -A. -tsupprime les en-têtes, -Asupprime les espaces d'alignement.
Pocketsand

Merci pour SHOW server_version_numen particulier, ce qui est pratique pour les inégalités.
eswald

64

Si vous utilisez CLI et que vous êtes un postgres utilisateur , vous pouvez le faire:

psql -c "SELECT version();"


Sortie possible :

                                                         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

La réponse acceptée est excellente, mais si vous avez besoin d'interagir par programme avec la version PostgreSQL, il vaut peut-être mieux faire:

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

Il renverra la version du serveur sous forme d'entier. Voici comment la version du serveur est testée dans la source PostgreSQL , par exemple:

/*
 * 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...
     */  

Plus d'infos ici et ici .


36

Exécuter la commande

psql -V

V doit être en majuscule.


8
Il s'agit de la psqlversion (client), pas de la version du serveur Postgres .
a_horse_with_no_name

Aux réviseurs : si la réponse est erronée mais est une réponse (comme le commentaire l'indique), ne recommandez pas la suppression: downvote! Voir, par exemple, " Vous vous trompez: un plaidoyer pour la raison dans la file d'attente des messages de faible qualité " et " Quand une réponse répond à la mauvaise question, n'est-ce pas une réponse? ". Ceci est une réponse. Vous n'êtes peut-être pas d'accord avec cela, mais c'est une tentative de répondre à la question.
Wai Ha Lee


12

Un moyen simple est de vérifier la version en tapant psql --versionterminal


3
Notez que cela ne vous indiquera que la version du client, qui pourrait très probablement être différente du serveur. Voir la réponse de @ simhumileco pour la voie canonique.
jstr

12

Son utilisation pgadmin4peut être vue en double-cliquant sur Serveurs> nom_serveur_ici> onglet Propriétés> Version:

Version 3.5:

pgadmin4 affiche la version postgres.  Serveurs> nom_serveur> Propriétés> Version

Version 4.1, 4.5:

entrez la description de l'image ici


Ne le vois pas. Utilisation de pgadmin 4 version 4.1.
faintsignal

1
@faintsignal a ajouté une capture d'écran pour pgadmin4 v4.1, ce saut de version s'est produit assez rapidement.
jmunsch

1
Oh, mon erreur. Je pensais que vous faisiez un clic droit sur le serveur, ce qui conduit à une boîte de dialogue "Propriétés" différente. Merci!
faintsignal

9

La commande pg_config signale le répertoire dans lequel les programmes PostgreSQL sont installés (--bindir), l'emplacement des fichiers d'inclusion C (--includedir) et des bibliothèques de code objet (--libdir), et la version de PostgreSQL (--version) :

$ pg_config --version
PostgreSQL 9.3.6

8

Dans mon cas

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

J'espère que cela aidera quelqu'un


4

Si vous avez un accès shell au serveur (la question mentionne que op n'a pas, mais au cas où vous l'avez), sur un système debian / ubuntu

sudo apt-cache policy postgresql

qui affichera la version installée,

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>est la version du package postgres installé.


1
Comme une idée similaire, j'ai couru $ yum listpour voir que certains packages Postgresql étaient installés.
Patrick

cela fonctionne bien. Pourriez-vous s'il vous plaît indiquer comment mettre à niveau de 9,6 à 10. sur Ubuntu 16.04
kRazzy R

4

utiliser VERSIONune variable spéciale

$psql -c "\echo :VERSION"

2

Je ne sais pas à quel point c'est fiable, mais vous pouvez obtenir deux jetons de version de manière entièrement automatique:

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

Vous pouvez donc créer des chemins vers les binaires:

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

Remplacez simplement 9.2 par cette commande.


psql --versionrenvoie la version du psqlclient, pas la version du serveur Postgres
a_horse_with_no_name

1

Pour la version actuelle de PgAdmin: 4.16 au moment de la rédaction.

  1. Sélectionnez la base de données dont vous avez besoin de la version.
  2. Cliquez sur l'onglet Propriétés dans le volet droit.

Voir capture d'écran ci-dessous: PGAdmin 4.16 montrant DB version 10.10


0

Si Select version()retourne avec Memo, essayez d'utiliser la commande de cette façon:

Select version::char(100) 

ou

Select version::varchar(100)

2
select version()::varchar(100);travaillé pour moi, mais était le même queversion()
isaaclw
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.