Tệp Socket “/var/pgsql_socket/.s.PGSQL.5432” bị thiếu trong Mountain Lion (Máy chủ OS X)


95

Tôi vừa nâng cấp Máy chủ MacMini của mình từ Máy chủ Lion lên Máy chủ Mountain Lion bằng OS X Server. Tôi đang gặp vấn đề tương tự với PostgreSQL mà tôi đã làm vào năm ngoái khi lần đầu tiên cài đặt Lion Server.

Khi tôi cố gắng thực hiện bất kỳ loại lệnh đầu cuối PostgreSQL nào, tôi nhận được thông báo lỗi nổi tiếng sau đây mà nhiều người đã mắc phải trong nhiều năm:

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"?

Tôi đang cố gắng thay đổi mật khẩu cho _postgres thì gặp lỗi. Tôi đã thử một số lệnh nhưng gặp lỗi tương tự. Tôi vừa khởi động lại máy chủ của mình nhưng không may mắn. Tôi đã đăng nhập bằng quyền root để xem / var / pgsql_socket và thư mục trống. Thư mục / var / pgsql_socket_alt cũng trống.

Tôi đã kiểm tra trực tuyến về điều này. Tuy nhiên, chỉ về tất cả các giải pháp tôi đã đọc, bao gồm cả trên Stack Overflow, đề xuất loại bỏ và cài đặt lại PostgreSQL. Tôi không biết nhưng đây có vẻ không phải là một lựa chọn hợp lý vì một số tùy chọn trên Ứng dụng máy chủ sử dụng PostgreSQL. Tôi đã liên hệ với Bộ phận Hỗ trợ Doanh nghiệp của Apple (không có thỏa thuận) và tôi được thông báo rằng vấn đề của tôi sẽ phải được giải quyết bởi các nhà phát triển với số tiền 695 đô la.

Tôi có một trang web hiện đang bị lỗi vì tôi không thể xây dựng lại nó. Tôi không biết phải tìm sự trợ giúp từ đâu vào thời điểm này. Tôi sẽ tiếp tục tìm kiếm trực tuyến để xem nếu tôi có thể tìm thấy một cái gì đó. Tuy nhiên, tôi hy vọng rằng ai đó có thể cho tôi câu trả lời nhanh chóng để tôi có thể xây dựng lại cơ sở dữ liệu của mình.

Cập nhật: 13/12/2012 15:33 GMT-6

Đây là đầu ra của tôi cho ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Cập nhật: 13/12/2012 18:10 GMT-6

Sau khi tìm kiếm dữ dội trên mạng, video này đã được tìm thấy. Tôi đã có thể làm cho PostgreSQL hoạt động và loại bỏ lỗi. Tôi có thể kết nối bằng pgadmin và phppgadmin. Tôi đã định quay lại Máy chủ Sư tử vì quá thất vọng. Bây giờ tôi sẽ không phải làm vậy.

http://www.youtube.com/watch?v=y1c7WFMMkZ4


22
Vấn đề của bạn bắt nguồn từ thực tế là phiên bản PostgreSQL được cài đặt sẵn của Mac OS X có trên phiên bản của psqlbạn PATHtrước phiên bản bạn đã cài đặt. Họ tìm kiếm ổ cắm unix ở những nơi khác nhau. Hoặc sử dụng tcp / ip bằng cách chỉ định -h localhosthoặc tốt hơn là sửa lỗi của bạn PATHđể psqltìm thấy đúng trước. Quyết định kỳ lạ của Apple là không chỉ gói PostgreSQL mà còn gây rối với nó để đưa mọi thứ vào những nơi không chuẩn là nguyên nhân sâu xa của vấn đề này.
Craig Ringer

3
Có một vấn đề đang diễn ra trong OSX, nơi những người đóng gói quyết định đặt ổ cắm miền unix ở một nơi khác với bình thường. Hãy để tôi tìm kiếm ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser 14/12/12

