PostgreSQL đang chạy cục bộ nhưng tôi không thể kết nối. Tại sao?


32

Gần đây, tôi đã cập nhật máy của mình từ Mac OS X Lion (10.7.4) lên Mountain Lion (10.8) và tôi nghĩ rằng nó đã làm hỏng quá trình cài đặt PostgreQuery của tôi. Nó được cài đặt ban đầu thông qua Homebrew. Tôi không phải là một DBA, nhưng hy vọng ai đó có thể cho tôi biết cách khắc phục sự cố này.

Tôi không thể kết nối (nhưng đã có thể trước Sư tử núi trước):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Nhưng Postgres vẫn đang hoạt động rõ ràng:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

Và nó đang trả lời các truy vấn (cả db thử nghiệm và db phát triển) từ ứng dụng Rails cục bộ

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Dường như không có /var/pgsql_socket/thư mục, /var/pgsql_socket/.s.PGSQL.5432nói gì đến tập tin socket được đề cập ở trên!?! Có lẽ bản cài đặt của Mountain Lion đã xóa sạch nó?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

Làm thế nào tôi có thể khắc phục sự cố này?


Không phải quản trị viên postgres, nhưng một tệp socket bị thiếu nghe có vẻ đúng. Tạo thư mục / var / pssql_socket (với người dùng của bạn có quyền ghi) và khởi động lại máy chủ. Xem nếu điều đó khắc phục nó
Derek Downey

Câu hỏi liên quan về SO . Có vẻ như Apple đã không làm tốt công việc nâng cấp.
Erwin Brandstetter

Có bất kỳ đề cập đến một tập tin ổ cắm được tạo ra trong tập tin nhật ký /usr/local/var/postgres/server.log?
Phil

@ErwinBrandstetter Bạn mong đợi Apple sẽ làm "công việc tốt" như thế nào để nâng cấp các ứng dụng * nix của bên thứ 3 được cài đặt thủ công?
Phil

@ Phil- không đề cập đến. Tôi bắt đầu nghĩ rằng đây có thể là một vấn đề biến đường dẫn. Tôi nghĩ rằng tôi $PATHđã thay đổi với bản nâng cấp /usr/binđi trước /usr/local/binvà tôi nghĩ Mountain Lion có thể được cài đặt sẵn PostgreSQL!?! Điều tra ...
Meltemi

Câu trả lời:


30

Tôi thấy rằng tôi có một vấn đề cực kỳ tương tự, cụ thể là các postgres đang mở một ổ cắm trong /var/pgsql_socket_altđó không có phần mềm nào của tôi trông chờ, nhưng giải pháp cho vấn đề của tôi không chỉ là vấn đề với tôi $PATH.

Tôi đã phải tạo ra các thư mục /var/pgsql_socket, chown nó để bản thân mình, và đặt unix_socket_directorytrong postgresql.conf(nằm trong /usr/local/var/postgres) vào thư mục đó, sau đó sử dụng pg_ctlnhị phân trong /usr/local/binđể bắt đầu postgres máy chủ ngay thành công (đó là nơi $PATHxuất phát trong - hãy chắc chắn which pg_ctlquyết tâm /usr/local/bin/pg_ctl, hoặc chỉ luôn gọi nó một cách rõ ràng).

Điều này có thể giúp những người dùng khác tìm thấy câu hỏi này thông qua /var/pgsql_socket_altđề cập.


Hấp dẫn. Bạn cũng ở trên Mountain Lion? Bạn đã cài đặt PostgreSQL với Homebrew chưa? Nếu vậy, tự hỏi nếu có ai khác có thể xác minh giải pháp này trái ngược với việc thay đổi của tôi $PATHnhư tôi đã làm.
Meltemi

Vâng, vâng, và tôi hy vọng như vậy!
Sẽ

@wolftron giải pháp của bạn đã phù hợp với tôi (Mountain Lion, homebrew / postgres, / var / pssql_socket_alt, cả chín). Đây có phải là một vấn đề mới trên Mountain Lion với homebrew? Tôi sẽ mở một vé với họ nếu bạn nghĩ vậy.

Có vẻ như chúng tôi đã xác minh từ @Jamie.
Sẽ

Tôi có thể xác nhận vấn đề này và giải pháp trên OS X 10.8.2 / cài đặt bia của postgresql 9.2.1.
Hartwig

8

Một lời giải thích hợp lý và điển hình sẽ là cái psqlđi kèm với homebrew /usr/local/bin/psqlkhác với cái được giải thích trong $ PATH của bạn, giống như /usr/bin/psql(đi kèm với OS X). Bạn có thể muốn thử với đường dẫn đầy đủ:

$ /usr/local/bin/psql -U rails -d myapp_development

Ngoài ra, có một điều khá bất thường trong psđầu ra của câu hỏi của bạn: máy chủ postgres đang chạy dưới một meltemingười dùng Unix, trong khi nói chung, postgresngười dùng Unix chuyên dụng được sử dụng cho điều đó.


