Sửa chữa Postgresql sau khi nâng cấp lên OSX 10.7 Lion


196

Gần đây tôi đã nâng cấp lên OSX 10.7, tại thời điểm cài đặt đường ray của tôi hoàn toàn bị hỏng khi cố gắng kết nối với máy chủ psql. Khi tôi làm điều đó từ dòng lệnh bằng cách sử dụng

psql -U postgres

nó hoạt động hoàn toàn tốt, nhưng khi tôi cố chạy máy chủ rails hoặc bảng điều khiển có cùng tên người dùng và mật khẩu, tôi gặp lỗi này

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Bất kỳ ý tưởng những gì có thể xảy ra sẽ là siêu hữu ích! Cảm ơn!


Điều này cũng đánh ai đó trong văn phòng của tôi; chúng tôi gặp vấn đề tương tự với việc nhận sai nhị phân, một vấn đề khác khi cố gắng kết nối với các ổ cắm tên miền trong một thư mục khác với các quyền khác nhau và có vẻ như bản nâng cấp đã ăn tất cả dữ liệu trên cơ sở dữ liệu cục bộ. May mắn thay, đây chỉ là một hộp phát triển, vì vậy nó không phải là một vấn đề lớn, nhưng hơi đáng ghét. :)

1
Tôi đánh cái này hôm nay và nhớ đọc câu hỏi của bạn ngày hôm qua. Thật tốt khi thấy @John Wang đã xuất hiện và giải thích nó :)
Ryan Bigg

Câu trả lời:


291

Đó là một vấn đề PATH. Mac OSX Lion bao gồm Postgresql trong hệ thống. Nếu bạn thực hiện, which psqlbạn sẽ thấy usr/bin/psqlthay vì usr/local/bin/psqlđó là chính xác của HomeBrew. Nếu bạn chạy, brew doctorbạn sẽ nhận được một thông báo nói rằng bạn cần thêm usr/local/binvào phần đầu của biến env PATH.

Chỉnh sửa .bash_profile hoặc .profile của bạn hoặc bất kỳ shell nào bạn đang sử dụng và thêm: export PATH=/usr/local/bin:$PATH

là lần xuất đầu tiên PATHsau đó thoát khỏi phiên shell của bạn hoặc nguồn tệp của bạn source ~/.bash_profilevà bây giờ nó sẽ ổn trở lại.


12
Điều này đã sửa nó. Bạn cũng có thể chỉnh sửa / etc / path và đảm bảo / usr / local / bin ở trên cùng
Greg

153
Ngoài ra, lưu ý rằng nếu bạn đã cài đặt pg gem TRƯỚC KHI sửa đường dẫn của mình, nó sẽ sử dụng sai psql. Nếu vậy, hãy gỡ cài đặt pg gem và sau đó cài đặt lại (gem gỡ cài đặt pg && gem install pg).
Troy

4
Đây có phải là cho homebrew? Các cổng dường như đặt nó vào: / opt / local / lib / postgresql91 Vì vậy, hãy đảm bảo bạn sử dụng export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs 23/11/11

1
Đường dẫn của tôi đã báo cáo chính xác, nhưng giải pháp gỡ cài đặt đá quý pg của Troy, sau đó cho phép cài đặt lại gói đã thực hiện thủ thuật cho tôi.
Tom Harrison

2
Chỉ cần làm rõ - có vẻ như bạn là tốt nhất để thiết lập đường dẫn của mình một cách chính xác, sau đó gỡ cài đặt / cài đặt lại đá quý pg
Jamie Cook

90

Đối với những người bạn quan tâm, tôi đã cùng nhau giải quyết. Tất cả tôi cần là thêm

host: localhost

đến cơ sở dữ liệu.yml cho môi trường của tôi và tất cả đều hấp dẫn.


9
hãy cẩn thận với điều này: Cài đặt này thay đổi quyền truy cập từ ổ cắm miền sang kết nối TCP. Mặc dù nó có thể hoạt động, bạn có thể mất một chút hiệu suất và các cổng có thể sử dụng trên máy của bạn, đây có thể là một vấn đề tùy thuộc vào thiết lập của bạn. Giải pháp được cung cấp bởi John là chính xác.
pilif

