Versi PostgreSQL manakah yang saya jalankan?


1027

Saya berada di lingkungan perusahaan (menjalankan Debian Linux) dan tidak menginstalnya sendiri. Saya mengakses database menggunakan Navicat atau phpPgAdmin (jika itu membantu). Saya juga tidak memiliki akses shell ke server yang menjalankan database.

Jawaban:


1646

Jalankan kueri ini dari PostgreSQL:

SELECT version();

4
Tidak ada hasil dalam kasus saya di terminal pada Ubuntu
Timo

23
@Timo, ini adalah kueri untuk dijalankan melalui PostgreSQL. Ini bisa dilakukan melalui pgAdmin, atau mekanisme lain untuk menjalankan kueri. Apakah Anda mencoba menjalankannya dari shell Ubuntu? (ini tidak akan berhasil)
Sangat tidak teratur

41
Ini juga dapat dijalankan dari baris perintah denganpsql -c 'SELECT version();'
Aaron Lelevier

3
Anda dapat menjalankan langsung dari bash yang menentukan postgres db sebagai berikut:psql postgres -c 'SELECT version();'
thathashd

22
@ Frank H. Menggunakan: sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQLseharusnya membuat Anda melewati "peran 'nama pengguna' tidak ada".
Marcus Junius Brutus

550

Saya percaya ini yang Anda cari,

Versi server:

pg_config --version

Versi klien:

psql --version

1
Terima kasih! Ini berfungsi ketika akses shell tersedia. Sayangnya dalam kasus saya, saya tidak memiliki akses itu; Saya telah memperbarui pertanyaan.
Sangat tidak beraturan,

3
Terkadang versi klien adalah apa yang ingin Anda ketahui.
Trejkaz

12
Seperti yang dicatat Frank, ini bisa menipu. psql akan terhubung ke proses basis data postmaster / postgres apa pun yang sedang berjalan dan mesin basis data mungkin bukan versi yang sama dengan perintah psql.
Ben Roberts

2
pg_config --versionbisa menyesatkan, misalnya jika Anda memutakhirkan server Ubuntu dan tidak menjalankan pg_upgradecluster, pg_config akan menampilkan versi baru dan bukan versi yang masih Anda gunakan.
Marius Gedminas

hanya karya ini untuk saya: pg_config --version Perintah: psql --versiontidak bekerja, mengeluh untuk ini: dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib Referenced from: /usr/local/bin/psql Reason: image not found
rld

217

Menggunakan CLI:

Versi server:

$ 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

Jika memiliki lebih dari satu instalasi PostgreSQL, atau jika mendapat " postgres: command not found" kesalahan:

$ 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

Jika locatetidak membantu, coba 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

Meskipun postmasterdapat juga digunakan sebagai pengganti postgres, penggunaan postgreslebih disukai karena postmasteralias yang sudah tidak digunakan postgres.

Versi klien:

Sebagai relevan, login sebagaipostgres .

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

Jika memiliki lebih dari satu instalasi 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

Menggunakan SQL:

Versi server:

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

Jika lebih penasaran, coba => SHOW all;.

Versi klien:

Untuk apa nilainya, perintah shell dapat dijalankan di dalam psqluntuk menunjukkan versi klien dari psqlexecutable di path. Perhatikan bahwa menjalankan psqlberpotensi berbeda dari yang ada di jalur.

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

12
Terima kasih !, SHOW server_version;script ini sangat berguna untuk menghindari keharusan mengurai dalam string panjang SELECT version();.
vaab

Terima kasih banyak. Orang tidak menyadari bahwa untuk mengeluarkan perintah SQL Anda harus tahu setidaknya satu peran untuk terhubung ke database. Tetapi dengan postgres -V Anda tidak perlu tahu untuk terhubung ke database untuk mengetahui versinya.
ychaouche

Satu baris di CLI asumsi akses superuser: psql postgres -c "SHOW server_version" -t -A. -tmenghapus header, -Amenghapus spasi keselarasan.
Pocketsand

Terima kasih untuk SHOW server_version_numkhususnya, yang berguna untuk ketidaksetaraan.
eswald

64

Jika Anda menggunakan CLI dan Anda adalah postgres pengguna , maka Anda dapat melakukan ini:

