Tidak dapat terhubung ke postgresql pada port 5432


82

Saya menginstal tumpukan Bitnami Django yang termasuk PostgreSQL 8.4.

Ketika saya menjalankan psql -U postgressaya mendapatkan kesalahan berikut:

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 sudah pasti berjalan dan pg_hba.conffile terlihat seperti ini:

# 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

Apa yang menyebabkannya?

"Bukti" yang dijalankan pg:

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# 

Saya tidak tahu apa yang Anda minta dan Anda tidak pernah memberikan masukan. Ini adalah 100 orang yang mendapatkan kesalahan umum dan melaporkan hal-hal yang berbeda. Ini sepenuhnya keluar dari format untuk situs.
Evan Carroll

Jawaban:


87

Masalah ini berasal dari menginstal postgrespaket tanpa nomor versi. Meskipun postgresakan diinstal dan ini akan menjadi versi yang benar, skrip untuk mengatur cluster tidak akan berjalan dengan benar; ini masalah pengemasan.

Jika Anda merasa nyaman dengan postgresskrip yang dapat Anda jalankan untuk membuat kluster ini dan mulai postgresberjalan. Namun, ada cara yang lebih mudah.

Pertama-tama bersihkan instalasi postgres lama. Masalahnya saat ini terletak pada 9.1 jadi saya akan menganggap itu yang telah Anda instal

sudo apt-get remove --purge postgresql-9.1

Sekarang cukup instal ulang

sudo apt-get install postgresql-9.1

Catat nama paket dengan nomor versi. HTH.


3
ini membantu saya dengan postgres 9.3.
sevenseacat

1
Ini harus menjadi jawaban yang diterima, bekerja dengan postgres 9.4 / ubuntu 14.10, juga
Malte

1
jawaban ini membantu saya dengan postgres 9.4 dan 9.3 mixup. Keren.
ingo

2
Bekerja untuk ubuntu 16.04 dan postgres 9.5, tetapi harus membersihkan setiap paket terkait postgres terlebih dahulu.
Malam

2
Ini benar-benar jawaban yang luar biasa! Dan juga pengalaman pengguna yang mengerikan di sisi postgres
user1952500

23

Pesan kesalahan mengacu pada soket Unix-domain, jadi Anda perlu mengubah netstatpermintaan Anda untuk tidak mengecualikannya. Jadi cobalah tanpa opsi -t:

netstat -nlp | grep 5432

Saya kira server benar-benar mendengarkan pada soket /tmp/.s.PGSQL.5432daripada /var/run/postgresql/.s.PGSQL.5432klien Anda mencoba untuk terhubung. Ini adalah masalah yang khas ketika menggunakan paket PostgreSQL yang dikompilasi dengan tangan atau pihak ketiga pada Debian atau Ubuntu, karena sumber default untuk direktori socket domain-Unix adalah /tmptetapi kemasan Debian mengubahnya /var/run/postgresql.

Solusi yang mungkin:

  • Gunakan klien yang disediakan oleh paket pihak ketiga Anda (panggilan /opt/djangostack-1.3-0/postgresql/bin/psql). Mungkin uninstall paket yang disediakan Ubuntu sama sekali (mungkin sulit karena dependensi terbalik lainnya).
  • Perbaiki direktori socket dari paket pihak ketiga agar kompatibel dengan Debian / Ubuntu.
  • Gunakan -H localhostuntuk terhubung melalui TCP / IP sebagai gantinya.
  • Gunakan -h /tmpatau PGHOSTpengaturan yang setara untuk menunjuk ke direktori yang benar.
  • Jangan gunakan paket pihak ketiga.

19

Ini bekerja untuk saya:

Edit: postgresql.conf

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

Aktifkan atau tambahkan:

listen_addresses = '*'

Mulai ulang mesin basis data:

sudo service postgresql restart

Anda juga dapat memeriksa file pg_hba.conf

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

Dan tambahkan jaringan atau alamat host Anda:

host    all             all             192.168.1.0/24          md5

the listen_address = '*' berhasil. itu hanya mendengarkan di "localhost" dan bukan di 127.0.0.1. Terima kasih!
mwm

Ya Tuhan ... akhirnya sesuatu yang berhasil - tidak ada yang bekerja sampai saya menambahkan alamat dan listen_address uncommented.
AntonB

Tambah satu! Itu berhasil untuk saya.
Atul Makwana

