Cách kiểm tra trạng thái của máy chủ PostgreSQL Mac OS X


102

Làm cách nào để biết máy chủ Postgresql của tôi đang chạy hay không?

Tôi nhận được tin nhắn này:

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

Cập nhật:

> 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

Cập nhật 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
Bạn cũng nên để ý nhiều phiên bản postgres trên Mac OS / X. Nếu bạn đã cài đặt postgres qua homebrew thì bạn có thể gặp lỗi ở trên khi đường dẫn của bạn được thiết lập không chính xác - Tôi chỉ vô tình làm sai đường dẫn của mình và mọi thứ bắt đầu bằng cách sử dụng cài đặt hệ thống của postgres không hoạt động tốt cho đến khi tôi điều chỉnh đường dẫn thành sử dụng cài đặt bia
Jamie Cook

Câu trả lời:


94

Cách đơn giản nhất để kiểm tra các tiến trình đang chạy:

ps auxwww | grep postgres

Và hãy tìm một lệnh trông giống như sau (phiên bản của bạn có thể không phải là 8.3):

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

Để khởi động máy chủ, hãy thực thi một cái gì đó như sau:

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

ok và nếu tôi không tìm thấy bất cứ điều gì như vậy, làm cách nào để khởi động máy chủ?
Ramy

4
pgrep postgrescũng hoạt động. Hoặc ps auxwww | grep [p]ostgresđể ngăn chặn việc grepbị nhặt.
Gregory Nisbet

1
Boo, hiss re: ps | grepgợi ý sơ suất. pgreplà chấp nhận được, hầu như không. pg_ctl statustuyệt vời . ps auxwww | grep postgressẽ phù hợp grep postgres, và less /var/log/postgres/whatever.
Charles Duffy

cần lưu ý rằng thư mục cụm cơ sở dữ liệu /Library/PostgreSQL/8.3/datađược người dùng tùy ý tạo thông qua initdblệnh. đây là tài liệu 8.3
GPL

58

Bạn có thể chạy lệnh sau để xác định xem hậu quả đang chạy:

$ pg_ctl status

Bạn cũng sẽ muốn đặt PGDATAbiến môi trường.

Đây là những gì tôi có trong ~/.bashrctệp của mình cho 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'

Để chúng có hiệu lực, hãy nhớ ghi nguồn như sau:

$ . ~/.bashrc

Bây giờ, hãy thử nó và bạn sẽ nhận được một cái gì đó như thế này:

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

Với thông báo lỗi của bạn, tôi cá rằng đề xuất của SamGoody để chạy lệnh initdb của bạn sẽ khắc phục được sự cố "Kết nối bị từ chối" của bạn. Sau khi nó được khắc phục, hãy thử các đề xuất của tôi để có được trạng thái máy chủ db postgres của bạn.
l3x

26

Bạn có thể đã không đánh dấu postgres.

Nếu bạn đã cài đặt bằng HomeBrew, init phải được chạy trước khi bất kỳ thứ gì khác có thể sử dụng được.

Để xem hướng dẫn, hãy chạy 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

Khi bạn đã chạy nó, nó sẽ nói một cái gì đó như:

Sự thành công. Bây giờ bạn có thể khởi động máy chủ cơ sở dữ liệu bằng cách sử dụng:

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

Nếu bạn vẫn gặp sự cố, hãy kiểm tra tường lửa của bạn. Nếu bạn sử dụng một cái tốt như HandsOff! và nó đã được định cấu hình để chặn lưu lượng truy cập, khi đó trang của bạn sẽ không thấy cơ sở dữ liệu.


20

Kể từ PostgreSQL 9.3, bạn có thể sử dụng lệnh pg_isreadyđể xác định trạng thái kết nối của máy chủ PostgreSQL.

Từ các tài liệu :

pg_isready trả về 0 cho shell nếu máy chủ đang chấp nhận kết nối bình thường, 1 nếu máy chủ đang từ chối kết nối (ví dụ: trong khi khởi động), 2 nếu không có phản hồi cho nỗ lực kết nối và 3 nếu không có nỗ lực nào được thực hiện (ví dụ: do đến các tham số không hợp lệ).


Làm cách nào để bạn kiểm tra psql trước 9.3?
BRBdot

11

Nó phụ thuộc vào nơi máy chủ postgresql của bạn được cài đặt. Bạn sử dụng pg_ctl để khởi động máy chủ theo cách thủ công như bên dưới.

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

@Ramy Bạn đã thay thế bin cho var trong đường dẫn.
James Allman

hmmm ... được rồi. tôi nghĩ rằng tôi cần phải kiểm tra xem cài đặt của tôi ở đâu. vui lòng xem bản cập nhật mới.
Ramy

Bạn đã cài đặt postgres như thế nào? Bạn có chạy initdb sau khi cài đặt postgres không?
Nvick

5

Các pg_ctl statuslệnh gợi ý trong câu trả lời kiểm tra khác mà quá trình bưu điện tồn tại và nếu như vậy báo cáo rằng nó đang chạy. Điều đó không nhất thiết có nghĩa là nó đã sẵn sàng chấp nhận các kết nối hoặc thực thi các truy vấn.

Tốt hơn là sử dụng một phương pháp khác như sử dụng psqlđể chạy một truy vấn đơn giản và kiểm tra mã thoát, ví dụ: psql -c 'SELECT 1'hoặc sử dụng pg_isready để kiểm tra trạng thái kết nối .


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &nếu bạn muốn kiểm tra và bắt đầu postgres ngay lập tức (tiện dụng cho các script tự động hóa).
Kate
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.