2011-11-02 27 views
64

Làm cách nào để biết máy chủ Postgresql của tôi có đang chạy hay không?Cách kiểm tra trạng thái máy chủ PostgreSQL Mac OS X

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 tìm kiếm nhiều phiên bản của 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 sai - tôi chỉ vô tình làm hỏng đường dẫn của mình và mọi thứ bắt đầu bằng cách cài đặt hệ thống postgres không hoạt động tốt cho đến khi tôi điều chỉnh đường dẫn đến sử dụng các brew cài đặt –

Trả lời

62

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

ps auxwww | grep postgres 
.210

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

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

Để khởi động máy chủ, thực hiện một cái gì đó như thế này:

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

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

+0

@Ramy xem câu trả lời đã chỉnh sửa – Bohemian

+1

'pgrep postgres' cũng hoạt động. Hoặc 'ps auxwww | grep [p] ostgres' để ngăn chặn 'grep' nhận được. –

8

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ư dưới đây.

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

xem chỉnh sửa câu hỏi của tôi, vui lòng – Ramy

+0

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

+0

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

13

Có thể bạn không bắt đầu postgres.

Nếu bạn đã cài đặt bằng cách sử dụ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, 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 

Một khi bạn đã chạy đó, nó nên nói cái gì đó như:

thành công. Bây giờ bạn có thể bắt đầu các máy chủ cơ sở dữ liệu 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 đang gặp vấn đề, 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 cấu hình để chặn lưu lượng truy cập, sau đó trang của bạn sẽ không thấy cơ sở dữ liệu.

31

Bạn có thể chạy các lệnh sau đây để xác định xem postgress đang chạy:

$ pg_ctl status 

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

Đây là những gì tôi có trong tập tin ~/.bashrc tôi 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' 

Để nhận được chúng để có hiệu lực, hãy nhớ nguồn nó như vậy:

$ . ~/.bashrc 

Bây giờ, hãy thử nó và bạn nên 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 
+0

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

+0

Wow .... Tôi đã xây dựng lại postgres trong nhiều năm. Đây là giải pháp hoàn hảo!! – mindtonic

4

Các pg_ctl status lệnh recommes ted trong câu trả lời khác kiểm tra rằng quá trình postmaster 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 nên sử dụng một phương pháp khác như sử dụng psql để chạy 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_isreadyto check the connection status.

+2

'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 trong một lần (tiện dụng cho các kịch bản tự động hóa). – Kate

6

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ừ docs:

lợi nhuận pg_isready 0 đến vỏ nếu máy chủ là chấp nhận các kết nối bình thường, 1 nếu máy chủ là từ chối kết nối (ví dụ trong quá trình startup), 2 nếu không có phản ứng với cố gắng kết nối và 3 nếu không có nỗ lực nào được thực hiện (ví dụ do các tham số không hợp lệ).