Cara memeriksa status server PostgreSQL Mac OS X

102

Bagaimana saya bisa tahu apakah server Postgresql saya berjalan atau tidak?

Saya mendapatkan pesan ini:

[~/dev/working/sw] sudo bundle exec rake db:migrate 
rake aborted!
could not connect to server: Connection refused
    Is the server running on host "localhost" and accepting
    TCP/IP connections on port 5432?

Memperbarui:

> which postgres
/usr/local/bin/postgres
> pg_ctl -D /usr/local/bin/postgres -l /usr/local/bin/postgres/server.log start
pg_ctl: could not open PID file "/usr/local/bin/postgres/postmaster.pid": Not a directory

Perbarui 2:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory
Ramy
sumber
1
Anda juga harus mencari beberapa versi postgres di Mac OS / X. Jika Anda telah menginstal postgres melalui homebrew maka Anda bisa mendapatkan kesalahan di atas ketika jalur Anda tidak diatur dengan benar - Saya hanya secara tidak sengaja memalsukan jalur saya dan semuanya mulai menggunakan pemasangan sistem postgres yang tidak berfungsi dengan baik sampai saya menyesuaikan jalur ke gunakan instalasi minuman
Jamie Cook

Jawaban:

94

Cara termudah untuk memeriksa proses yang sedang berjalan:

ps auxwww | grep postgres

Dan cari perintah yang terlihat seperti ini (versi Anda mungkin bukan 8.3):

/Library/PostgreSQL/8.3/bin/postgres -D /Library/PostgreSQL/8.3/data

Untuk memulai server, jalankan sesuatu seperti ini:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log
Bohemian
sumber
ok dan jika saya tidak menemukan yang seperti itu, bagaimana cara memulai server?
Ramy
4
pgrep postgresjuga bekerja. Atau ps auxwww | grep [p]ostgresuntuk mencegah agar greptidak diambil.
Gregory Nisbet
1
Boo, mendesis ulang: ps | grepsaran malpraktek. pgrepbisa diterima, nyaris. pg_ctl statusadalah besar . ps auxwww | grep postgresakan cocok grep postgres, dan less /var/log/postgres/whatever.
Charles Duffy
Perlu dicatat bahwa direktori cluster database /Library/PostgreSQL/8.3/datadibuat secara sewenang-wenang oleh pengguna melalui initdbperintah. di sini adalah 8,3 dokumen
GPL
58

Anda dapat menjalankan perintah berikut untuk menentukan apakah postgress sedang berjalan:

$ pg_ctl status

Anda juga ingin menyetel PGDATA variabel lingkungan.

Inilah yang saya miliki di ~/.bashrcfile saya untuk postgres:

export PGDATA='/usr/local/var/postgres'
export PGHOST=localhost
alias start-pg='pg_ctl -l $PGDATA/server.log start'
alias stop-pg='pg_ctl stop -m fast'
alias show-pg-status='pg_ctl status'
alias restart-pg='pg_ctl reload'

Untuk membuatnya berlaku, ingatlah untuk mengambilnya seperti ini:

$ . ~/.bashrc

Sekarang, coba dan Anda akan mendapatkan sesuatu seperti ini:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
l3x
sumber
Mengingat pesan kesalahan Anda, saya yakin saran SamGoody untuk menjalankan perintah initdb Anda akan memperbaiki masalah "Sambungan ditolak". Setelah diperbaiki, coba saran saya untuk mendapatkan status server db postgres Anda.
l3x
26

Anda mungkin tidak memulai postgres.

Jika Anda menginstal menggunakan HomeBrew, init harus dijalankan sebelum hal lain dapat digunakan.

Untuk melihat instruksi, jalankan brew info postgres

# Create/Upgrade a Database
If this is your first install, create a database with:
     initdb /usr/local/var/postgres -E utf8

To have launchd start postgresql at login:
   ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 
Then to load postgresql now:     
   launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist 
Or, if you don't want/need launchctl, you can just run:
    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

Setelah Anda menjalankannya, itu akan mengatakan sesuatu seperti:

Keberhasilan. Anda sekarang dapat memulai server database menggunakan:

postgres -D /usr/local/var/postgres or
pg_ctl -D /usr/local/var/postgres -l logfile start

Jika Anda masih mengalami masalah, periksa firewall Anda. Jika Anda menggunakan yang bagus seperti HandsOff! dan itu dikonfigurasi untuk memblokir lalu lintas, maka halaman Anda tidak akan melihat database.

SamGoody
sumber
20

Pada PostgreSQL 9.3, Anda dapat menggunakan perintah pg_isready untuk menentukan status koneksi server PostgreSQL.

Dari dokumen :

pg_isready mengembalikan 0 ke shell jika server menerima koneksi secara normal, 1 jika server menolak koneksi (misalnya saat startup), 2 jika tidak ada respons terhadap upaya koneksi, dan 3 jika tidak ada upaya yang dilakukan (misalnya karena ke parameter yang tidak valid).

benjwadams.dll
sumber
Bagaimana Anda memeriksa psql yang sama sebelum 9.3?
BRBdot
11

Itu tergantung di mana server postgresql Anda diinstal. Anda menggunakan pg_ctl untuk memulai server secara manual seperti di bawah ini.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Nvick
sumber
@Ramy Anda mengganti bin untuk var di jalur.
James Allman
hmmm ... oke. saya pikir saya perlu memeriksa di mana saya menginstal. silakan lihat pembaruan baru.
Ramy
Bagaimana Anda menginstal postgres? Apakah Anda menjalankan initdb setelah menginstal postgres?
Nvick
5

Itu pg_ctl status perintah yang disarankan dalam jawaban pemeriksaan lain yang proses postmaster ada dan jika demikian laporan bahwa itu berjalan. Itu tidak berarti ia siap menerima koneksi atau menjalankan kueri.

Lebih baik menggunakan metode lain seperti menggunakan psqluntuk menjalankan kueri sederhana dan memeriksa kode keluar, misalnya psql -c 'SELECT 1', atau gunakan pg_isready untuk memeriksa status koneksi .

Owen Pauling
sumber
3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &jika Anda ingin memeriksa dan memulai postgres sekaligus (berguna untuk skrip otomatisasi).
Kate