Không thể kết nối với postgresql trên cổng 5432


82

Tôi đã cài đặt ngăn xếp Bitnami Django bao gồm PostgreSQL 8.4.

Khi tôi chạy, psql -U postgrestôi gặp lỗi sau:

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

PG chắc chắn đang chạy và pg_hba.conftệp trông như thế này:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Đưa cái gì?

"Bằng chứng" rằng pg đang chạy:

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf# 

Tôi không biết bạn đang hỏi gì và bạn không bao giờ cung cấp đầu vào. Đây là 100 người nhận được một lỗi chung và báo cáo những điều khác nhau. Nó hoàn toàn không có định dạng cho trang web.
Evan Carroll

Câu trả lời:


87

Vấn đề này xuất phát từ việc cài đặt postgresgói không có số phiên bản. Mặc dù postgressẽ được cài đặt và nó sẽ là phiên bản chính xác, tập lệnh để thiết lập cụm sẽ không chạy chính xác; đó là một vấn đề bao bì.

Nếu bạn cảm thấy thoải mái với postgresmột tập lệnh, bạn có thể chạy để tạo cụm này và postgreschạy. Tuy nhiên, có một cách dễ dàng hơn.

Đầu tiên thanh lọc cài đặt postgres cũ. Vấn đề hiện đang nằm ở 9.1, vì vậy tôi sẽ cho rằng đó là những gì bạn đã cài đặt

sudo apt-get remove --purge postgresql-9.1

Bây giờ chỉ cần cài đặt lại

sudo apt-get install postgresql-9.1

Lưu ý tên gói với số phiên bản. HTH.


3
điều này đã giúp tôi với postgres 9.3.
Sevenseacat

1
Đây phải là câu trả lời được chấp nhận, cũng hoạt động với postgres 9,4 / ubfox 14.10
Malte

1
câu trả lời này đã giúp tôi với postgres 9,4 và 9,3 mixup. Mát mẻ.
ingo

2
Đã làm việc cho Ubuntu 16.04 và postgres 9.5, nhưng trước tiên phải thanh lọc mọi gói liên quan đến postgres.
Evert

2
Đây thực sự là một câu trả lời tuyệt vời! Và cũng là một trải nghiệm người dùng khủng khiếp về phía postgres
user1952500

23

Thông báo lỗi đề cập đến một ổ cắm tên miền Unix, vì vậy bạn cần điều chỉnh netstatlời mời của mình để không loại trừ chúng. Vì vậy, hãy thử nó mà không có tùy chọn -t:

netstat -nlp | grep 5432

Tôi đoán rằng máy chủ thực sự đang nghe trên ổ cắm /tmp/.s.PGSQL.5432chứ không phải là /var/run/postgresql/.s.PGSQL.5432máy khách của bạn đang cố gắng kết nối. Đây là một vấn đề điển hình khi sử dụng các gói PostgreSQL được biên dịch bằng tay hoặc bên thứ ba trên Debian hoặc Ubuntu, vì mặc định nguồn cho thư mục ổ cắm tên miền Unix là /tmpnhưng bao bì Debian thay đổi /var/run/postgresql.

Cách giải quyết có thể:

  • Sử dụng các máy khách được cung cấp bởi gói bên thứ ba của bạn (cuộc gọi /opt/djangostack-1.3-0/postgresql/bin/psql). Có thể gỡ cài đặt các gói do Ubuntu cung cấp hoàn toàn (có thể khó khăn vì các phụ thuộc ngược khác).
  • Sửa thư mục ổ cắm của gói bên thứ ba để tương thích với Debian / Ubuntu.
  • Sử dụng -H localhostđể kết nối qua TCP / IP thay thế.
  • Sử dụng -h /tmphoặc PGHOSTcài đặt tương đương để trỏ đến thư mục bên phải.
  • Không sử dụng các gói của bên thứ ba.

19

Điều này làm việc cho tôi:

Chỉnh sửa: postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Kích hoạt hoặc thêm:

listen_addresses = '*'

Khởi động lại công cụ cơ sở dữ liệu:

sudo service postgresql restart

Ngoài ra, bạn có thể kiểm tra tập tin pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

Và thêm mạng hoặc địa chỉ máy chủ của bạn:

host    all             all             192.168.1.0/24          md5

list_address = '*' đã thực hiện thủ thuật. nó chỉ nghe trên "localhost" chứ không phải trên 127.0.0.1. cảm ơn bạn!
mwm

chúa ơi ... cuối cùng cũng có thứ gì đó hoạt động - không có gì khác hoạt động cho đến khi tôi thêm địa chỉ và lắng nghe không chú ý.
AntonB

Cộng với một! Nó làm việc cho tôi.
Atul Makwana

1
Điều này hoạt động trên các cửa sổ Ubuntu bash.
ahmadalibaloch