Tôi đã sao chép một PATH cũ trong .bashrc. Tôi chưa cài đặt phiên bản postgreSQL khác. Đây là câu lệnh PATH của tôi bao gồm mã cho RVM. Nếu ai đó có thể cho tôi biết những gì để thay đổi nó thành tôi sẽ làm điều đó. Khi tôi thực hiện psql nào, nó được tìm thấy trong / usr / bin / psql. Cảm ơn rất nhiều vì tất cả các bạn đã giúp đỡ của bạn. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Tôi cũng đang tìm kiếm tệp socket khi đăng nhập với tư cách là người chủ.
Pamela Cook - LightBe Corp 14/12/12

1
Đối với những người đang sử dụng homebrewosx@CraigRinger có thể có câu trả lời phù hợp cho bạn, hãy xác nhận với brew doctor.
Karthik T

Câu trả lời:


299

Tôi đã có thể thêm phần sau vào .bash_profile của mình để tránh lỗi:

export PGHOST=localhost

Điều này hoạt động :

Nếu bạn bỏ qua tên máy chủ, psql sẽ kết nối qua ổ cắm miền Unix với máy chủ trên máy chủ cục bộ hoặc qua TCP / IP tới máy chủ cục bộ trên các máy không có ổ cắm miền Unix.

Hệ điều hành của bạn hỗ trợ các ổ cắm miền Unix, nhưng ổ cắm Unix của PostgreSQL psqlcần không tồn tại hoặc ở một vị trí khác với mong đợi.

Chỉ định tên máy chủ một cách rõ ràng localhostbuộc psqlphải sử dụng TCP / IP. Đặt một biến môi trường PGHOSTlà một trong những cách để đạt được điều đó. Nó được ghi lại trong sách hướng dẫn của psql .


37
Đối với bất kỳ ai gặp phải vấn đề này với ứng dụng Rails: bạn có thể chỉ định máy chủ lưu trữ trong database.yml.
dwhalen

12
Những loại ma thuật này là? Ý tôi là, nghiêm túc đấy. Bạn có thể giải thích?
Sreejith Ramakrishnan

1
Tôi luôn quay lại câu trả lời này! Đã cứu mạng tôi một lần nữa. Đoạn mã này thực sự thuộc về trang này, postgresapp.com/documentation/cli-tools.html .
sambecker

1
Tôi không hiểu tại sao, nhưng nó hiệu quả với tôi! Tôi đã gặp sự cố này trong rails 5 khi tôi sử dụng 'rails db: create', nhưng tôi đã đặt host: localhosttrong database.yml. @dwhalen
Spark.Bao

1
Điều này đã hoạt động cho Rails 5.2 mà không sửa đổi database.yml, khi lỗi này xuất hiện sau khi hạ cấp Postgres xuống phiên bản cũ hơn do Homebrew quản lý.
SexxLuthor

37

Hãy thử dán vào bảng điều khiển này:

$ mkdir /var/pgsql_socket/ 

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

Cuối cùng, tôi đã nhận được câu trả lời này.
Áp dụng

Tốt. Mặc dù tôi nghĩ rằng tôi biết tại sao điều này đang hoạt động, nhưng một chút giải thích thêm sẽ hữu ích. Giải pháp này tốt hơn câu trả lời được chấp nhận, chỉ thiếu các chi tiết.
Glutexo

23

Tôi đã có thể giải quyết bằng cách chỉ cần điền vào 127.0.0.1 cho địa chỉ máy chủ PostgreSQL thay vì để trống. (Ví dụ Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}

1
Bây giờ tôi cảm thấy hơi sững sờ, tôi đã cố gắng khắc phục sự cố này trong khoảng 2 ngày. Trên Windows, tôi đang sử dụng '127.0.0.1', nhưng sau đó tôi đã chuyển mã của mình sang phiên bản sản xuất (Debian 7) và phải thay đổi nó thành ''. Thật là kỳ lạ khi họ đưa ra một thông báo lỗi khiến người ta tin rằng vấn đề có thể nằm ở một nơi khác.
fang_dejavu 29/12/14

