PostgreSQL sunucusu Mac OS X'in durumu nasıl kontrol edilir


103

Postgresql sunucumun çalışıp çalışmadığını nasıl anlarım?

Bu mesajı alıyorum:

[~/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?

Güncelleme:

> 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

Güncelleme 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

1
Ayrıca Mac OS / X'te birden çok postgres sürümüne de dikkat etmelisiniz. Postgres'i homebrew aracılığıyla yüklediyseniz, yolunuz yanlış ayarlandığında yukarıdaki hatayı alabilirsiniz - sadece yanlışlıkla yolumu aldattım ve her şey, yolu ayarlayana kadar çok iyi çalışmayan postgres sistem kurulumunu kullanmaya başladı. demleme kurulumunu kullan
Jamie Cook

Yanıtlar:


95

Çalışan işlemleri kontrol etmenin en basit yolu:

ps auxwww | grep postgres

Ve şuna benzer bir komut arayın (sürümünüz 8.3 olmayabilir):

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

Sunucuyu başlatmak için aşağıdaki gibi bir şey yürütün:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log

tamam ve böyle bir şey bulamazsam, sunucuyu nasıl başlatırım?
Ramy

4
pgrep postgresayrıca çalışır. Veya ps auxwww | grep [p]ostgresalınmasını önlemek için grep.
Gregory Nisbet

1
Boo, tısla: ps | grepyanlış tedavi önerisi. pgrepzar zor kabul edilebilir. pg_ctl statusolduğu harika . ps auxwww | grep postgreseşleşecek grep postgresve less /var/log/postgres/whatever.
Charles Duffy

Veritabanı küme dizininin /Library/PostgreSQL/8.3/data, kullanıcı tarafından initdbkomut aracılığıyla keyfi olarak oluşturulduğuna dikkat edilmelidir . İşte 8.3 dokümanı
GPL

59

Postgress'in çalışıp çalışmadığını belirlemek için aşağıdaki komutu çalıştırabilirsiniz:

$ pg_ctl status

Ayrıca PGDATAortam değişkenini de ayarlamak isteyeceksiniz .

İşte ~/.bashrcpostgres dosyamda bulunanlar:

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'

Etkili olmalarını sağlamak için bunu şu şekilde kaynaklamayı unutmayın:

$ . ~/.bashrc

Şimdi deneyin ve şuna benzer bir şey almalısınız:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres

Hata mesajınız göz önüne alındığında, SamGoody'nin initdb komutunuzu çalıştırma önerisinin "Bağlantı reddedildi" sorununuzu çözeceğine bahse girerim. Düzeltildikten sonra, postgres db sunucu durumunuzu almak için önerilerimi deneyin.
l3x

26

Muhtemelen postgres başlatmadınız.

HomeBrew kullanarak kurduysanız, başka herhangi bir şey kullanılabilir hale gelmeden önce init çalıştırılmalıdır.

Talimatları görmek için çalıştırın 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

Bunu çalıştırdıktan sonra şöyle bir şey söylemelidir:

Başarı. Artık veritabanı sunucusunu aşağıdakileri kullanarak başlatabilirsiniz:

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

Hala sorun yaşıyorsanız, güvenlik duvarınızı kontrol edin. HandsOff gibi iyi bir tane kullanıyorsanız! ve trafiği engelleyecek şekilde yapılandırılmışsa, sayfanız veritabanını görmeyecektir.


21

PostgreSQL 9.3'ten itibaren şu komutu kullanabilirsiniz: pg_isready bir PostgreSQL sunucusunun bağlantı durumunu belirlemek için .

Gönderen docs :

pg_isready, sunucu bağlantıları normal olarak kabul ediyorsa kabuğa 0 döndürür, sunucu bağlantıları reddediyorsa (örneğin başlatma sırasında), bağlantı girişimine yanıt yoksa 2 ve hiçbir girişim yapılmadıysa 3 döndürür (örneğin geçersiz parametrelere).


9.3'ten önce psql için aynısını nasıl kontrol edersiniz?
BRBdot

11

Postgresql sunucunuzun nereye kurulu olduğuna bağlıdır. Sunucuyu aşağıdaki gibi manuel olarak başlatmak için pg_ctl kullanırsınız.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

@Ramy Sen ikame bin için var yolunda.
James Allman

Hmm tamam. Kurulumumun nerede olduğunu kontrol etmem gerektiğini düşündüm. lütfen yeni güncellemeye bakın.
Ramy

Postgres'i nasıl kurdunuz? Postgres yükledikten sonra initdb'yi çalıştırdınız mı?
Nvick

5

pg_ctl statusPostmaster süreci var olduğunu diğer cevaplar kontrolleri ve raporlarda bu yüzden çalışıyor ki eğer önerilen komuta. Bu, mutlaka bağlantıları kabul etmeye veya sorguları yürütmeye hazır olduğu anlamına gelmez.

psqlBasit bir sorgu çalıştırmak ve çıkış kodunu kontrol etmek gibi başka bir yöntem kullanmak psql -c 'SELECT 1'veya pg_isready bağlantı durumunu kontrol etmek için kullanmak daha iyidir .


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &Postgres'i tek seferde kontrol etmek ve başlatmak istiyorsanız (otomasyon betikleri için kullanışlıdır).
Kate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.