psql -c "SELECT version();"


Output yang mungkin :

                                                         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

Jawaban yang diterima sangat bagus, tetapi jika Anda perlu berinteraksi secara terprogram dengan versi PostgreSQL mungkin lebih baik melakukannya:

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

Ini akan mengembalikan versi server sebagai integer. Ini adalah bagaimana versi server diuji dalam sumber PostgreSQL , misalnya:

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

Info lebih lanjut di sini dan di sini .


36

Jalankan perintah

psql -V

Dimana

V harus dalam modal.


8
Itu adalah versi psql(klien), bukan versi server Postgres .
a_horse_with_no_name

Untuk pengulas : jika jawabannya salah tetapi merupakan jawaban (seperti komentar yang tersirat), jangan rekomendasikan penghapusan: downvote! Lihat, misalnya, " Anda salah melakukannya: Permohonan kewarasan dalam antrian Tulisan Kualitas Rendah " dan " Ketika jawaban menjawab pertanyaan yang salah, apakah itu Bukan Jawaban? ". Ini jawabannya. Anda mungkin tidak setuju dengan itu, tetapi ini merupakan upaya untuk menjawab pertanyaan.
Wai Ha Lee


12

Cara sederhana adalah memeriksa versi dengan mengetik psql --versionterminal


3
Perhatikan bahwa ini hanya akan memberi tahu Anda versi klien, yang sangat mungkin berbeda dengan server. Lihat jawaban @ simhumileco untuk cara kanonik.
jstr

12

Menggunakannya pgadmin4dapat dilihat dengan mengklik dua kali Server> server_name_here> tab Properti> Versi:

Versi 3.5:

pgadmin4 menunjukkan versi postgres.  Server> server_name> Properti> Versi

Versi 4.1, 4.5:

masukkan deskripsi gambar di sini


Jangan lihat itu. Menggunakan pgadmin 4 versi 4.1.
faintsignal

1
@faintsignal menambahkan tangkapan layar untuk pgadmin4 v4.1, lompatan versi itu terjadi cukup cepat.
jmunsch

1
Oh, kesalahanku. Saya pikir Anda mengklik kanan server, yang mengarah ke dialog "Properti" yang berbeda. Terima kasih!
faintsignal

9

Perintah pg_config akan melaporkan direktori tempat program PostgreSQL diinstal (--bindir), lokasi C menyertakan file (--includedir) dan perpustakaan kode objek (--libdir), dan versi PostgreSQL (--version) :

$ pg_config --version
PostgreSQL 9.3.6

8

Dalam hal ini

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

Semoga ini bisa membantu seseorang


4

Jika Anda memiliki akses shell ke server (pertanyaannya menyebutkan op tidak memiliki, tetapi jika Anda punya,) pada sistem debian / ubuntu

sudo apt-cache policy postgresql

yang akan menampilkan versi yang diinstal,

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

di mana Installed: <version>adalah versi paket postgres yang diinstal.


1
Sebagai ide yang serupa, saya berlari $ yum listuntuk melihat bahwa paket Postgresql tertentu diinstal.
Patrick

ini bekerja dengan baik. Bisakah Anda sebutkan bagaimana meningkatkan dari 9,6 menjadi 10. di ubuntu 16.04
kRazzy R


2

Tidak tahu seberapa andal ini, tetapi Anda bisa mendapatkan dua token versi sepenuhnya secara otomatis:

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

Jadi Anda bisa membangun path ke binari:

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

Ganti 9.2 dengan perintah ini.


psql --versionmengembalikan versi psqlklien, bukan versi server Postgres
a_horse_with_no_name

1

Untuk versi PgAdmin saat ini: 4,16 pada saat penulisan.

  1. Pilih DB yang versinya Anda butuhkan.
  2. Klik pada tab properti di panel kanan.

Lihat tangkapan layar di bawah ini: PGAdmin 4.16 menampilkan DB versi 10.10


0

Jika Select version()kembali dengan Memo coba gunakan perintah dengan cara ini:

Select version::char(100) 

atau

Select version::varchar(100)

2
select version()::varchar(100);bekerja untuk saya, tetapi sama denganversion()
isaaclw
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.