10

Mở 'postgresql.conf' trong trình chỉnh sửa yêu thích của bạn. Tìm kiếm biến 'unix_socket_directories', rất có thể nó sẽ giống như sau:

unix_socket_directories = '/private/tmp/'

Thay đổi dòng này:

unix_socket_directories = '/var/pgsql_socket/'

Lưu ý nếu bạn muốn các tệp socket trong nhiều thư mục, dấu phẩy phân tách chúng.


Điều này có tác dụng mong muốn khi cố gắng tạo ổ cắm ở nơi khác, nhưng máy chủ sẽ không khởi động vì nó không có quyền tạo tệp trong thư mục / var. Tôi đã kết thúc việc thay đổi các tệp cấu hình ở cấp cao hơn để chỉ cần sử dụng socket ở vị trí ban đầu. Khá nhiều như được đưa ra trong câu trả lời này stackoverflow.com/a/29511357/1535177 .
Eosis


7

Như đã được đề cập bởi những người khác trong các nhận xét, một giải pháp thực sự đơn giản cho vấn đề này là khai báo 'máy chủ' cơ sở dữ liệu trong cấu hình cơ sở dữ liệu. Thêm câu trả lời này chỉ để làm rõ ràng hơn một chút cho bất kỳ ai đọc bài này.

Trong ứng dụng Ruby on Rails, hãy chỉnh sửa /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Lưu ý: dòng cuối cùng được thêm để chỉ định máy chủ. Trước khi cập nhật lên Yosemite, tôi không cần phải chỉ định máy chủ theo cách này.

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

Chúc mừng


Tôi cần đặt máy chủ của mình vào thư mục mà tôi tìm thấy có chứa .s.PGSQL.5432tệp.
Eosis

5

Kiểm tra trạng thái của cơ sở dữ liệu:

service postgresql status

Nếu cơ sở dữ liệu không chạy, hãy khởi động db:

sudo service postgresql start

bị mắc kẹt với lỗi trên và giải quyết nó bằng cách khởi động db.
Sivakumar RJ

4

Bạn có thể kiểm tra tệp postgresql.conf của mình không ??

Postgres của bạn đang chạy trên cổng nào ??

Tôi nghĩ rằng nó không chạy trên cổng 5432. Nếu không thay đổi nó thành 5432

HOẶC khi sử dụng thiết bị đầu cuối

psql -U  postgres -p YOUR_PORT_NUMBER database_name

1
Tôi không thể chạy lệnh đầu cuối. Tôi nhận được lỗi tương tự. Tôi cần trợ giúp về nơi tôi có thể tìm thấy tệp postgresql.conf. Tôi từng có thư mục / var / pgsql khi chạy Lion Server. Tôi đoán điều đó đã biến mất bây giờ. Tôi vừa đăng đầu ra của mình cho lệnh ps grep. Tôi đã bật dịch vụ Wiki để chạy PostgreSQL. Tôi được thông báo rằng tôi có thể sử dụng các lệnh sudo serveradmin mà không cần bật bất kỳ dịch vụ ứng dụng Máy chủ nào nhưng chúng không hoạt động. Tôi đã đăng nhập bằng quyền root ngay bây giờ nên tôi có thể làm bất cứ điều gì :) Tôi đã kiểm tra các cổng trong Tiện ích mạng. 5432 không được sử dụng.
Pamela Cook - LightBe Corp 13/12/12

2

Tôi đã gặp vấn đề này với Django.

Khắc phục bằng cách đặt tên máy chủ của bạn thành "localhost".


2

tôi kiếm lời bằng cách làm điều này:

dpkg-reconfigure locales

và chọn ngôn ngữ ưa thích của bạn

pg_createcluster 9.5 main --start

(9.5 là phiên bản postgresql của tôi)

/etc/init.d/postgresql start

và sau đó nó từ!

sudo su - postgres
psql


1
apt-get install postgres-xc-client
apt-get install postgres-xc

