5432 numaralı bağlantı noktasındaki postgresql'ye bağlanılamıyor


82

Takılı bitnami Django yığın PostgreSQL 8.4 dahildir.

Çalıştırdığımda psql -U postgresaşağıdaki hatayı alıyorum:

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 kesinlikle çalışıyor ve pg_hba.confdosya şöyle görünüyor:

# 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

Ne oluyor?

Pg'nin çalıştığı "Kanıt":

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# 

Ne sorduğun hakkında hiçbir fikrim yok ve hiçbir zaman girdi sağlamadın. Bu 100 kişi genel bir hata alıp farklı şeyler rapor ediyor. Site için tamamen format dışında.
Evan Carroll,

Yanıtlar:


87

Bu sorun postgrespaketi sürüm numarası olmadan yüklemekten kaynaklanıyor . Her ne kadar postgreskurulacak ve doğru versiyonu, küme düzgün çalışmaz kurulum için komut olacaktır; bu bir paketleme sorunu.

Rahat postgresbir komut dosyası varsa, bu kümeyi oluşturmak ve postgresyayınlanmak için çalıştırabilirsiniz. Ancak, daha kolay bir yol var.

İlk önce eski postgres kurulumunu temizleyin. Sorun şu anda 9.1'de yatıyor, bu yüzden yüklediğiniz şeyin bu olduğunu varsayacağım.

sudo apt-get remove --purge postgresql-9.1

Şimdi tekrar kur

sudo apt-get install postgresql-9.1

Sürüm numarasını içeren paket adını not alın. HTH.


3
Bu bana postgres 9.3 ile yardımcı oldu.
sevenseacat

1
Bu kabul edilen cevap olmalıdır, postgres 9.4 / ubuntu 14.10 ile de çalışır
Malte

1
Bu cevap postgres 9.4 ve 9.3 karışımı ile bana yardımcı oldu. Güzel.
ingo

2
Ubuntu 16.04 ve postgres 9.5 için çalıştı, ancak önce tüm postgres paketlerini temizlemek zorunda kaldım .
Evert

2
Bu gerçekten harika bir cevap! Ve ayrıca postgres 'tarafında korkunç bir kullanıcı deneyimi
user1952500

23

Hata mesajı bir Unix alan soketi anlamına gelir, bu nedenle netstatonları dışlamamak için çağrınızı ince ayarlamanız gerekir. Yani seçenek olmadan deneyin -t:

netstat -nlp | grep 5432

Sanırım, sunucunuz istemcinin bağlanmaya çalıştığından /tmp/.s.PGSQL.5432çok soketi dinliyor /var/run/postgresql/.s.PGSQL.5432. Bu el ile derlenmiş veya üçüncü taraf PostgreSQL paketlerini Debian veya Ubuntu'da kullanırken tipik bir sorundur, çünkü Unix-domain soket dizini için kaynak varsayılanı /tmpDebian paketinin değiştirmesidir /var/run/postgresql.

Olası geçici çözümler:

  • Üçüncü taraf paketiniz tarafından verilen müşterileri kullanın (çağrı yapın /opt/djangostack-1.3-0/postgresql/bin/psql). Ubuntu tarafından sağlanan paketleri tamamen kaldırın (diğer ters bağımlılıklar nedeniyle zor olabilir).
  • Üçüncü taraf paketin soket dizinini Debian / Ubuntu ile uyumlu olacak şekilde düzeltin.
  • Kullanım -H localhostyerine TCP / IP ile bağlanmak için.
  • Sağ dizine işaret etmek için -h /tmpya da eşdeğer bir PGHOSTayar kullanın .
  • Üçüncü taraf paketlerini kullanmayın.

19

Bu benim için çalışıyor:

Düzenleme: postgresql.conf

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

Etkinleştir veya ekle:

listen_addresses = '*'

Veritabanı motorunu yeniden başlatın:

sudo service postgresql restart

Ayrıca dosyayı kontrol edebilirsiniz. pg_hba.conf

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

Ve ağınızı veya ana bilgisayar adresinizi ekleyin:

host    all             all             192.168.1.0/24          md5

listen_address = '*' numarası yaptı. 127.0.0.1'de sadece “localhost” dinliyordu ve dinlenmiyordu. teşekkür ederim!
mwm

aman tanrım ... sonunda işe yarayan bir şey - adresi ekleyene ve dinlenmeyen dinleyiciye kadar hiçbir şey işe yaramadı.
AntonB