Ngoài ra, _postgrestôi không biết (với dấu gạch dưới) cho người dùng / nhóm. Đó là một tạo tác hay dự kiến?
Erwin Brandstetter

Vâng, nó dường như là một $PATHvấn đề như bạn đã nêu. Mọi thứ hoạt động như trước đây khi tôi sử dụng /usr/local/bin/psqlđể truy cập cơ sở dữ liệu. Sư tử không có hệ thống PostgreSQL hoặc $ PATH của tôi được thiết lập khác nhau. Đã một năm kể từ lần cuối tôi nhầm lẫn với điều này nên tôi không thể nhớ chính xác. Đối với người dùng Unix ... với bản cài đặt Homgrew của PostgreSQL, máy chủ được khởi chạy bởi launchd và người dùng được đặt thành người dùng cục bộ đã cài đặt nó, như một mặc định. Mọi thứ được thiết lập khác nhau trên Mac OS X Server khởi động PostgreSQL tự động postgres.
Meltemi

4

Tôi không biết bất kỳ tập tin cấu hình nào cho máy khách psql. Tuy nhiên, psql không tôn trọng một số biến môi trường tương quan với các tùy chọn dòng lệnh.

Vì vậy, để psql tự động sử dụng ổ cắm bạn chọn, bạn có thể đặt biến PGHOST vào thư mục chứa ổ cắm. I E

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
Nó không được ghi lại ở bất cứ đâu tôi có thể thấy rằng bạn có thể đặt PGHOST vào thư mục chứa các tệp socket. Nhưng điều đó thực tế làm việc. Cảm ơn!
Andrew Schulman

3

Thử:

psql -U rails -d myapp_development -h localhost

hoặc là

psql -U rails -d myapp_development -h 127.0.0.1

3

Muộn, nhưng tôi thấy điều này hữu ích: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Đó là cho Lion, nhưng tôi đã gặp vấn đề tương tự như trong luồng này sau khi nâng cấp từ 10.6.8 lên Mountain Lion và đã cài đặt PostgreQuery qua HomeBrew trước đó vào ngày 10.6.8. Tôi cũng đã /var/pgsql_socket_altnâng cấp thư mục bí ẩn , nhưng tôi chỉ gỡ bỏ nó và tạo /var/pgsql_sockettheo đề xuất của @wolftron. Tuy nhiên, đó không phải là giải pháp cuối cùng.

Nếu tôi để unix_socket_directorytrống / nhận xét postgresql.conf, bất kỳ dự án nào hiện có trước khi nâng cấp sẽ phàn nàn rằng ổ cắm /var/pgsql_socketbị thiếu. Nhưng nếu tôi thay đổi conf và mã hóa cứng var/pgsql_socket, bất kỳ dự án mới nào cũng sẽ phàn nàn rằng ổ cắm /tmpbị thiếu. Rất bực bội ... cho đến khi tôi cài đặt lại pg gemtrong một dự án trước 10.8 ( gem uninstall pg && gem install pg) và để lại unix_socket_directorynhận xét trong conftệp. Sau khi nhanh chóng pg_ctlkhởi động lại máy chủ, cả dự án mới và cũ đều hoạt động. Ổ cắm pssql của tôi hiện đang sống /tmp, fwiw.

Sidenote: nếu bạn đang sử dụng activerecord-postgresql-adaptergem, hãy gỡ cài đặt nó trước, sau đó cài đặt lại pg, sau đó cài đặt activerecord-postgresql-adapterlại.


2

Tôi mới chỉ đăng ký với dba SE, vì vậy dường như không thể nhận xét về bài đăng có liên quan (thật là một crock!).

Tuy nhiên, tôi đã tự tin rằng mình đã ở cùng thuyền với @thure. Tôi đã thực hiện chắc chắn / usr / local / bin được trước đó trong PATH của tôi hơn / usr / bin, đã kiểm tra mà binaries vỏ đã băm với whichtypevv

Tôi thấy các triệu chứng tương tự như @thure. Sau đó, tôi đã có một bản hùng ca; Tôi nhận ra rằng tôi đã xây dựng lại pgviên đá quý (tôi đang sử dụng Ruby) trong một chiếc vỏ có PATH bị ảnh hưởng bất lợi bởi path_helper của Mac (được chạy từ / etc / profile và đặt / usr / bin trước / usr / local / bin) .

Tôi đã gỡ cài đặt pg và cài đặt lại nó trong một cái vỏ có PATH đúng. Đột nhiên tôi có thể kết nối!

Vì vậy, hãy chắc chắn rằng bạn biên dịch lại ngôn ngữ của bạn ràng buộc mọi người và để họ tìm bản sao chính xác của (có lẽ) pg_config.



1

Tôi thấy rằng việc liên kết vị trí thực tế với vị trí dự kiến ​​sẽ hoạt động tốt:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

dọc theo dòng câu trả lời được chấp nhận bởi @thure nhưng đơn giản hơn.


1