3
'Gem gỡ cài đặt pg' (chọn tất cả các phiên bản), sau đó 'bó lại' để cài đặt phiên bản pg từ Gemfile của bạn làm việc cho tôi.
tmadsen

Cảm ơn Dave G, điều này cũng làm việc cho tôi. Tôi đã cài đặt bản cập nhật 10.7.3 và rake db: di chuyển phàn nàn. Điều này đã sửa nó.
Sathish

Điều này làm việc cho tôi quá. Tuy nhiên tôi để lại mật khẩu và tên người dùng trống.
Benjamin

Tôi tưởng tượng điều này sẽ hoạt động vì nó buộc kết nối TCP / IP.
duma

46

Tôi gặp vấn đề rất lớn với Mountain Lion nhưng điều duy nhất có hiệu quả với tôi là cách khắc phục này :

Kiểm tra mục tiêu thực tế ở đâu:

sudo find / -name .s.PGSQL.5432

Tôi cần tạo thư mục này:

mkdir /var/pgsql_socket/

Sau đó, sử dụng kết quả từ tìm kiếm ở trên tạo liên kết tượng trưng này:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Tôi nghi ngờ rằng đối với hầu hết mọi người trên Mountain Lion, bạn chỉ có thể tạo thư mục và thực hiện liên kết tượng trưng và không lãng phí thời gian để tìm kiếm trừ khi liên kết tượng trưng không hoạt động.

PS - PostgreSQL của tôi đã được cài đặt thông qua trình cài đặt chính thức.


Tôi có cảm giác nó có thể là nó cho tôi nhưng không thể làm cho nó hoạt động. Tôi đang nhận được điều này: ln: / var / pssql_socket /: Không có tệp hoặc thư mục như vậy
Emmanuel

Xin lỗi, tôi quên rằng tôi cũng chạy vào đó. Thêm bước bổ sung để trả lời.
Ben

Chúc lành cho bạn Ben. Rất cảm kích.
Matt

29

Nếu vấn đề vẫn còn tồn tại trong quá khứ thay đổi con đường (như đã làm với tôi), hãy thử điều này ...

gem pristine pg

Có vẻ như vấn đề (một phần) nằm ở chính viên ngọc pg. Khi nó xây dựng, nó chỉ ra vị trí của socket miền. Nếu bạn thay đổi vị trí của ổ cắm miền sau khi thực tế nó dường như không có hiệu lực cho đến khi bạn xây dựng lại viên ngọc.


Điều này làm việc cho tôi, ngay cả sau khi tôi sửa PATH và cài đặt lại đá quý pg mà không còn nguyên sơ.
Elliot Winkler

Cảm ơn vì mẹo này, Darren
bhinks

15

Đối với những người đã cài đặt trực tiếp từ trình cài đặt chính thức, chỉ cần thêm máy chủ vào lệnh sẽ hoạt động mà không có thay đổi đường dẫn:

psql -h localhost -U postgres

5

Tôi có cùng một vấn đề và đã có vấn đề làm cho giải pháp của John Wang hoạt động. Như Darren lưu ý rằng có một vấn đề với đá quý pg. Để làm cho nó hoạt động tôi cần phải:

gem uninstall pg

Sau đó cài đặt lại.

Mà có nó làm việc.


Tôi đã phải chạy cái này hai lần ... lẻ. Tôi đã gỡ cài đặt pg sau đó cài đặt gói và nó không thành công. Sau đó, chỉ cần cài đặt gem pg và nó đã làm việc. Cảm ơn!
Dustin

3

Tôi cũng gặp phải vấn đề này, nhưng tôi đã tự cài đặt postgres (không phải với homebrew). Nếu đó là trường hợp, bạn cần tìm đường dẫn cũ đến psql (có thể là / usr / local / bin, nhưng đối với tôi là / usr / local / pssql / bin) và gửi trước cho $ PATH của bạn.