Tôi có thể xác nhận rằng nó hoạt động trên lệnh bash Ubuntu Server trên Windows 10.
Ronald

18

Bạn có thể sử dụng psql -U postgres -h localhostđể buộc kết nối xảy ra trên TCP thay vì các ổ cắm tên miền UNIX; netstatđầu ra của bạn cho thấy rằng máy chủ PostgreSQL đang lắng nghe trên cổng 5432 của localhost.

Bạn có thể tìm ra ổ cắm UNIX cục bộ nào được máy chủ PostgrQuery sử dụng bằng cách sử dụng một tài liệu khác của netstat :

netstat -lp --protocol=unix | grep postgres

Ở bất kỳ giá nào, các giao diện mà máy chủ PostgreSQL lắng nghe được cấu hình postgresql.conf.


17

Chỉ cần tạo một liên kết mềm như thế này:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

1
Điều này làm việc cho tôi và dường như là giải pháp dễ nhất mà không phải thay đổi cấu hình postgresql của bạn. Hãy chắc chắn rằng bạn là siêu người dùng khi cố gắng tạo liên kết.
brendan

2
ln: không thể tạo liên kết tượng trưng '/var/run/postgresql/.s.PGQuery.5432': Tệp tồn tại
P_M

Tôi đã tạo thư mục "postgresql" trong thư mục / var / run /. Nó không tồn tại.
Ikrom

Hoạt động tuyệt vời, lý do đằng sau này là gì?
Teoman shipahi

7

Tôi làm cho nó hoạt động bằng cách làm điều này:

dpkg-reconfigure locales

Chọn địa điểm ưa thích của bạn sau đó chạy

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ó hoạt động!

sudo su - postgres
psql

Hah, xin lỗi, tôi nghĩ rằng các lệnh đã làm cho nó rõ ràng. Đối với tôi, tôi gặp vấn đề này khi tôi cài đặt lại postgresql, tôi cố gắng khởi động lại nó theo loại service postgresql restart nhưng nó nói rằng tôi không có bất kỳ cụm postgresql nào. Sau đó, tôi tìm cách này để giúp tôi thoát :)
mymusise

Vâng, sau ba giờ Google, cuối cùng bạn đã khắc phục vấn đề của tôi. dpkg-reconfigure localeslà khá quan trọng chết tiệt.
Don Mums

5

Tôi đã phải biên dịch PostgreQuery 8.1 trên Debian Squeeze vì tôi đang sử dụng Project Open, dựa trên OpenACS và sẽ không chạy trên các phiên bản PostgreQuery mới hơn.

Cấu hình biên dịch mặc định đặt unix_socketvào /tmp, nhưng Project Open, dựa trên PostgreSQL, sẽ không hoạt động vì nó tìm kiếm unix_sockettại /var/run/postgresql.

Có một cài đặt postgresql.confđể đặt vị trí của ổ cắm. Vấn đề của tôi là hoặc tôi có thể thiết lập /tmppsqllàm việc, nhưng không mở dự án hoặc tôi có thể thiết lập /var/run/postgresqlpsqlkhông hoạt động nhưng dự án mở thì có.

Một giải pháp cho vấn đề này là đặt ổ cắm cho /var/run/postgresqlrồi chạy psql, dựa trên đề xuất của Peter, như:

psql -h /var/run/postgresql

Điều này chạy cục bộ bằng cách sử dụng quyền cục bộ. Hạn chế duy nhất là nó gõ nhiều hơn đơn giản là "psql".

Một gợi ý khác mà ai đó đưa ra là tạo ra một liên kết tượng trưng giữa hai địa điểm. Điều này cũng hoạt động, nhưng, liên kết biến mất khi khởi động lại. Có thể dễ dàng hơn khi chỉ sử dụng đối số -h, tuy nhiên, tôi đã tạo liên kết tượng trưng từ trong tập lệnh PostgreQuery trong /etc/init.d. Tôi đã đặt lệnh tạo liên kết tượng trưng trong phần "bắt đầu". Tất nhiên, khi tôi đưa ra lệnh dừng và khởi động hoặc khởi động lại, nó sẽ cố gắng tạo lại một liên kết tượng trưng hiện có, nhưng ngoài thông điệp cảnh báo, có lẽ không có hại gì trong đó.

Trong trường hợp của tôi, thay vì:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Tôi có

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

và đã thiết lập một cách rõ ràng unix_socket để /var/run/postgresql/.s.PGSQL.5432postgresql.conf.


3

Giải pháp:

Làm cái này

export LC_ALL="en_US.UTF-8"

và cái này. ( 9.3 là phiên bản PostgreSQL hiện tại của tôi. Viết phiên bản của bạn!)

sudo pg_createcluster 9.3 main --start

