psql: không thể kết nối với máy chủ: Không có tệp hoặc thư mục như vậy (Mac OS X)


247

Khi khởi động lại máy Mac của tôi, tôi đã gặp lỗi Postgres đáng sợ:

psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Lý do điều này xảy ra là vì macbook của tôi bị đóng băng hoàn toàn do một vấn đề không liên quan và tôi đã phải thực hiện khởi động lại cứng bằng nút nguồn. Sau khi khởi động lại, tôi không thể khởi động Postgres vì ​​lỗi này.


1
Để kiểm tra độ tỉnh táo, hãy đảm bảo bạn có PG đang chạy trên máy của mình
Jbur43 18/12/15

1
Khi bạn để lại câu trả lời, hãy cố gắng giải thích TẠI SAO điều này đang xảy ra hoặc hệ thống Postgres hoạt động như thế nào để chúng ta không chỉ thử những thứ ngẫu nhiên.
Nick Res

6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 làm việc cho tôi
Derk Jan Speelman

brew cài đặt lại postgresql điều này đã giải quyết vấn đề của tôi
Ajay Kumar

Câu trả lời:


420

CẢNH BÁO: Nếu bạn xóa postmaster.pid mà không đảm bảo thực sự không có postgresquá trình nào chạy bạn, có thể làm hỏng vĩnh viễn cơ sở dữ liệu của bạn . (PostgreSQL sẽ tự động xóa nó nếu người quản lý bưu điện đã thoát.).

GIẢI PHÁP: Điều này đã khắc phục sự cố - Tôi đã xóa tệp này và sau đó mọi thứ đã hoạt động!

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

-

và đây là cách tôi tìm ra lý do tại sao điều này cần phải được xóa.

  1. Tôi đã sử dụng lệnh sau để xem có tiến trình PG nào đang chạy không. Đối với tôi không có ai, tôi thậm chí không thể khởi động máy chủ PG:

    ps auxw | grep post
  2. Tôi đã tìm kiếm tệp .s.PGQuery.5432 có trong thông báo lỗi ở trên. tôi đã sử dụng lệnh sau:

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

    điều này không hiển thị bất cứ điều gì sau khi tìm kiếm toàn bộ máy tính của tôi để tập tin không tồn tại, nhưng rõ ràng là psql"muốn nó" hoặc "nghĩ rằng nó ở đó".

  3. Tôi đã xem nhật ký máy chủ của tôi và thấy lỗi sau:

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

    ở cuối nhật ký máy chủ tôi thấy lỗi sau:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
    
  4. Theo lời khuyên trong thông báo lỗi, tôi đã xóa tệp postmaster.pid trong cùng thư mục với server.log. Điều này đã giải quyết vấn đề và tôi đã có thể khởi động lại.

Vì vậy, có vẻ như macbook của tôi bị đóng băng và bị khởi động lại mạnh mẽ khiến Postgres nghĩ rằng các quy trình của nó vẫn đang chạy ngay cả sau khi khởi động lại. Xóa tập tin này được giải quyết. Hy vọng điều này sẽ giúp người khác! Rất nhiều người có vấn đề tương tự nhưng hầu hết các câu trả lời phải làm với quyền truy cập tệp, trong khi đó trong trường hợp của tôi thì mọi thứ lại khác.


9
hy vọng câu trả lời này kết thúc với việc giúp đỡ người khác, và cảm ơn người đã ủng hộ nó. mặc dù người điều hành đã đánh dấu câu hỏi này là trùng lặp, nó là duy nhất và hữu ích. cảm ơn stack stack cho trang web tuyệt vời và các chuyên gia ở đây để chia sẻ!
FireDragon

2
Chỉ cần FWIW, xóa postmaster.pid là nguy hiểm, bạn phải thực sự chắc chắn rằng không có postgresquy trình nào chạy trước khi bạn làm điều đó.
Craig Ringer

20
Câu trả lời chính xác. Cảm ơn bạn đã đăng toàn bộ quá trình của bạn chứ không chỉ là lệnh có khả năng phá hủy!
dojosto

