2011-09-10 18 views
6

psql mydb sản lượng:postgresql: Tại sao tôi phải chỉ định -h localhost khi chạy psql?

psql: could not connect to server: Permission denied 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

psql -h localhost mydb làm việc tốt. pg_hba.conf trông giống như:

local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust 

Cái gì?

Trả lời

2

Có lẽ psql và máy chủ sử dụng một vị trí khác cho socket unix-domain. (/ var/pgsql_socket/là một vị trí lạ) Điều này có thể xảy ra nếu bạn đang trộn các tệp nhị phân từ các gói khác nhau. Cố gắng xác định vị trí các ổ cắm (/ tmp/là một nơi tốt để bắt đầu) Bạn có thể buộc psql sử dụng một thư mục khác nhau bằng cách lạm dụng tùy chọn -h:

psql -h /tmp/ 
+0

+1 cho công tắc '-h', hoạt động tốt cho kết nối cục bộ (dấu gạch chéo ở đầu). Đường dẫn của miền của miền Unix được xác định bởi thuộc tính ['unix_socket_directory'] (http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY) trong' postgresql .conf'. –

+0

Thuộc tính 'unix_socket_directory' có thể trống (tôi chưa bao giờ thấy nó được đặt), trong trường hợp này có lẽ mặc định là/tmp /. – wildplasser

+0

Cảm ơn bạn đã tip- Tôi đang sử dụng các gói OS X tiêu chuẩn từ postgres, giải thích cài đặt socket unix-domain. – Wells

2

này xảy ra với tôi trên OS X, và vấn đề là /usr/bin/psql là những gì tôi đang sử dụng, nhưng bưu điện đang chạy từ /Library/PostgreSQL/9.0. Sử dụng /Library/PostgreSQL/9.0/bin/psql (nhận được rằng vào của tôi PATH trước khi tất cả những người khác) cố định vấn đề.

1

Khi các câu trả lời khác giải quyết các lựa chọn thay thế khác, tôi đoán tôi có thể cung cấp một số thông tin về Máy chủ Mac OS X trên Lion. Tôi chạy vào vấn đề rất giống nhau - trong trường hợp của tôi thậm chí -h localhost không hoạt động như mạng đã bị vô hiệu hóa trong PostregSQL đó là bằng cách trong nhiều trường hợp ý tưởng rất tốt. Vấn đề với Mac OS X Server là nó khởi chạy máy chủ PostgreSQL thông qua launchd.

Một số gợi ý khi bạn đi xung quanh:

  • serveradmin dịch vụ: postgres
  • launchd tập tin cấu hình: /System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • cơ sở dữ liệu thư mục: /var/pgsql
  • ổ cắm folder: /var/pgsql_socket

Đó con tệp hình ảnh ghi đè một số chỉ thị cấu hình có thể được tìm thấy trong postgresql.conf trong thư mục cơ sở dữ liệu. Đặc biệt hai:

  • unix_socket_group
  • unix_socket_permissions

Bạn có thể thấy rằng _postgres tài khoản được sử dụng để chạy các máy chủ và tất cả mọi thứ cũng có thể truy cập nếu người dùng hoạt động là thành viên của nhóm _postgres.

Bằng cách chạy dscl . -read /Groups/_postgres GroupMembership bạn có thể thấy rằng theo mặc định rằng nhóm có các thành viên: _devicemgr_calendar_teamsserver_www

Tôi đoán bạn có hai lựa chọn. Thêm chính bạn vào nhóm _postgres hoặc thay đổi launchd tệp cấu hình plist. Sau đó chỉ là chỉnh sửa văn bản thuần túy ...Nhưng hãy cẩn thận về bảo mật, bởi vì theo cách này bạn sẽ mở Server để đáp ứng bất cứ tiêu chí nào bạn thay đổi (xem đoạn cuối).

Trước đây có thể được thực hiện thông qua Server.app hoặc qua dscl tiện ích dòng lệnh. Tùy chọn đầu tiên có thể không cần thêm bất kỳ thứ gì. Chỉ cần đảm bảo rằng bạn có thể xem Tài khoản hệ thống (Xem -> Ẩn/Hiển thị tài khoản hệ thống). Tôi là loại CLI nghiện vì vậy đây nên thêm người dùng của bạn để _postgres nhóm:

sudo dscl . -append /Groups/_postgres GroupMembership $USER 

Tất nhiên bạn nên cẩn thận những gì bạn chạy dưới tài khoản của bạn sau đó bởi vì bạn đang đem lại quyền truy cập vào cơ sở dữ liệu bạn Máy chủ Mac OS X back-end. Vì vậy, hãy đảm bảo an toàn cho bạn tài khoản _postgres hoặc tạo người dùng riêng để thao tác cơ sở dữ liệu của bạn hoặc không lưu bất cứ điều gì riêng tư ở đó.

8

Tôi đã có những điều tương tự xảy ra với tôi, có lẽ do phiên bản xung đột của psql (một từ Lion, một từ homebrew). Trong khi tôi vẫn chưa thể tìm ra cách làm cho psql sử dụng thư mục socket/tmp, tôi có một công việc xung quanh.

Đặt sau trong .bashrc của bạn (hoặc zshrc, vv):

export PGHOST=/tmp 

này đặt "host" đúng về thư mục ổ cắm đúng, mà không cần phải cung cấp cờ -h

Các vấn đề liên quan