woooow, đó là cách duy nhất giải quyết vấn đề của tôi, cảm ơn.
dùng3687723

3

Nếu dịch vụ Postgres của bạn hoạt động và không có lỗi hoặc không có lỗi khi bắt đầu dịch vụ Postgres và bạn vẫn nhận được lỗi được đề cập, hãy làm theo các bước sau

Bước 1: Chạy pg_lsclusterssẽ liệt kê tất cả các cụm postgres đang chạy trên thiết bị của bạn

ví dụ:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

rất có thể tình trạng sẽ giảm trong trường hợp của bạn và dịch vụ postgres

Bước 2: Khởi động lại pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgres
sudo service postgres restart

Bước 3: Bước 2 thất bại và ném lỗi

Nếu quá trình này không thành công, nó sẽ gây ra lỗi. Bạn có thể thấy nhật ký lỗi trên/var/log/postgresql/postgresql-9.6-main.log

Lỗi của tôi là:

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Bước 4: kiểm tra quyền sở hữu của postgres

Hãy chắc chắn rằng đó postgreslà chủ sở hữu của/var/lib/postgresql/version_no/main

Nếu không, hãy chạy

sudo chown postgres -R /var/lib/postgresql/9.6/main/

Bước 5: Kiểm tra người dùng postgres thuộc nhóm người dùng ssl-cert

Hóa ra tôi đã xóa nhầm người dùng Postgres khỏi ssl-certnhóm. Chạy mã dưới đây để khắc phục sự cố nhóm người dùng và sửa quyền

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

2

Trong trường hợp của tôi, đó là do lỗi đánh máy tôi đã tạo trong khi chỉnh sửa /etc/postgresql/9.5/main/pg_hba.conf

Tôi đã thay đổi:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

đến:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

Nhưng MD5phải viết thường md5:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

1
Đây là câu trả lời đã sửa nó cho tôi :) Trước đây tôi đã đổi nó thành trustedthay thế trustvà không khởi động lại dịch vụ và nó chỉ bị
hỏng

2

Tôi thấy gỡ cài đặt Postgres nghe có vẻ không thuyết phục. Điều này giúp giải quyết vấn đề của tôi:

  1. Bắt đầu máy chủ postgres:

    sudo systemctl start postgresql
    
  2. Đảm bảo rằng máy chủ bắt đầu khởi động:

    sudo systemctl enable postgresql
    

Thông tin chi tiết có thể được tìm thấy trên trang web DigitalOcean Tại đây.


2

Tôi không thể giải quyết vấn đề này với máy chủ postgres-9.5 của tôi. Sau 3 ngày không tiến triển, thử mọi hoán vị sửa chữa trên trang này và các trang khác, tôi quyết định cài đặt lại máy chủ và mất 5 ngày làm việc. Nhưng, tôi đã sao chép vấn đề trên ví dụ mới. Điều này có thể cung cấp một số quan điểm về cách khắc phục nó trước khi bạn thực hiện phương pháp thảm khốc mà tôi đã làm.

Đầu tiên, vô hiệu hóa tất cả các cài đặt ghi nhật ký trong postgresql.conf. Đây là phần:

# ERROR REPORTING AND LOGGING

Nhận xét tất cả mọi thứ trong phần đó. Sau đó khởi động lại dịch vụ.

Khi khởi động lại, sử dụng /etc/init.d/postgresql start hoặc restart tôi thấy hữu ích khi ở chế độ siêu người dùng trong khi khởi động lại. Tôi đã mở một cửa sổ x cho hoạt động đó. Bạn có thể thiết lập chế độ siêu người dùng đó vớisudo -i .

Xác minh rằng máy chủ có thể đạt được bằng lệnh đơn giản này: psql -l -U postgres

Nếu điều đó không khắc phục được, thì hãy xem xét điều này:

Tôi đã thay đổi quyền sở hữu trên nhiều thư mục trong khi cố gắng tìm giải pháp. Tôi biết rằng có lẽ tôi đang cố gắng hoàn nguyên các quyền sở hữu thư mục đó và chmodthêm 2 ngày nữa. Nếu bạn đã gặp rắc rối với quyền sở hữu thư mục đó và không muốn thanh lọc hoàn toàn máy chủ của mình, thì hãy bắt đầu theo dõi cài đặt cho tất cả các thư mục bị ảnh hưởng để đưa chúng trở lại trạng thái ban đầu. Bạn có thể muốn thử cài đặt song song trên một hệ thống khác và kiểm tra một cách có hệ thống quyền sở hữu và cài đặt của tất cả các thư mục. Tàn nhẫn, nhưng bạn có thể có quyền truy cập vào dữ liệu của bạn.