3
Đã đồng ý. Câu trả lời về postmaster.pid là tốt, nhưng mỗi bước của quá trình tìm hiểu xem / nơi postgres đang chạy, là vô giá . Cảm ơn bạn!
Clinton

11
Đăng nhập postgres của tôi trên macos là tại /usr/local/var/log/postgres.log.
Ryan Tuck

172

Không ai ở trên làm việc cho tôi. Tôi đã phải cài đặt lại Postgres theo cách sau:

  • Gỡ cài đặt postgresql bằng brew: brew uninstall postgresql
  • brew doctor (sửa bất cứ điều gì ở đây)
  • brew cleanup
  • Xóa tất cả các thư mục Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Cài đặt lại postgresql với brew: brew install postgresql

  • Máy chủ khởi động: brew services start postgresql
  • Bây giờ bạn phải tạo cơ sở dữ liệu của mình ... ( createdb)

4
Làm việc cho tôi, nhưng tôi không phải xóa cơ sở dữ liệu thực tế và không có thư mục trong Hỗ trợ ứng dụng. Tôi nghĩ vấn đề là một số yếu tố sản xuất bia đã bị hỏng symlink khi cài đặt postgres. Sửa chúng và cài đặt postgres một lần nữa giải quyết vấn đề. Cảm ơn!
Kulbi

2
Cả câu trả lời này cũng không phải đều có tác dụng với tôi, cho đến khi tôi cũng chạybrew postgresql-upgrade-database
ErikAGriffin

Chúng hoạt động với tôi, ngoại trừ tôi không phải xóa dữ liệu cũ.
Amal Antony

Để xác nhận: điều này xóa tất cả cơ sở dữ liệu của bạn, đúng không? Tôi đã có thể nhận được chỉ bằng một brew reinstall postgres, xác nhận rằng số phiên bản chính mới nhất của Homebrew Postgres giống với số hiện tại (bị hỏng) của tôi.
Jacob Ford

85

Nếu bạn đang sử dụng macOS và cài đặt postgres qua homebrew, hãy thử khởi động lại nó với

brew services restart postgresql

Nếu bạn đang sử dụng Ubuntu, bạn có thể khởi động lại nó bằng một trong các lệnh sau

sudo service postgresql restart

sudo /etc/init.d/postgresql restart

34

Có thể điều này không liên quan nhưng một lỗi tương tự xuất hiện khi bạn nâng cấp postgreslên phiên bản chính bằng cách sử dụng brew; sử dụng brew info postgresqltìm ra điều này đã giúp:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database

4
Điều này làm việc cho tôi khi đi từ 11 đến 12 trên Catalina
nzajt

1
Làm việc cho tôi cũng vậy
khoảng trống

15

Đây là cách của tôi:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

1
Điều này làm việc cho tôi khi không có dừng khác và bắt đầu / khởi động lại / cài đặt lại Postgres bằng homebrew. Cảm ơn @ smartworld-dm
Bradley

1
Đây là linh hồn tôi luôn quay trở lại. Tôi có thể thêm một bí danh rằng khi tôi chạy fix-my-postgresqlnó sẽ thực thi điều này :)
Tomas K

1
Bất cứ ý tưởng tại sao tôi phải làm điều này mỗi khi tôi khởi động lại PC của tôi?
stephano

11

nếu bạn postmaster.pidđã biến mất và bạn không thể khởi động lại hoặc bất cứ điều gì, hãy làm điều này:

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

như được giải thích ở đây ban đầu


8

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.


1
Chìa khóa ở đây là thêm Postgres vào đường dẫn của bạn (bước 2). Điều đó đã giúp tôi. Nếu bạn đã cài đặt Postgres bằng Homebrew, bạn có thể thêm nó vào đường dẫn của mình bằng cách thêm dòng sau vào .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Hãy nhớ rằng số phiên bản của bạn có thể khác.
Tina

7

Vấn đề này có nhiều nguồn, và do đó nhiều câu trả lời. Tôi đã trải nghiệm từng người trong số họ.

1) Nếu bạn gặp sự cố nào đó, việc xóa tệp /usr/local/var/postgres/postmaster.pid có thể được yêu cầu vì postgres có thể không xử lý đúng cách. Nhưng đảm bảo rằng không có quá trình đang chạy.