1
ini berfungsi di ubuntu windows bash.
ahmadalibaloch

Saya dapat mengonfirmasi bahwa itu berfungsi pada perintah bash Server Ubuntu di Windows 10.
Ronald

18

Anda dapat menggunakan psql -U postgres -h localhostuntuk memaksa koneksi terjadi melalui TCP bukan soket domain UNIX; netstatoutput Anda menunjukkan bahwa server PostgreSQL mendengarkan pada port localhost 5432.

Anda dapat mengetahui soket UNIX lokal mana yang digunakan oleh server PostgrSQL dengan menggunakan invokasi yang berbeda dari netstat :

netstat -lp --protocol=unix | grep postgres

Bagaimanapun, antarmuka tempat server PostgreSQL mendengarkan untuk dikonfigurasikan postgresql.conf.


17

Cukup buat softlink seperti ini:

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

1
Ini bekerja untuk saya dan tampaknya menjadi solusi termudah tanpa harus mengubah konfigurasi postgresql Anda. Pastikan Anda superuser ketika mencoba membuat tautan.
brendan

2
ln: gagal membuat tautan simbolik '/var/run/postgresql/.s.PGSQL.5432': File ada
P_M

Saya telah membuat folder "postgresql" di direktori / var / run /. Itu tidak ada.
Ikrom

Bekerja luar biasa, apa alasan di balik ini?
Teoman shipahi

7

Saya membuatnya bekerja dengan melakukan ini:

dpkg-reconfigure locales

Pilih lokasi yang Anda sukai lalu jalankan

pg_createcluster 9.5 main --start

(9.5 adalah versi postgresql saya)

/etc/init.d/postgresql start

dan kemudian itu berhasil!

sudo su - postgres
psql

Hah, maaf, saya pikir perintahnya sudah jelas. bagi saya, saya memenuhi masalah ini ketika saya menginstal ulang postgresql, saya mencoba untuk me-restart berdasarkan jenis service postgresql restart tetapi ia mengatakan saya tidak memiliki cluster postgresql. Kemudian saya menemukan cara ini untuk membantu saya :)
mymusise

Nah setelah tiga jam Googling Anda akhirnya memperbaiki masalah saya. dpkg-reconfigure localessangat penting.
Don Mums

5

Saya harus mengkompilasi PostgreSQL 8.1 pada Debian Squeeze karena saya menggunakan Project Open, yang didasarkan pada OpenACS dan tidak akan berjalan pada versi PostgreSQL yang lebih baru.

Konfigurasi default kompilasi menempatkan unix_socketdi /tmp, tapi Proyek Terbuka, yang bergantung pada PostgreSQL, tidak akan bekerja karena terlihat untuk unix_socketdi /var/run/postgresql.

Ada pengaturan postgresql.confuntuk mengatur lokasi soket. Masalah saya adalah apakah saya dapat mengatur /tmpdan psqlbekerja, tetapi tidak membuka proyek, atau saya dapat mengaturnya /var/run/postgresqldan psqltidak akan bekerja tetapi proyek terbuka melakukannya.

Satu resolusi untuk masalah ini adalah untuk mengatur soket untuk /var/run/postgresqldan kemudian berjalan psql, berdasarkan saran Peter, sebagai:

psql -h /var/run/postgresql

Ini berjalan secara lokal menggunakan izin lokal. Satu-satunya kelemahan adalah lebih mengetik daripada hanya "psql".

Saran lain yang dibuat seseorang adalah membuat tautan simbolis antara kedua lokasi. Ini juga berhasil, tetapi tautannya menghilang saat reboot. Mungkin lebih mudah menggunakan argumen -h, namun, saya membuat tautan simbolik dari dalam skrip PostgreSQL di /etc/init.d. Saya menempatkan perintah tautan simbolis buat di bagian "mulai". Tentu saja, ketika saya mengeluarkan perintah berhenti dan mulai atau mulai ulang, itu akan mencoba untuk membuat ulang tautan simbolik yang ada, tetapi selain pesan peringatan, mungkin tidak ada salahnya.

Dalam kasus saya, alih-alih:

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

saya sudah

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

dan telah secara eksplisit mengatur unix_socket ke /var/run/postgresql/.s.PGSQL.5432dalam postgresql.conf.


3

Larutan:

Melakukan hal ini

export LC_ALL="en_US.UTF-8"