1
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"?

Tôi tiếp tục gặp lỗi ở trên và không có giải pháp nào ở trên phù hợp với tôi. Cuối cùng, giải pháp sau đã giải quyết được vấn đề của tôi trên Mac OS X

Cài đặt postgres bằng cách sử dụng brew

brew install postgres

Cài đặt dịch vụ nấu bia

brew tap homebrew/services

Để bắt đầu postgres như một dịch vụ nền

brew services start postgresql

Để dừng postgres theo cách thủ công

brew services stop postgresql

Chúng tôi cũng có thể sử dụng các dịch vụ nấu bia để khởi động lại Postgres

brew services restart postgresql

1

kiểm tra máy chủ postgres đang chạy bằng mã sau

sudo service postgresql status

nếu máy chủ postgres không hoạt động, hãy viết lệnh sau.

sudo service postgresql start

1

Tôi gặp lỗi này sau khi máy tính của tôi bị đóng băng và tự khởi động lại. Giải pháp cho tôi không được tìm thấy trên trang này, thay vì trên một câu hỏi SO được đánh giá rất cao khác với cùng một lỗi 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) . Câu trả lời: chỉ cần xóa tệp này /usr/local/var/postgres/postmaster.pid, sau đó brew services restart postgresqlđã thực hiện thủ thuật. Chú ý đến cảnh báo trên câu trả lời được liên kết về việc giết các quy trình postgres trước khi thực hiện việc này, bạn có thể làm hỏng db của mình vĩnh viễn.


0

Quyền đối với tệp bị hạn chế trên db Postgres do Mac OS sở hữu. Các quyền này được đặt lại sau khi khởi động lại hoặc khởi động lại Postgres: ví dụ: serveradmin start postgres.

Vì vậy, hãy tạm thời đặt lại các quyền hoặc quyền sở hữu:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

Đặt lại quyền không an toàn, vì vậy hãy cài đặt phiên bản db mà bạn sở hữu để có giải pháp.


0

Tôi đã mất một khoảng thời gian nhưng cuối cùng tôi đã có thể làm cho việc này hoạt động sau khi xem qua các đề xuất được cung cấp và các tìm kiếm web bổ sung được thực hiện. Tôi đã sử dụng thông tin trong video YouTube sau do Mactasia tạo:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Khi tôi làm điều này, tôi thấy tệp có .lock làm phần mở rộng. Tuy nhiên, tôi vẫn gặp lỗi khi cố khởi động Máy chủ Rails khi tiếp tục làm việc trên ứng dụng Rails của mình bằng PostgreSQL. Lần này tôi nhận được một sự cho phép bị từ chối lỗi. Đây là lúc tôi nhớ rằng tôi không chỉ phải thay đổi địa chỉ listening_addresses trong plist mà còn phải thay đổi unit_socket_permissions thành 0777. Tôi cũng đăng nhập với quyền root để thay đổi quyền trên thư mục var / pgsql_socket nơi tôi có thể truy cập nó tại cấp độ người dùng. Postgres hiện đang hoạt động tốt. Tôi đang trong quá trình tải lại dữ liệu từ bản sao lưu SQL của mình.

Điều tôi không hiểu là khi tôi bật wiki, PostgreSQL được cho là hoạt động khi tôi thực hiện một postgres sudo serveradmin fullstatus nhưng tôi vẫn gặp lỗi. Ồ tốt.


0

Tôi vừa tạo một cụm mới và điều đó phù hợp với tôi, tôi đang sử dụng (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start

0

Đầu tiên hãy xóa các postgres đã cài đặt:

sudo apt-get purge postgr*
sudo apt-get autoremove

Sau đó cài đặt 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Sau đó cài đặt Postgres

sudo apt-get install postgresql postgresql-contrib

0

Đối với ứng dụng RubyOnRails, hãy thêm vào localhost Nếu bạn sử dụng phiên bản Postgresql tùy chỉnh

# config/database.yml
default: &default
  host: localhost
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.