2) Craig Ringer đã chỉ ra trong các bài đăng khác rằng gói postgreSQL của Apple dẫn đến các vấn đề cài đặt đá quý pg Đặt biến môi trường PATH là một giải pháp.

3) Một giải pháp khác, là gỡ cài đặt và cài đặt lại đá quý. Một bản cập nhật bia có thể là cần thiết là tốt.

Nếu bạn vấp phải bài đăng này, nếu bạn có thể xác định một trong những nguồn, bạn sẽ tiết kiệm thời gian ...


3
Tôi rất vui vì tôi đã đăng bài này. Một vụ tai nạn khác & câu trả lời có thể được trả lời khá nhanh ...
Jerome

6

Đối với tôi, giải pháp đơn giản là khởi động lại máy tính của tôi. Lần đầu tiên tôi thử khởi động lại với các dịch vụ của Brew và khi nó không hoạt động, khởi động lại có vẻ như là lựa chọn tốt nhất tiếp theo để thử trước khi xem xét một số giải pháp liên quan hơn. Tất cả mọi thứ làm việc như nó nên sau.


5

Tôi đã phải đối mặt với một vấn đề tương tự ở đây tôi đã giải quyết vấn đề này như dưới đây.

Trên thực tế quá trình postgres đã chết, để xem trạng thái của postgres chạy lệnh sau

sudo /etc/init.d/postgres status

Nó sẽ nói quá trình đã chết. Bắt đầu quá trình

sudo /etc/init.d/postgres start


4

Điều này xảy ra với tôi sau khi máy Mac (High Sierra) của tôi bị đóng băng và tôi phải tự khởi động lại nó (nhấn và giữ nút nguồn). Tất cả những gì tôi phải làm để khắc phục nó là khởi động lại sạch sẽ.


3

Vấn đề của tôi cuối cùng là tôi đang sử dụng Gas Mask (trình quản lý tệp máy chủ cho Mac) và tôi không có mục nào cho localhost trong tệp máy chủ tôi đang sử dụng.

Tôi đã thêm:

127.0.0.1 localhost

Và điều đó đã giải quyết vấn đề của tôi.


3

Tôi không hoàn toàn chắc chắn tại sao, nhưng cài đặt Postgres của tôi có một chút sai sót và một số tệp đã bị xóa dẫn đến lỗi OP đang hiển thị.

Mặc dù thực tế là tôi có thể chạy các lệnh như brew service retart postgresvà xem các thông báo thích hợp, lỗi này vẫn tồn tại.

Tôi đã xem qua tài liệu postgres và thấy rằng tập tin của tôi /usr/local/var/postgreshoàn toàn trống rỗng. Vì vậy, tôi đã chạy như sau:

initdb /usr/local/var/postgres

Có vẻ như một số cấu hình đã diễn ra với lệnh đó.

Sau đó, nó yêu cầu tôi chạy này:

postgres -D /usr/local/var/postgres

Và điều đó cho tôi biết một tập tin postmaster.pid đã tồn tại.

Tôi chỉ cần biết nếu brew có thể nhận các cấu hình tôi vừa chạy, vì vậy tôi đã thử nghiệm nó.

ls /usr/local/var/postgres

Điều đó cho tôi thấy một tập tin postmaster.pid. Sau đó tôi đã làm brew services stop postgresqlvà tập tin postmaster.pid biến mất. Sau đó, tôi đã làm brew services start postgresqlvà VIola, tập tin xuất hiện trở lại.

Sau đó, tôi tiếp tục và chạy ứng dụng của mình, trên thực tế đã tìm thấy máy chủ, tuy nhiên cơ sở dữ liệu của tôi dường như không còn nữa.

Mặc dù tôi biết rằng chúng có thể không biến mất chút nào - việc khởi tạo mới mà tôi đã làm có thể đã tạo ra một data_area mới, và cái cũ không được chỉ ra. Tôi phải xem xét nơi đó và chỉ lại hoặc chỉ tạo lại cơ sở dữ liệu của tôi.

Hi vọng điêu nay co ich! Đọc các tài liệu postgres đã giúp tôi rất nhiều. Tôi ghét đọc câu trả lời giống như "Dán cái này vào nó hoạt động!" bởi vì tôi không biết cái quái gì đang xảy ra và tại sao.


