Không thể kết nối với Postgres trên Vagrant Box - Kết nối bị từ chối?


10

Trước hết, tôi chưa quen với Vagrant và Postgres.

Tôi đã tạo cá thể Vagrant của mình bằng cách sử dụng http://files.vagrantup.com/lucid32.box mà không gặp rắc rối nào. Tôi có thể chạy vagrant upvagrant sshkhông có vấn đề.

Tôi đã làm theo hướng dẫn với một thay đổi nhỏ, tôi đã cài đặt gói "postgresql-8.4-postgis" thay vì "postgresql postgresql-contrib".

Tôi đã khởi động máy chủ bằng cách sử dụng:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

Trong khi kết nối với thể hiện mơ hồ, tôi có thể sử dụng psqlđể kết nối với thể hiện mà không gặp vấn đề gì.

Trong Vagrantfile của tôi, tôi đã thêm:

config.vm.forward_port 5432, 5432

nhưng khi tôi cố chạy psql từ localhost thì tôi nhận được:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Tôi chắc chắn rằng tôi đang thiếu một cái gì đó đơn giản. Có ý kiến ​​gì không?

Cập nhật:

Tôi tìm thấy một tài liệu tham khảo cho một vấn đề như thế này và bài viết được đề xuất sử dụng:

psql -U postgres -h localhost

với điều đó tôi nhận được:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

Câu trả lời:


5

Các hướng dẫn từ bài đăng trên blog mà bạn đề cập hoàn toàn không đúng đối với Ubuntu: họ sử dụng các phần từ quá trình cài đặt máy chủ tự biên dịch không kết hợp tốt với phiên bản đóng gói.

Người ta không nên tạo / usr / local / pssql / data và chạy initdb vào thư mục đó, vì gói ubfox sử dụng /var/lib/postgresql/<pg-version-number>/<cluster-name>và chạy initdbthay mặt cho người dùng.

Lỗi đề cập đến "/tmp/.s.PGSQL.5432" cho thấy rằng vị trí dự kiến ​​cho tệp này là không chính xác (đối với Ubuntu). Nó nên ở trong /var/run/postgresql. Điều này có thể là do chạy initdb thủ công với các tham số không tương thích với Ubuntu.

Các tập tin postgresql.conf và pg_hba.conf cần chỉnh sửa để cho phép các kết nối không cục bộ nên ở bên trong /etc/postgresql/8.4/mainvà không phải / usr / local / pssql / data.

Các /etc/init.d/postgresql-8.4nên được đưa ra bởi gốc (như mọi thứ khác trong /etc/init.d), chứ không phải bởi người sử dụng postgres.

PGDATA không nên được đặt thủ công, bởi vì một lần nữa nó thực sự cản trở cách thức các gói postgres của Ubuntu hoạt động.

Câu trả lời của tôi sẽ là thanh lọc và cài đặt lại gói postgresql-8.4 mà không làm theo bất kỳ hướng dẫn nào từ bài đăng trên blog. postgresql-8.4-postgis phụ thuộc vào postgresql-8.4 vì vậy nó cũng sẽ bị xóa. Đồng thời đảm bảo hoàn tác cài đặt PGDATA trong /etc/bash.bashrc.


Tôi đang làm lại cài đặt ngay bây giờ, nhưng nhận thấy trong câu trả lời của bạn, bạn đã đề xuất đường dẫn sai khi tìm Ubuntu ở vị trí sai cho tệp. Có thể đó là do máy khách đang chạy trên OSX trong khi máy chủ là một hộp ubfox?

Vì vậy, tôi đã cài đặt lại và nhận được cùng một lỗi chính xác. Tôi nhìn xung quanh nhiều hơn một chút và thấy rằng tôi không có cổng mở trong iptables. Sau khi làm theo hướng dẫn ở đây: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Tôi có thể kết nối.

Tôi không thể chắc chắn nếu cài đặt lại là một phần của sửa chữa, nhưng điều này chắc chắn là hữu ích. Vì vậy, tôi sẽ mang lại cho bạn chiến thắng

Khi máy khách và máy chủ ở trên các máy chủ khác nhau, psql phải được gọi psql -h <server> [optional other arguments]trong đó <server> là tên máy chủ hoặc địa chỉ IP (và không phải là localhost) của máy chủ (hộp ubfox trong trường hợp này). Trong câu hỏi có vẻ như bạn không gọi nó theo cách này nên tôi đã giả sử tất cả các lệnh được khởi chạy trên máy chủ. Dù sao, tôi thực sự tích cực rằng cài đặt lại là một biện pháp lành mạnh ngay cả khi kết nối có thể được thiết lập.

Tôi gọi nó như sau: psql -U postgres -h localhost kể từ khi tôi có thiết lập chuyển tiếp cổng mơ hồ

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.