Khi bạn có quyền truy cập, thay đổi một cách có hệ thống từng dòng có liên quan trong # ERROR REPORTING AND LOGGINGphần của postgresql.conftệp. Khởi động lại và kiểm tra. Tôi thấy rằng thư mục mặc định cho các bản ghi đã gây ra lỗi. Tôi đặc biệt nhận xét ra log_directory. Thư mục mặc định hệ thống sẽ thả các bản ghi vào đó /var/log/postgresql.


1

Có thể nó đã xảy ra vì bạn đã thay đổi quyền của /var/lib/postgresql/9.3/mainthư mục.

Hãy thử thay đổi nó thành 700 bằng cách sử dụng lệnh dưới đây:

sudo chmod 700 main

1

Điều này không liên quan chính xác đến câu hỏi vì tôi đang sử dụng Flask, nhưng đây là lỗi chính xác mà tôi gặp phải và đây là chủ đề phù hợp nhất để lấy ý tưởng.

Thiết lập của tôi: Hệ thống con Windows cho Linux, Docker-compose w / makefile w / dockerfile, Flask, Postgresql (sử dụng lược đồ bao gồm các bảng)

Để kết nối với postgres, hãy thiết lập chuỗi kết nối của bạn như thế này:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

LƯU Ý: Tôi chưa bao giờ có bất kỳ IP nào (ví dụ localhost, 127.0.0.1) để hoạt động bằng bất kỳ phương thức nào trong chuỗi này. Ý tưởng sử dụng tên container thay vì localhost xuất phát từ đây: https://github.com/docker-l Library / postgres /issues/297

Đặt lược đồ của bạn:

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

Đặt đường dẫn tìm kiếm cho các chức năng của bạn khi bạn thiết lập phiên của mình:

db.session.execute("SET search_path TO <schema_name>")

0

Tôi đã có cùng một vấn đề chính xác Peter Eisentraut mô tả. Sử dụng netstat -nlp | grep 5432lệnh, tôi có thể thấy máy chủ đang lắng nghe ổ cắm /tmp/.s.PGSQL.5432.

Để khắc phục điều này, chỉ cần chỉnh sửa postgresql.conftệp của bạn và thay đổi các dòng sau:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

Bây giờ hãy chạy service postgresql-9.4 restart(Thay thế 9-4 bằng phiên bản của bạn) và các kết nối từ xa sẽ hoạt động ngay bây giờ.

Bây giờ để cho phép các kết nối cục bộ, chỉ cần tạo một liên kết tượng trưng đến /var/run/postgresqlthư mục.

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Đừng quên đảm bảo rằng bạn pg_hba.confcũng được cấu hình đúng.


0

Trong trường hợp của tôi, tất cả những gì tôi phải làm là:

sudo service postgresql restart

và sau đó

sudo -u postgres psql

Điều này làm việc tốt. Hy vọng nó giúp. Chúc mừng :).


0

Tìm tập tin của bạn:

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

Kết quả:

/tmp/.s.PGSQL.5432

Đăng nhập với tư cách người dùng postgres:

su postgres
psql -h /tmp/ yourdatabase

0

Tôi gặp vấn đề tương tự (trên Ubuntu 15.10 (wily)). sudo find / -name 'pg_hba.conf' -printhoặc sudo find / -name 'postgresql.conf' -printbật lên trống rỗng. Trước đó, có vẻ như nhiều phiên bản của postgresql đã được cài đặt.

Bạn có thể có tương tự khi bạn thấy như đã cài đặt hoặc liệt kê các vấn đề phụ thuộc

.../postgresql
.../postgresql-9.x 

vân vân

Trong trường hợp đó, bạn phải sudo apt-get autoremovemỗi gói 1 lần 1.

Sau đó làm theo thư này và bạn sẽ ổn thôi. Đặc biệt là khi nhập khóa và thêm vào danh sách nguồn ĐẦU TIÊN

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Nếu không sử dụng wily, hãy thay thế wilybằng bản phát hành của bạn, tức là bằng đầu ra củalsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

Và sau đó bạn sẽ ổn và có thể kết nối và tạo người dùng.

Sản lượng dự kiến:

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

Nguồn giải pháp của tôi (tín dụng)


0

Trong khi có cùng một vấn đề, tôi đã thử một vài thứ khác nhau:

Bắt đầu trình nền postgresql bằng tay tôi nhận được:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

Vì vậy, những gì tôi đã làm là đặt giới hạn thấp hơn cho shared_buffersmax_connectionsvào postgresql.confrestartdịch vụ.

Điều này đã khắc phục vấn đề!

Đây là nhật ký lỗi đầy đủ:

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

0

Sau nhiều nỗ lực, tôi đã tìm ra giải pháp dựa trên các bài viết khác!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres

0

Tạo thư mục postgresql bên trong chạy và sau đó chạy lệnh sau.

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

0

Chỉ cần thêm / tmp unix_socket_directories

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
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.