วิธีตรวจสอบสถานะของเซิร์ฟเวอร์ PostgreSQL Mac OS X


102

ฉันจะทราบได้อย่างไรว่าเซิร์ฟเวอร์ Postgresql ของฉันกำลังทำงานอยู่หรือไม่?

ฉันได้รับข้อความนี้:

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

อัปเดต:

> 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

อัปเดต 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
คุณควรมองหา postgres หลายเวอร์ชันบน Mac OS / X หากคุณติดตั้ง postgres ผ่าน homebrew แล้วคุณจะได้รับข้อผิดพลาดข้างต้นเมื่อเส้นทางของคุณตั้งค่าไม่ถูกต้อง - ฉันเพิ่งทำผิดเส้นทางของฉันโดยไม่ได้ตั้งใจและทุกอย่างเริ่มต้นโดยใช้การติดตั้งระบบของ postgres ซึ่งทำงานได้ไม่ดีนักจนกว่าฉันจะปรับเส้นทางเป็น ใช้การติดตั้งเบียร์
Jamie Cook

คำตอบ:


94

วิธีที่ง่ายที่สุดในการตรวจสอบกระบวนการทำงาน:

ps auxwww | grep postgres

และมองหาคำสั่งที่มีลักษณะเช่นนี้ (เวอร์ชันของคุณอาจไม่ใช่ 8.3):

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

ในการเริ่มต้นเซิร์ฟเวอร์ให้ดำเนินการดังนี้:

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

ตกลงและถ้าฉันไม่พบอะไรเช่นนั้นฉันจะเริ่มเซิร์ฟเวอร์ได้อย่างไร
Ramy

4
pgrep postgresยังใช้งานได้ หรือps auxwww | grep [p]ostgresเพื่อป้องกันไม่ให้grepหยิบขึ้นมา.
Gregory Nisbet

1
โห่ร้องอีกครั้ง: ps | grepข้อเสนอแนะการทุจริตต่อหน้าที่ pgrepเป็นที่ยอมรับแทบจะไม่ pg_ctl statusเป็นดี ps auxwww | grep postgresเป็นไปเพื่อให้ตรงกับและgrep postgres less /var/log/postgres/whatever
Charles Duffy

ควรสังเกตว่าไดเร็กทอรีคลัสเตอร์ฐานข้อมูล/Library/PostgreSQL/8.3/dataถูกสร้างขึ้นโดยพลการโดยผู้ใช้ผ่านinitdbคำสั่ง นี่คือเอกสาร 8.3
GPL

58

คุณสามารถรันคำสั่งต่อไปนี้เพื่อตรวจสอบว่า postgress กำลังทำงานอยู่หรือไม่:

$ pg_ctl status

คุณจะต้องตั้งค่าPGDATAตัวแปรสภาพแวดล้อมด้วย

นี่คือสิ่งที่ฉันมีใน~/.bashrcไฟล์สำหรับ 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'

เพื่อให้มีผลอย่าลืมระบุแหล่งที่มาดังนี้:

$ . ~/.bashrc

ตอนนี้ลองและคุณควรได้รับสิ่งนี้:

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

ด้วยข้อความแสดงข้อผิดพลาดของคุณฉันพนันได้เลยว่าคำแนะนำของ SamGoody ในการเรียกใช้คำสั่ง initdb ของคุณจะแก้ไขปัญหา "การเชื่อมต่อถูกปฏิเสธ" ของคุณ เมื่อแก้ไขแล้วลองคำแนะนำของฉันเพื่อรับสถานะเซิร์ฟเวอร์ db postgres ของคุณ
l3x

26

คุณอาจไม่ได้เริ่ม postgres

หากคุณติดตั้งโดยใช้ HomeBrew การเริ่มต้นจะต้องถูกรันก่อนสิ่งอื่นจะใช้งานได้

หากต้องการดูคำแนะนำให้เรียกใช้ 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

เมื่อคุณเรียกใช้แล้วควรพูดว่า:

ประสบความสำเร็จ. ตอนนี้คุณสามารถเริ่มเซิร์ฟเวอร์ฐานข้อมูลโดยใช้:

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

หากคุณยังคงประสบปัญหาให้ตรวจสอบไฟร์วอลล์ของคุณ ถ้าใช้ของดีอย่าง HandsOff! และถูกกำหนดค่าให้บล็อกการเข้าชมจากนั้นหน้าของคุณจะไม่เห็นฐานข้อมูล


20

ตั้งแต่ PostgreSQL 9.3 คุณสามารถใช้คำสั่งpg_isreadyเพื่อกำหนดสถานะการเชื่อมต่อของเซิร์ฟเวอร์ PostgreSQL

จากเอกสาร :

pg_isready จะส่งคืน 0 ไปยังเชลล์หากเซิร์ฟเวอร์ยอมรับการเชื่อมต่อตามปกติ 1 หากเซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ (เช่นระหว่างการเริ่มต้น) 2 หากไม่มีการตอบสนองต่อความพยายามในการเชื่อมต่อและ 3 หากไม่มีการพยายามทำ (เช่นครบกำหนด เป็นพารามิเตอร์ที่ไม่ถูกต้อง)


คุณตรวจสอบความเหมือนกันสำหรับ psql ก่อน 9.3 ได้อย่างไร?
BRBdot

11

ขึ้นอยู่กับตำแหน่งที่ติดตั้งเซิร์ฟเวอร์ postgresql ของคุณ คุณใช้ pg_ctl เพื่อเริ่มต้นเซิร์ฟเวอร์ด้วยตนเองดังต่อไปนี้

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

@Ramy คุณแทนที่binสำหรับvarในเส้นทาง
James Allman

อืม ... โอเค ฉันคิดว่าฉันต้องตรวจสอบว่าการติดตั้งของฉันอยู่ที่ไหน โปรดดูการอัปเดตใหม่
Ramy

คุณติดตั้ง postgres ได้อย่างไร? คุณเรียกใช้ initdb หลังจากติดตั้ง postgres หรือไม่?
Nvick

5

pg_ctl statusคำสั่งข้อเสนอแนะในการตรวจสอบคำตอบอื่น ๆ ที่กระบวนการไปรษณีย์ที่มีอยู่และถ้าเป็นเช่นรายงานที่จะทำงาน นั่นไม่จำเป็นต้องหมายความว่าพร้อมที่จะยอมรับการเชื่อมต่อหรือดำเนินการสืบค้น

มันจะดีกว่าที่จะใช้วิธีอื่นเช่นการใช้psqlเพื่อเรียกใช้แบบสอบถามที่เรียบง่ายและการตรวจสอบรหัสทางออกเช่นpsql -c 'SELECT 1'หรือการใช้งานในการตรวจสอบสถานะการเชื่อมต่อpg_isready


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &หากคุณต้องการตรวจสอบและเริ่ม postgres ในครั้งเดียว (สะดวกสำหรับสคริปต์อัตโนมัติ)
Kate
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.