Artı bir! Benim için çalıştı.
Atul Makwana

1
Bu ubuntu windows bash üzerinde çalışır.
ahmadalibaloch

Windows 10'da Ubuntu Server bash komutunda çalıştığını onaylayabilirim.
Ronald

18

psql -U postgres -h localhostBağlantının UNIX etki alanı soketleri yerine TCP üzerinden gerçekleşmesini zorlamak için kullanabilirsiniz ; sizin netstatçıkış PostgreSQL sunucu localhost'a port 5432 tarihinde dinliyor gösterir.

Hangi yerel UNIX soketinin PostgrSQL sunucusu tarafından farklı bir netstat çağrısı kullanarak kullanıldığını öğrenebilirsiniz :

netstat -lp --protocol=unix | grep postgres

Her halükarda, PostgreSQL sunucusunun dinlediği arayüzler konfigüre edildi postgresql.conf.


17

Sadece şunun gibi bir softlink oluşturun:

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

1
Bu benim için çalıştı ve postgresql yapılandırmanızı değiştirmek zorunda kalmadan en kolay çözüm gibi görünüyordu. Bağlantı kurmaya çalışırken süper kullanıcı olduğunuzdan emin olun.
brendan

2
ln: '/var/run/postgresql/.s.PGSQL.5432' sembolik bağlantısını oluşturamadı: Dosya var
P_M

/ Var / run / dizininde "postgresql" klasörünü oluşturdum. Var değildi.
Ikrom

Harika çalışıyor, bunun arkasındaki sebep nedir?
Teoman shipahi

7

Bunu yaparak çalışmasını sağlarım:

dpkg-reconfigure locales

Tercih ettiğiniz bölgeleri seçin, sonra koşun

pg_createcluster 9.5 main --start

(9.5, postgresql versiyonumdur)

/etc/init.d/postgresql start

ve sonra çalışıyor!

sudo su - postgres
psql

Hah, özür dilerim, komutların netleştirdiğini düşünüyorum. benim için postgresql'i yeniden kurduğumda bu sorunu yaşıyorum, türüne göre yeniden başlatmaya çalışıyorum service postgresql restart ama herhangi bir postgresql kümesinin olmadığını söylüyor. Sonra :) bana yardımcı olmak için bu yol bulmak
mymusise

Üç saatlik Googling’ten sonra nihayet sorunumu çözdün. dpkg-reconfigure localesoldukça önemli.
Don Mums,

5

PostgreSQL 8.1'i Debian Squeeze'de derlemek zorunda kaldım çünkü OpenACS'a dayanan ve OpengreSQL'in daha yeni sürümlerinde çalışmayacak olan Project Open'ı kullanıyorum.

Varsayılan derleme yapılandırma koyar unix_socketin /tmp, ancak arar çünkü PostgreSQL dayanmaktadır Proje Aç, işe yaramaz unix_socketat /var/run/postgresql.

postgresql.confSoketin konumunu ayarlamak için bir ayar var . Benim sorunum ya ben için ayarlayabilirsiniz oldu /tmpve psqlçalıştı, ama açık değil proje, ya da ben bunu ayarlayabilirsiniz /var/run/postgresqlve psqlişe yaramaz ancak proje açık yaptı.

Bu sorunun bir çözümü soketi ayarlamak /var/run/postgresqlve sonra psqlda Peter'ın önerisine göre çalıştırmaktır :

psql -h /var/run/postgresql

Bu, yerel izinleri kullanarak yerel olarak çalışır. Tek dezavantajı basitçe "psql" den daha fazla yazmaktır.

Birinin yaptığı diğer öneri, iki konum arasında sembolik bir bağlantı oluşturmaktı. Bu da işe yaradı, ancak bağlantı yeniden başlatıldığında kayboldu. Sadece -h argümanını kullanmak daha kolay olabilir, ancak sembolik bağlantıyı PostgreSQL betiğinden yazdım /etc/init.d. Sembolik link create komutunu "start" bölümüne yerleştirdim. Tabii ki, bir durdur ve başlat veya yeniden başlat komutu verdiğimde, varolan bir sembolik bağlantıyı yeniden oluşturmaya çalışacak, ancak uyarı iletisinden başka, buna hiçbir zararı olmayacak.

Benim durumumda, yerine:

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

Sahibim

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

ve açıkça karşı unix_socket belirledik /var/run/postgresql/.s.PGSQL.5432içinde postgresql.conf.