dan ini. ( 9.3 adalah versi PostgreSQL saya saat ini. Tulis versi Anda!)

sudo pg_createcluster 9.3 main --start

woooow, itu satu-satunya pemecahan masalah saya, terima kasih.
user3687723

3

Jika layanan Postgres Anda aktif dan berjalan tanpa kesalahan atau tidak ada kesalahan dalam memulai layanan Postgres dan Anda masih mendapatkan kesalahan yang disebutkan, ikuti langkah-langkah ini

Langkah1: Menjalankan pg_lsclustersakan mencantumkan semua cluster postgres yang berjalan di perangkat Anda

misalnya:

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

kemungkinan besar statusnya akan turun di kasing Anda dan layanan postgres

Langkah 2: Mulai ulang pg_ctlcluster

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

#restart postgres
sudo service postgres restart

Langkah 3: Langkah 2 gagal dan melempar kesalahan

Jika proses ini tidak berhasil maka akan terjadi kesalahan. Anda dapat melihat kesalahan logon/var/log/postgresql/postgresql-9.6-main.log

Kesalahan saya adalah:

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`

Langkah 4: periksa kepemilikan postgres

Pastikan itu postgresadalah pemilik/var/lib/postgresql/version_no/main

Jika tidak, jalankan

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

Langkah 5: Periksa pengguna postgres milik kelompok pengguna ssl-cert

Ternyata saya salah menghapus pengguna Postgres dari ssl-certgrup. Jalankan kode di bawah ini untuk memperbaiki masalah grup pengguna dan memperbaiki izin

#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

Dalam kasus saya itu disebabkan oleh kesalahan ketik yang saya buat saat mengedit /etc/postgresql/9.5/main/pg_hba.conf

Aku berubah:

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

untuk:

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

Tetapi MD5harus huruf kecil md5:

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

1
Ini adalah jawaban yang memperbaikinya untuk saya :) Saya sebelumnya telah mengubah milik saya menjadi trustedbukan trust, dan tidak memulai kembali layanan, dan itu hanya memecahkan hari berikutnya ketika saya sudah lupa apa yang saya ubah
Phlippie Bosman

2

Saya menemukan mencopot Postgres terdengar tidak meyakinkan. Ini membantu menyelesaikan masalah saya:

  1. Mulai server postgres:

    sudo systemctl start postgresql
    
  2. Pastikan server mulai saat boot:

    sudo systemctl enable postgresql
    

Informasi detail dapat ditemukan di situs DigitalOcean Di Sini.


2

Saya gagal menyelesaikan masalah ini dengan server postgres-9.5 saya. Setelah 3 hari kemajuan nol mencoba setiap permutasi dari perbaikan ini dan situs lain saya memutuskan untuk menginstal ulang server dan kehilangan pekerjaan selama 5 hari. Tapi, saya mereplikasi masalah pada contoh baru. Ini mungkin memberikan beberapa perspektif tentang cara memperbaikinya sebelum Anda mengambil pendekatan katastropik yang saya lakukan.

Pertama, nonaktifkan semua pengaturan logging di postgresql.conf. Ini bagiannya:

# ERROR REPORTING AND LOGGING

Komentari semua yang ada di bagian itu. Kemudian mulai kembali layanan.

Saat memulai ulang, gunakan /etc/init.d/postgresql start atau restart saya merasa terbantu berada dalam mode superuser saat memulai kembali. Saya membuka x-window hanya untuk operasi itu. Anda dapat menetapkan mode superuser dengan sudo -i.

Verifikasi bahwa server dapat dihubungi dengan perintah sederhana ini: psql -l -U postgres

Jika itu tidak memperbaikinya, maka pertimbangkan ini:

Saya mengubah kepemilikan pada banyak folder ketika mencoba menemukan solusi. Saya tahu bahwa saya mungkin akan mencoba untuk mengembalikan kepemilikan folder dan chmodselama 2 hari lagi. Jika Anda telah mengacaukan kepemilikan folder tersebut dan tidak ingin membersihkan server Anda sepenuhnya, maka mulailah melacak pengaturan untuk semua folder yang terkena dampak untuk membawanya kembali ke keadaan semula. Anda mungkin ingin mencoba melakukan instalasi paralel pada sistem lain dan secara sistematis memeriksa kepemilikan dan pengaturan semua folder. Melelahkan, tetapi Anda mungkin bisa mendapatkan akses ke data Anda.

Setelah Anda mendapatkan akses, ubah secara sistematis setiap baris yang relevan di # ERROR REPORTING AND LOGGINGbagian postgresql.conffile. Mulai ulang dan uji. Saya menemukan bahwa folder default untuk log menyebabkan kegagalan. Saya secara khusus berkomentar log_directory. Folder default yang digunakan sistem untuk memasukkan log /var/log/postgresql.


1

Mungkin itu bisa terjadi karena Anda mengubah izin /var/lib/postgresql/9.3/mainfolder.

Coba ubah ke 700 menggunakan perintah di bawah ini:

sudo chmod 700 main

1

Ini tidak persis terkait dengan pertanyaan karena saya menggunakan Flask, tetapi ini adalah kesalahan yang saya dapatkan dan ini adalah utas yang paling relevan untuk mendapatkan ide.

Setup saya: Windows Subsystem untuk Linux, Docker-compose dengan makefile dengan dockerfile, Flask, Postgresql (menggunakan skema yang terdiri dari tabel)

Untuk terhubung ke postgres, atur string koneksi Anda seperti ini:

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

CATATAN: Saya tidak pernah mendapatkan IP apa pun (misalnya localhost, 127.0.0.1) untuk bekerja menggunakan metode apa pun di utas ini. Gagasan untuk menggunakan nama wadah alih-alih localhost berasal dari sini: https://github.com/docker-library/postgres/issues/297

Tetapkan skema Anda:

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

Tetapkan jalur pencarian Anda untuk fungsi-fungsi Anda ketika Anda mengatur sesi Anda:

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

0

Saya memiliki masalah yang sama persis seperti yang dijelaskan Peter Eisentraut. Menggunakan netstat -nlp | grep 5432perintah, saya bisa melihat server mendengarkan pada socket /tmp/.s.PGSQL.5432.

Untuk memperbaiki ini, cukup edit postgresql.conffile Anda dan ubah baris berikut:

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

Sekarang jalankan service postgresql-9.4 restart(Ganti 9-4 dengan versi Anda), dan koneksi jarak jauh seharusnya berfungsi sekarang.

Sekarang untuk mengizinkan koneksi lokal, cukup buat tautan simbolis ke /var/run/postgresqldirektori.

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

Jangan lupa untuk memastikan bahwa Anda pg_hba.confdikonfigurasi dengan benar juga.


0

Dalam kasus saya, yang harus saya lakukan adalah ini:

sudo service postgresql restart

lalu

sudo -u postgres psql

Ini bekerja dengan baik. Semoga ini bisa membantu. Ceria :).


0

Temukan file Anda:

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

Hasil:

/tmp/.s.PGSQL.5432

Login sebagai pengguna postgres:

su postgres
psql -h /tmp/ yourdatabase

0

Saya memiliki masalah yang sama (di Ubuntu 15.10 (wily)). sudo find / -name 'pg_hba.conf' -printatau sudo find / -name 'postgresql.conf' -printmuncul kosong. Sebelumnya tampak beberapa instal postgresql diinstal.

Anda mungkin memiliki yang serupa ketika Anda melihat diinstal, atau masalah ketergantungan daftar

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

dan seterusnya.

Dalam hal ini Anda harus sudo apt-get autoremovesetiap paket 1 per 1.

Kemudian ikuti ini ke surat dan Anda akan baik-baik saja. Terutama ketika datang untuk mengimpor kunci dan menambahkan ke daftar sumber PERTAMA

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 -

Jika tidak menggunakan wily, ganti wilydengan rilis Anda, yaitu dengan output darilsb_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

Dan kemudian Anda harus baik-baik saja dan dapat terhubung dan membuat pengguna.

Output yang diharapkan:

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

Sumber solusi saya (kredit)


0

Walaupun memiliki masalah yang sama saya mencoba sesuatu yang berbeda:

Mulai daemon postgresql secara manual, saya dapat:

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.

Jadi yang saya lakukan adalah menetapkan batas bawah untuk shared_buffersdan max_connectionske dalam postgresql.confdan restartlayanan.

Ini memperbaiki masalah!

Berikut log kesalahan lengkap:

$ 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

Setelah banyak upaya yang melelahkan, saya menemukan solusinya berdasarkan posting lain!

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

Buat direktori postgresql di dalam run dan kemudian jalankan perintah berikut.

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

0

Cukup tambahkan / tmp unix_socket_directories

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.