(trước) which psql=> / usr / bin / psql

(sửa chữa) xuất PATH = / usr / local / psql / bin: $ PATH

(sau) `mà psql '=> / usr / local / psql / bin

Đề nghị của John Wang để source ~/.bash_rcsau đó bạn thêm nó vào bash_rc của bạn là vàng.


3

Đây có phải là cho homebrew? Các cổng dường như đặt nó vào:

/opt/local/lib/postgresql91 

Vì vậy, hãy chắc chắn rằng bạn sử dụng xuất khẩu

PATH=/opt/local/lib/postgresql91/bin:$PATH

Sự cố cổng Mac: https://trac.macports.org/ticket/30125


1

Tôi không hài lòng với các câu trả lời được đánh giá cao nhất vì chúng là dành riêng cho người dùng hệ điều hành hoặc sắp xếp lại Postgres để sử dụng TCP thay vì ổ cắm tên miền, như được chỉ ra bởi @pilif. Tôi đã thấy một giải pháp khác liên quan đến việc sắp xếp lại các đường dẫn mặc định ở cấp hệ thống để kiểm tra đường dẫn của Brew trước đường dẫn hệ thống cốt lõi, nhưng điều này có vẻ nguy hiểm vì nó có thể ảnh hưởng đến tất cả các xung đột tên ứng dụng khác như thế này.

Trang web này chi tiết một giải pháp đồng nghiệp của tôi tìm thấy. Nó đi xuống để thực hiện một kịch bản shell duy nhất sẽ

  1. sao lưu các tệp Postgres 8.4 trong một thư mục riêng
  2. symlink cài đặt bia Postgres tại chỗ

Điều này đi kèm với lời cảnh báo rằng Postgres mặc định của hệ thống là bất cứ thứ gì được cài đặt, vì vậy bạn phải đưa ra phán quyết về việc liệu nó có phù hợp với bạn hay không. Tôi không thấy mình cần Postgres 8.4 cụ thể hơn 9.x, nhưng YMMV


1

Một giải pháp khả thi khác có thể làm việc với tôi là đặt lại tệp postmaster bằng cách xóa nó. Đơn giản chỉ cần chạy:

rm /usr/local/var/postgres/postmaster.pid 

Thật đáng để kiểm tra nhật ký cho các lỗi mà bạn có thể tìm thấy ở đây:

/usr/local/var/postgres/server.log

Thông báo lỗi tôi gặp phải là:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

Mọi thứ hoạt động tuyệt vời sau đó.


Tôi chỉ có vấn đề từ dòng lệnh. Xóa tệp /usr/local/var/postgres/postmaster.pid đã giải quyết vấn đề của tôi.
Michael A.

0

Trong trường hợp của tôi, máy chủ đã không khởi động do cài đặt bộ nhớ chia sẻ sai. Lúc đầu, tôi đã bối rối vì có một số quy trình postgres đang chạy, nhưng đó là các quy trình hệ thống tiêu chuẩn. Tìm postmasterquy trình!

Tất cả những gì tôi cần làm là thay đổi cài đặt bộ nhớ dùng chung . Loay hoay với các thiết lập đường dẫn không cần thiết trong trường hợp của tôi.



0

Nếu bạn muốn một thay đổi vĩnh viễn trong $ PATH của mình, hãy thử điều này:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

điều này sẽ viết lại của bạn ~/.MacOSX/environment.plist.


0

Tôi mới sử dụng Rails, nhưng thêm phần sau vào cơ sở dữ liệu.yml hoạt động với tôi:

host: localhost

port: 5432

Không chắc chắn tại sao Rails mặc định cho các socket miền thay vì TCP, trong khi PostgreSQL không thiết lập các socket miền theo mặc định.


0

PostgreSQL của tôi được cài đặt trong / Library / PostgreSQL để / usr / var thứ không hoạt động với tôi.

Có vẻ như Woz là chính xác bởi vì mỗi lần tôi đóng nắp macbook pro của nó thì nó bị sập ... Đây là những gì đã làm việc sau sự cố đối với tôi:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
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.