Đây là năm 2016, El Capitan đã ra khỏi đó và Apple tiếp tục thay đổi mọi thứ. Postgres được cài đặt như một phần của HĐH và tệp cấu hình postgres đặt thuộc tính unix_socket_directories trong postgresql.conf thành / tmp. Ổ cắm nằm trong /tmp/.s.PGSQL.5432. Tôi đã có thể khắc phục vấn đề bằng cách thực hiện như sau:

sudo ln -s /tmp /var/pgsql_socket

Hy vọng điều này sẽ giúp được ai đó.


1

Tìm tập tin ổ cắm chính xác

find / -name .s.PGSQL.5432 -ls

Từ kết quả, nhận đường dẫn đến tệp và sử dụng đường dẫn với tham số "-h" trong lệnh psql

Ví dụ: đây là cách tôi kết nối với cơ sở dữ liệu Danh bạ và Lịch của máy chủ macOS (trong phiên ssh tới máy chủ):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Sau đó, tệp ổ cắm tại đường dẫn sẽ được sử dụng để kết nối.


1

Theo mặc định, các postgres dường như đang cố gắng kết nối thông qua các ổ cắm unix-domain. SOCKET UNIX

Điều này xảy ra với tôi khi tôi đang chạy ví dụ postgres trên docker. Bạn phải xem loại máy chủ nào được chấp nhận. Đối với tôi đó rõ ràng là TCP và không phải là ổ cắm miền unix.

Thêm cờ để chấp nhận máy chủ chuyển hướng kết nối đến đường dẫn chính xác và khắc phục sự cố.

psql -U username -p port -h host

PS: Ổ cắm tên miền Unix hoạt động ở cấp độ kernel và kết nối không phải trải qua tất cả nhạc jazz cần thiết cho kết nối TCP. Chúng khá nhanh và hiệu quả khi bạn muốn tạo kết nối với máy của chính mình từ một quy trình khác như một phần của Giao tiếp liên tiến trình.


0

Xin chào thế giới :)
Cách tốt nhất nhưng kỳ lạ đối với tôi là làm những việc tiếp theo.

1) Tải xuống postgres93.app hoặc phiên bản khác. Thêm ứng dụng này vào / Ứng dụng / thư mục.

2) Thêm một hàng (lệnh) vào tệp .bash_profile(trong thư mục chính của tôi):

xuất PATH = / Ứng dụng / Postgres93.app / Nội dung / MacOS / bin /: $ PATH
Đó là một ĐƯỜNG psqltừ Postgres93.app. Hàng (lệnh) chạy mỗi khi bảng điều khiển được khởi động.

3) Khởi chạy Postgres93.apptừ /Applications/thư mục. Nó khởi động một máy chủ cục bộ (cổng là "5432" và máy chủ là "localhost").

4) Sau tất cả các thao tác này, tôi rất vui khi chạy $ createuser -SRDP user_namevà các lệnh khác và để thấy rằng nó hoạt động! Postgres93.appcó thể được thực hiện để chạy mỗi khi hệ thống của bạn khởi động.

5) Ngoài ra nếu bạn muốn xem cơ sở dữ liệu của mình bằng đồ họa, bạn nên cài đặt PG Commander.app. Đó là cách tốt để xem DB postgres của bạn dưới dạng bảng dữ liệu đẹp

Tất nhiên, nó chỉ hữu ích cho máy chủ cục bộ. Tôi sẽ rất vui nếu hướng dẫn này giúp những người khác gặp phải vấn đề này.



0

Tôi đã gặp lỗi tương tự từ việc cố gắng chạy psqltrên dòng lệnh. Hóa ra giải pháp của tôi đơn giản hơn nhiều. Tôi đã cấu hình sai cổng nghe trong tệp cấu hình: /etc/postgresql/9.4/main/postgres.conf . Tôi đã thay đổi cổng từ port = 5432 thành port = 5433. Khi tôi đổi nó trở lại thành 5432, nó hoạt động như mong đợi.

Để kiểm tra xem bạn đã làm điều gì tương tự chưa, bạn có thể chạy $ psql -p5433 Có một số tùy chọn hữu ích như thế này cho lệnh psql mà bạn có thể tìm thấy ở đây: http://www.postgresql.org/docs/9.4/static/app-psql .html để bạn có thể kiểm tra cấu hình sai cụ thể của riêng bạn. Tất nhiên, bạn chỉ có thể xóa bộ thay đổi cấu hình cuối cùng của mình khỏi các tệp * .conf để kiểm tra xem đó có phải là nguồn gốc của vấn đề của bạn không. Tôi nghĩ rằng nó chắc chắn là giá trị kiểm tra trước khi bạn làm quen với quyền và quyền sở hữu tập tin. (Đừng quên /etc/init.d/postgresql restart)

Điều tôi không thể tìm thấy là tệp cấu hình đặt các giá trị mặc định cho lệnh CLI psql. Ai đó có thể bình luận với điều đó, xin vui lòng?

Đối với tôi, tôi luôn quay trở lại với nguyên tắc lập trình đầu tiên của mình: "Tôi thường là nguồn gốc của bất kỳ lỗi nào!"

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.