Saya menginstal Bitnami Django stack yang termasuk PostgreSQL 8.4.
Ketika saya menjalankan psql -U postgres
saya mendapatkan error 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 pasti berjalan dan pg_hba.conf
file akan 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" bahwa pg berjalan:
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#
Masalah ini datang dari menginstal postgres
paket tanpa nomor versi. Meskipun postgres
akan dipasang dan ini akan menjadi versi yang benar, script untuk setup cluster tidak akan berjalan dengan benar; it's a kemasan masalah.
Jika anda're nyaman dengan postgres
ada script yang dapat anda jalankan untuk membuat cluster ini dan mendapatkan postgres
running. Namun, ada's cara yang lebih mudah.
Pertama membersihkan tua install postgres. Masalah saat ini terletak 9.1 jadi saya akan berasumsi bahwa's apa yang telah anda instal
sudo apt-get remove --purge postgresql-9.1
Sekarang hanya instal ulang
sudo apt-get install postgresql-9.1
Perhatikan nama paket dengan nomor versi. HTH.
Pesan kesalahan ini mengacu pada Unix domain socket, sehingga anda perlu untuk men-tweak netstat
doa untuk tidak mengecualikan mereka. Jadi mencobanya tanpa opsi -t
:
netstat -nlp | grep 5432
Saya akan menebak bahwa server adalah benar-benar mendengarkan pada soket /tmp/.s.PGSQL.5432
daripada /var/run/postgresql/.s.PGSQL.5432
bahwa klien anda mencoba untuk menyambung ke. Ini adalah masalah khas ketika menggunakan tangan yang dikumpulkan atau pihak ketiga PostgreSQL paket pada Debian atau Ubuntu, karena sumber default untuk Unix domain socket direktori /tmp
tapi Debian kemasan perubahan itu /var/run/postgresql
.
Mungkin workarounds:
/opt/djangostack-1.3-0/postgresql/bin/psql
). Mungkin uninstall Ubuntu disediakan paket sama sekali (mungkin akan sulit karena reverse lain dependensi).-H localhost
untuk terhubung melalui protokol TCP/IP sebagai gantinya.-h /tmp
atau setara PGHOST
pengaturan untuk menunjuk ke direktori yang benar.Ini bekerja untuk saya:
Edit: postgresql.conf
sudo nano /etc/postgresql/9.3/main/postgresql.conf
Mengaktifkan atau add:
listen_addresses = '*'
Restart mesin database:
sudo service postgresql restart
Juga, anda dapat memeriksa file pg_hba.conf
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
Dan tambahkan jaringan anda atau alamat host:
host all all 192.168.1.0/24 md5
Anda dapat menggunakan psql -U postgres -h localhost
untuk memaksa koneksi terjadi melalui TCP bukan UNIX domain socket; anda netstat
output menunjukkan bahwa PostgreSQL server mendengarkan pada localhost's port 5432.
Anda dapat menemukan yang lokal UNIX soket yang digunakan oleh PostgrSQL server dengan menggunakan berbagai invocavtion dari netstat:
netstat -lp --protocol=unix | grep postgres
Pada setiap tingkat, antarmuka di mana server PostgreSQL mendengarkan dikonfigurasi dalam postgresql.conf
.
Saya membuat ini bekerja dengan melakukan hal ini:
dpkg-reconfigure locales
Memilih akomodasi yang tepat kemudian jalankan
pg_createcluster 9.5 main --start
(9.5 adalah versi saya dari postgresql)
/etc/init.d/postgresql start
dan kemudian ia bekerja!
sudo su - postgres
psql
Aku harus menyusun PostgreSQL 8.1 pada Debian Squeeze karena saya menggunakan Proyek Terbuka, yang didasarkan pada OpenACS dan tidak akan berjalan pada versi yang lebih baru dari PostgreSQL.
Default menyusun konfigurasi menempatkan unix_socket
di /tmp
, tapi Proyek Terbuka, yang bergantung pada PostgreSQL, tidak akan bekerja karena terlihat untuk unix_socket
di /var/run/postgresql
.
Ada pengaturan di postgresql.conf
untuk menetapkan lokasi dari soket. Masalah saya adalah bahwa saya bisa mengatur untuk /tmp
dan psql
bekerja, tetapi tidak terbuka proyek, atau aku bisa mengaturnya untuk /var/run/postgresql
dan psql
tidak akan bekerja tapi proyek terbuka tidak.
Salah satu resolusi untuk masalah ini adalah untuk mengatur soket /var/run/postgresql
dan kemudian jalankan psql
, berdasarkan Peter's saran, seperti:
psql -h /var/run/postgresql
Ini berjalan secara lokal dengan menggunakan izin. Satu-satunya kelemahan adalah bahwa itu adalah mengetik yang lebih dari sekedar "psql".
Lainnya saran bahwa seseorang yang dibuat untuk membuat link simbolik antara dua lokasi. Ini juga bekerja, tapi, link menghilang setelah reboot. Itu mungkin lebih mudah untuk menggunakan -h argumen, namun, saya buat link simbolik dari dalam PostgreSQL script di /etc/init.d
. Saya menempatkan link simbolik membuat perintah dalam "mulai" bagian. Tentu saja, ketika saya mengeluarkan menghentikan dan memulai atau restart perintah, ia akan mencoba untuk menciptakan aplikasi yang ada link simbolik, tapi lain dari pesan peringatan, mungkin tidak ada salahnya.
Dalam kasus saya, bukan:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Saya
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
dan secara eksplisit menetapkan unix_socket untuk /var/run/postgresql/.s.PGSQL.5432
di postgresql.conf
.
Jika anda Postgres layanan bangun dan berjalan tanpa ada kesalahan atau tidak ada kesalahan dalam memulai Postgres layanan dan anda masih mendapatkan kesalahan disebutkan, ikuti langkah-langkah berikut
pg_lsclusters
akan menampilkan semua postgres cluster yang berjalan pada perangkat andamisalnya:
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 status akan turun dalam kasus anda dan postgres layanan
#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start
#restart postgres
sudo service postgres restart
Jika proses ini tidak berhasil maka akan melempar kesalahan. Anda dapat melihat error log pada/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`
Pastikan bahwa postgres
pemilik /var/lib/postgresql/version_no/main
Jika tidak, jalankan
sudo chown postgres -R /var/lib/postgresql/9.6/main/
Ternyata bahwa aku telah keliru dihapus Postgres pengguna dari ssl-cert
kelompok. Jalankan kode di bawah ini untuk menghapus user grup masalah 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
Dalam kasus saya itu disebabkan oleh kesalahan ketik saya dibuat saat editing /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
Tapi MD5
harus huruf kecil md5
:
# Database administrative login by Unix domain socket
local all postgres md5
Aku gagal untuk memecahkan masalah ini dengan postgres-9.5 server. Setelah 3 hari dari nol kemajuan mencoba setiap permutasi dari memperbaiki ini dan situs lain saya memutuskan untuk re-install server dan kehilangan 5 hari kerja. Tapi, saya tidak meniru masalah pada instance baru. Ini mungkin memberikan beberapa perspektif tentang bagaimana untuk memperbaikinya sebelum anda mengambil bencana pendekatan yang saya lakukan.
Pertama, nonaktifkan semua pengaturan penebangan di postgresql.conf. Ini adalah bagian:
# ERROR REPORTING AND LOGGING
Komentar di semua bagian itu. Kemudian restart layanan.
Ketika restart, gunakan /etc/init.d/postgresql start
atau restart
Saya menemukan itu berguna untuk berada dalam mode superuser saat restart. Saya punya x-jendela yang terbuka hanya untuk operasi itu. Anda dapat menetapkan bahwa superuser mode dengan sudo -i
.
Memverifikasi bahwa server dapat dicapai dengan perintah sederhana ini: psql -l-U postgres
Jika itu doesn't memperbaikinya, maka pertimbangkan ini:
Saya mengubah kepemilikan di banyak folder ketika mencoba untuk menemukan solusi. Saya tahu bahwa saya'd mungkin akan mencoba untuk kembali orang-folder kepemilikan dan `chmod untuk 2 hari lagi. Jika anda telah berurusan dengan orang-orang di folder kepemilikan dan don't ingin benar-benar membersihkan server anda, kemudian mulai pelacakan pengaturan untuk semua berdampak folder untuk membawa mereka kembali ke keadaan semula. Anda mungkin ingin mencoba untuk melakukan paralel menginstal pada sistem lain dan secara sistematis memeriksa kepemilikan dan pengaturan dari semua folder. Membosankan, tapi anda mungkin bisa mendapatkan akses ke data anda.
Setelah anda mendapatkan akses, sistematis mengubah masing-masing yang relevan baris di # KESALAHAN PELAPORAN DAN LOGGING
bagian dari postgresql.conf
file. Restart dan tes. Saya menemukan bahwa folder default untuk log menyebabkan kegagalan. Saya secara khusus berkomentar out log_directory
. Default folder sistem tetes log ke kemudian /var/log/postgresql
.
Saya menemukan menghapus instalasi Postgres terdengar tidak meyakinkan. Ini membantu untuk memecahkan masalah saya:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Informasi Detail dapat ditemukan di DigitalOcean situs di Sini.
Ini bukan terkait dengan pertanyaan karena saya'm menggunakan Labu, tapi ini adalah kesalahan yang saya dapatkan dan ini adalah yang paling relevan benang untuk mendapatkan ide-ide.
Saya setup: Subsistem Windows untuk Linux, Docker-menulis w/ makefile w/ dockerfile, Labu, Postgresql (menggunakan skema yang terdiri dari tabel-tabel)
Untuk terhubung ke postgres, setup koneksi string seperti ini:
dari labu impor Labu app = Flask(__nama__) aplikasi.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"
CATATAN: saya tidak pernah punya IP (misalnya localhost, 127.0.0.1) untuk pekerjaan yang menggunakan metode apapun di thread ini. Ide untuk menggunakan wadah nama bukan localhost datang dari sini: https://github.com/docker-library/postgres/issues/297
Mengatur skema:
dari gnutella mengimpor MetaData db = Gnutella(aplikasi, metadata=MetaData(schema="<schema_name>"))
Menetapkan path pencarian untuk fungsi anda ketika anda setup sesi anda:
db.sesi.execute("SET search_path KE <schema_name>")
Saya punya masalah yang sama persis Peter Eisentraut dijelaskan. Menggunakan netstat -nlp | grep 5432
perintah, aku bisa melihat server mendengarkan pada soket /tmp/.s.PGSQL.5432
.
Untuk memperbaiki ini, hanya mengedit postgresql.conf
file dan ubah baris berikut:
listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'
Sekarang jalankan service postgresql 9.4 restart
(Mengganti 9-4 dengan versi anda), dan sambungan jarak jauh harus bekerja sekarang.
Sekarang untuk memungkinkan koneksi lokal, cukup membuat link simbolik ke /var/run/postgresql
direktori.
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
Don't lupa untuk memastikan anda pg_hba.conf
adalah dikonfigurasi dengan benar juga.
Aku punya masalah yang sama (pada Ubuntu 15.10 (cerdik)). sudo find / -name 'pg_hba.conf' -cetak
atau sudo find / -name 'postgresql.conf' -print
muncul kosong. Sebelum itu tampaknya bahwa beberapa contoh dari postgresql dipasang.
Anda mungkin memiliki yang sama ketika anda melihat seperti diinstal, atau masalah ketergantungan daftar
.../postgresql
.../postgresql-9.x
dan sebagainya.
Dalam hal ini anda harus sudo apt-get autoremove
masing-masing paket 1 by 1.
Maka berikut ini untuk surat dan anda akan baik-baik saja. Terutama ketika datang ke kunci mengimpor dan menambah 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 cerdik
dengan anda melepaskan saya.e dengan output dari lsb_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
Setelah banyak upaya melelahkan, saya menemukan solusi yang didasarkan pada 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