Menjalankan beberapa versi PostgreSQL pada server Ubuntu yang sama

12

Saya memiliki PostgreSQL 8.4 dan 9.0 yang berjalan di server yang sama (Ubuntu Lucid).

Saya menginstal keduanya melalui apt-get (8.4 dengan sumber paket default, dan 9.0 setelah menambahkan ppa dari https://launchpad.net/~pitti/+archive/postgresql ).

Ketika saya menjalankan perintah seperti "Createdb" dari baris perintah atau memulai shell "psql", PostgreSQL versi 8.4 digunakan secara default pada sistem saya.

Jadi, bagaimana saya memaksakan perintah ini untuk menggunakan PostgreSQL 9.0 dan bukan 8.4?

penggiling kopi
sumber

Jawaban:

11

Dengan asumsi Ubuntu melakukan hal yang sama dengan Debian, maka dua instance PostGreSQL Anda akan berjalan pada port yang berbeda.

Anda dapat dengan mudah memeriksa file konfigurasi untuk melihat versi mana di port mana:

$ grep -H '^port' /etc/postgresql/*/main/postgresql.conf
/etc/postgresql/8.4/main/postgresql.conf:port = 5432
/etc/postgresql/8.3/main/postgresql.conf:port = 5433

Sebagian besar perintah PostGreSQL mengambil opsi "-p ####" atau "--port = ####", sehingga Anda dapat menggunakannya untuk memilih versi yang Anda inginkan.

Gagravarr
sumber
7

Gunakan --clusteropsi misalnya (dengan asumsi bahwa kedua cluster dinamai sebagai default utama):

psql --cluster 8.4/main
psql --cluster 9.0/main

Skema umum adalah:

--cluster version/name      # for local connections
--cluster version/host:port # for TCP/IP connections

Untuk membuat daftar semua cluster yang diinstal (nama, port, status, direktori data dll) gunakan pg_lsclustersperintah.

Periksa man pg_wrapperinformasi lebih lanjut.

Grzegorz Szpetkowski
sumber
Ini brilian kenapa ini tidak ada dalam psql doc?
MarHoff
1
@ MarsHoff: Ini pg_wrapperadalah ekstensi Debian. Pada dasarnya, ia membungkus psql(yaitu, psqltautan simbolis ke pg_wrapperskrip) perintah dengan beberapa opsi baru untuk memfasilitasi penanganan beberapa kluster.
Grzegorz Szpetkowski
0

Anda dapat menggunakan dpkg -L <packagename>untuk melihat file apa yang dimiliki paket tertentu. Jalankan dengan paket postgresql 9 dan lihat di mana perintah createb untuk versi itu disimpan.

Sebagian besar perintah postgresql akan bekerja lintas versi dengan pemilihan database yang sesuai berdasarkan port atau path, tetapi ini tentu saja tidak berlaku untuk memulai skrip dan perintah kreasi.

Seth Robertson
sumber