2

Nguyên nhân của lỗi này là rất nhiều vì vậy trước tiên hãy xác định vị trí tệp nhật ký của bạn và kiểm tra xem có manh mối không. Nó có thể là tại /usr/local/var/log/postgres.loghay /usr/local/var/postgres/server.loghoặc có thể ở nơi khác. Nếu bạn đã cài đặt với Homebrew, bạn có thể tìm vị trí trong ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.


2

Tôi gặp vấn đề tương tự. Hầu hết thời gian, vấn đề là thực tế là có một tập tin còn sót lại

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

Nó hoạt động với hầu hết mọi người, nhưng trường hợp của tôi thì khác - tôi đã thử xử lý vấn đề này trong 3 giờ qua, gỡ cài đặt postresql trên OSX thông qua brew, thanh trừng cơ sở dữ liệu, không có gì hoạt động.

Cuối cùng, tôi nhận thấy rằng tôi có một vấn đề với brew rằng bất cứ khi nào tôi cố gắng cài đặt bất cứ thứ gì, nó đều xuất hiện:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

hoặc một cái gì đó giống như nó ở cuối cài đặt.

Tôi chỉ đơn giản là làm sudo chmod -R 777 /private/tmpvà cuối cùng nó hoạt động!

Tôi đang viết nó xuống vì đây có thể là một giải pháp cho người khác


1

Đi đến /var/log/ và chạy mèo postgres.log Ở đây bạn sẽ tìm thấy lý do cho sự thất bại của postgres. Nếu đó là tắt thông minh thì có lẽ icu4cphiên bản của bạn (thư viện C ++ cho Unicode) không phù hợp với liên kết postgres. Vì vậy, chạy các lệnh sau.

brew upgrade brew cleanup Điều này sẽ làm việc;)


Có thể phải chạy brew stylesau đó nếu brew cleanupnghỉ Homebrew.
olliezhu

0

Tôi đã phải tìm kiếm bài đăng này nhiều lần để giải quyết vấn đề này. Có một cách khắc phục khác, cũng sẽ áp dụng cho các vấn đề tương tự với các chương trình đang chạy khác.

Tôi chỉ phát hiện ra bạn có thể sử dụng hai lệnh sau.

$ hàng đầu

Điều này sẽ hiển thị tất cả các hành động hiện đang chạy với số pid của họ. Khi bạn tìm thấy postgres và pid liên quan

$ giết pid_number


0

Tôi vừa gặp vấn đề tương tự như tôi đã đặt máy ( ubuntu) để cập nhật và gặp lỗi dưới đây:

không thể kết nối với máy chủ: Không có tệp hoặc thư mục như vậy Máy chủ có chạy cục bộ và chấp nhận kết nối trên ổ cắm tên miền Unix "/var/run/postgresql/.s.PGQuery.5432" không?

Sau khi hoàn thành quá trình cập nhật khi tôi khởi động lại, lỗi hệ thống của tôi biến mất. Và công việc của nó vẫn quyến rũ như trước .. Tôi đoán điều này đã xảy ra khi pg đang cập nhật và một quá trình khác bắt đầu.


0

SUPER NEWBIE ALERT: Tôi chỉ đang học phát triển web và hướng dẫn cụ thể mà tôi đã đề cập sau đây tôi phải cài đặt Postgres nhưng thực tế tôi không đề cập đến việc tôi phải chạy nó ... Một khi tôi mở ứng dụng Postgres, mọi thứ đều ổn và bảnh bao.


0

Câu trả lời của @Jagdish Barabari đã cho tôi manh mối tôi cần để giải quyết vấn đề này. Hóa ra có hai phiên bản postgresql được cài đặt trong khi chỉ có một phiên bản đang chạy. Việc xóa tất cả các tệp postgresql và cài đặt lại phiên bản mới nhất đã giải quyết vấn đề này cho tôi.


0

Tôi đã xóa / usr / lib khỏi LD_LIBRARY_PATH và nó đã hoạt động. Tôi đã làm việc trong các postgres dockerfile: alpine.

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.