3

Çözüm:

Bunu yap

export LC_ALL="en_US.UTF-8"

ve bu. ( 9.3 benim mevcut PostgreSQL versiyonum. Versiyonunuzu yazın!)

sudo pg_createcluster 9.3 main --start

Woooow, sorunumu çözen tek şey buydu, teşekkürler.
user3687723

3

Postgres hizmetiniz sorunsuz çalışıyorsa ve sorunsuz çalışıyorsa veya Postgres hizmetini başlatmakta hata yoksa ve hala belirtilen hatayı alıyorsanız, aşağıdaki adımları izleyin.

Adım 1: Çalışan pg_lsclusters, cihazınızda çalışan tüm posta kümelerini listeler

Örneğin:

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

büyük olasılıkla durum davanızda ve postgres hizmetinde düşecek

2. Adım: pg_ctlcluster'ı yeniden başlatın

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

#restart postgres
sudo service postgres restart

3. Adım: 2. Adım başarısız oldu ve hata attı

Bu işlem başarılı olmazsa, bir hataya neden olur. Hata girişini görebilirsiniz/var/log/postgresql/postgresql-9.6-main.log

Benim hatam:

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`

Adım 4: Postgres mülklerinin kontrolünü yapın

Bunun postgressahibi olduğundan emin olun/var/lib/postgresql/version_no/main

Eğer değilse, koş

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

Adım 5: Postgres kullanıcısını ssl-cert kullanıcı grubuna ait kontrol edin

Postgres kullanıcısını yanlış bir şekilde ssl-certgruptan çıkardığım ortaya çıktı . Kullanıcı grubu sorununu gidermek ve izinleri düzeltmek için aşağıdaki kodu çalıştırı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

Benim durumumda bu düzenleme yaparken yaptığım bir yazım hatası neden oldu /etc/postgresql/9.5/main/pg_hba.conf

Ben değiştim:

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

için:

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

Ancak MD5küçük harf olmalıydı md5:

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

1
Bu benim için düzeltti cevap oldu :) Daha önce trustedyerine trust
benimkeni

2

Postgres seslerini kaldırmanın ikna edici olmadığını gördüm. Bu benim sorunumu çözmek için yardımcı olur:

  1. Postgres sunucusunu başlat:

    sudo systemctl start postgresql
    
  2. Sunucunun açılışta başladığından emin olun:

    sudo systemctl enable postgresql
    

Ayrıntılı bilgi Burada DigitalOcean sitesinde bulunabilir .


2

Postgres-9.5 sunucumla bu sorunu çözemedim. Bu ve diğer sitelerdeki her düzeltme iznini deneyen 3 günlük sıfır ilerlemeden sonra sunucuyu yeniden kurmaya ve 5 günlük çalışmamı kaybetmeye karar verdim. Ancak konuyu yeni örnek üzerine kopyaladım. Bu benim yaptığım yıkıcı yaklaşıma girmeden önce nasıl düzeltileceği konusunda bir bakış açısı sağlayabilir.

İlk olarak, postgresql.conf dosyasındaki tüm günlük ayarlarını devre dışı bırakın. Bu bölüm:

# ERROR REPORTING AND LOGGING

Bu bölümdeki her şeyi yorumlayın. Ardından hizmeti yeniden başlatın.

Yeniden başlatırken , kullanın /etc/init.d/postgresql start veya restartyeniden başlatırken süper kullanıcı modunda olmanın yararlı olduğunu gördüm. Sadece bu operasyon için bir pencere açtım. Bu süper kullanıcı modunu ile ayarlayabilirsiniz sudo -i.

Sunucuya şu basit komutla erişilebildiğini doğrulayın: psql -l -U postgres

Bu sorunu çözmezse, aşağıdakileri göz önünde bulundurun:

Bir çözüm bulmaya çalışırken birçok klasör üzerindeki mülkiyeti değiştiriyordum. Muhtemelen chmod2 gün daha bu klasör sahipliğini geri almaya çalışacağımı biliyordum . Bu klasör sahipleriyle zaten uğraştıysanız ve sunucunuzu tamamen temizlemek istemiyorsanız, etkilenen tüm klasörlerin ayarlarını orijinal durumuna geri getirmek için izlemeye başlayın. Başka bir sisteme paralel yükleme yapmayı denemek ve tüm klasörlerin sahipliğini ve ayarlarını sistematik olarak kontrol etmek isteyebilirsiniz. Sıkıcı, ama verilerinize erişebilirsin.

Erişim sağladığınızda # ERROR REPORTING AND LOGGING, postgresql.confdosya bölümündeki ilgili satırları sistematik olarak değiştirin . Yeniden başlat ve test et. Günlükleri için varsayılan klasör bir hataya neden olduğunu buldum. Özellikle yorum yaptım log_directory. Sistemin günlükleri içine bıraktığı varsayılan klasör ise /var/log/postgresql.


1

Muhtemelen, /var/lib/postgresql/9.3/mainklasörün izinlerini değiştirdiğiniz için olmuş olabilir .

Aşağıdaki komutu kullanarak onu 700 olarak değiştirmeyi deneyin:

sudo chmod 700 main

1

Bu Flask kullandığımdan beri soru ile tam olarak alakalı değil, fakat bu tam olarak aldığım hataydı ve bu fikir almak için en alakalı konu oldu.

Kurulumum: Linux için Windows Alt Sistemi, Docker-w / makefile w / dockerfile, Flask, Postgresql (tablolardan oluşan bir şema kullanarak)

Postgres'lere bağlanmak için bağlantı dizginizi bu şekilde ayarlayın:

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

NOT: Bu konudaki herhangi bir yöntemi kullanarak çalışmak için hiçbir zaman IP almam (örneğin, localhost, 127.0.0.1). Localhost yerine container adını kullanma fikri buradan geldi: https://github.com/docker-library/postgres/issues/297

Şemanızı ayarlayın:

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

Oturumunuzu ayarlarken arama yolunuzu işlevleriniz için ayarlayın:

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

0

Peter Eisentraut'un tarif ettiği de aynı sorunu yaşadım. netstat -nlp | grep 5432Komutu kullanarak sunucunun sokette dinlediğini görebiliyordum /tmp/.s.PGSQL.5432.

Bunu düzeltmek için, sadece postgresql.confdosyanızı düzenleyin ve aşağıdaki satırları değiştirin:

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

Şimdi çalıştırın service postgresql-9.4 restart(sürümünüzle 9-4 değiştirin) ve uzaktan bağlantılar şimdi çalışıyor olmalıdır.

Şimdi yerel bağlantılara izin vermek için, /var/run/postgresqldizine sembolik bir bağlantı oluşturun .

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

Sizin pg_hba.confde doğru bir şekilde yapılandırıldığından emin olun .


0

Benim durumumda tek yapmam gereken şuydu:

sudo service postgresql restart

ve sonra

sudo -u postgres psql

Bu işe yaradı. Umarım yardımcı olur. Şerefe :).


0

Dosyanızı bulun:

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

Sonuç:

/tmp/.s.PGSQL.5432

Postgres kullanıcısı olarak giriş yapın:

su postgres
psql -h /tmp/ yourdatabase

0

Ben de aynı problemi yaşadım (Ubuntu 15.10 (wily)). sudo find / -name 'pg_hba.conf' -printveya sudo find / -name 'postgresql.conf' -printboş çıktı. Bundan önce birden fazla postgresql örneği kurulu olduğu görülüyordu.

Yüklü olarak gördüğünüzde benzer olabilir veya listeye bağımlılık sorunları

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

ve bunun gibi.

Bu durumda, sudo apt-get autoremoveher paketi 1'e 1 yapmalısınız .

Sonra bunu mektuba takip ederek iyi olacaksın. Özellikle anahtar İLK kaynak listesine eklenmesi ve eklenmesi söz konusu olduğunda

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 -

Akıllıca kullanmıyorsanız, wilysürümünüzle değiştirin , yanilsb_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

Ve sonra iyi olmanız ve kullanıcılarla bağlantı kurup oluşturabilmeniz gerekir.

Beklenen çıktı:

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

Çözümlerimin Kaynağı (Krediler)


0

Aynı sorunu yaşarken farklı bir şey denedim:

Postgresql arka planını elle başlatıyorum:

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.

Yani ne yaptığını için bir alt limit belirlerken oldu shared_buffersve max_connectionsiçine postgresql.confve restarthizmet.

Bu sorun çözüldü!

İşte tam hata günlüğü:

$ 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

Çok yorucu denemeden sonra, çözümü diğer yayınlara dayanarak buldum!

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

Çalışma içinde postgresql dizini oluşturun ve aşağıdaki komutu çalıştırın.

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

0

Basitçe / tmp unix_socket_directories ekleyin

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.