Saya mendapatkan kesalahan:
FATAL: Peer authentication failed for user "postgres"
ketika saya mencoba membuat postgres bekerja dengan Rails.
Ini milikku pg_hba.conf
, milikku database.yml
, dan setumpuk jejak penuh .
Saya mengubah otentikasi ke md5 di pg_hba dan mencoba hal-hal yang berbeda, tetapi tidak ada yang berhasil.
Saya juga mencoba membuat pengguna dan basis data baru sesuai Rails 3.2, FATAL: Otentikasi rekan gagal untuk pengguna (PG :: Kesalahan)
Tetapi mereka tidak muncul di pgadmin atau bahkan ketika saya berlari sudo -u postgres psql -l
.
Tahu di mana saya salah?
ruby-on-rails
postgresql
pesanan1
sumber
sumber
localhost
tetapi berhasil127.0.0.1
.host: localhost
dalamdatabase.yml
berkas.Jawaban:
Masalahnya masih
pg_hba.conf
file Anda (/etc/postgresql/9.1/main/pg_hba.conf*
).Garis ini:
Seharusnya:
* Jika Anda tidak dapat menemukan file ini, menjalankan
locate pg_hba.conf
harus menunjukkan di mana file tersebut berada.Setelah mengubah file ini, jangan lupa untuk me-restart server PostgreSQL Anda. Jika Anda menggunakan Linux, itu mungkin
sudo service postgresql restart
.Ini adalah deskripsi singkat dari kedua opsi menurut dokumen resmi PostgreSQL tentang metode otentikasi .
Otentikasi rekan
Otentikasi kata sandi
Lokasi sampel untuk
pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
sumber
/etc/init.d/postgresql reload
/etc/postgresql/9.1/main/pg_hba.conf
sudo service postgreql restart
juga berfungsi.Setelah menginstal Postgresql saya melakukan langkah-langkah di bawah ini.
buka file
pg_hba.conf
untuk Ubuntu itu akan di/etc/postgresql/9.x/main
dan ubah baris ini:untuk
Mulai ulang server
Masuk ke psql dan atur kata sandi Anda
Akhirnya ubah
pg_hba.conf
dariuntuk
Setelah me-restart server postgresql, Anda dapat mengaksesnya dengan kata sandi Anda sendiri
Rincian metode otentikasi:
untuk referensi lebih lanjut cek di sini
sumber
sudo passwd postgres
Jika Anda terhubung melalui localhost (127.0.0.1) Anda tidak akan mengalami masalah khusus itu. Saya tidak akan banyak bercanda dengan pg_hba.conf tetapi saya akan menyesuaikan string koneksi Anda:
di mana seseorang pengguna Anda terhubung sebagai Anda dan database adalah database pengguna Anda memiliki izin untuk terhubung.
Inilah yang saya lakukan di Debian untuk mengatur postgres:
Nikmati!
sumber
host: 127.0.0.1
dari default ke localhost di config / database.yml - ini pada mesin yang sama jadi saya tidak mengerti mengapaIni berhasil bagi saya !!
sumber
Jika Anda memiliki masalah, Anda perlu menemukan
pg_hba.conf
. Perintahnya adalah:find / -name 'pg_hba.conf' 2>/dev/null
dan setelah itu ubah file konfigurasi:
Postgresql 9.3
Postgresql 9.4
Langkah selanjutnya adalah: Restart instance db Anda:
service postgresql-9.3 restart
Jika Anda memiliki masalah, Anda perlu mengatur kata sandi lagi:
ALTER USER db_user with password 'db_password';
sumber
Dalam hal ini:
Jadi ini akan diubah menjadi:
Login administrasi basis data oleh Unix domain socket local all postgres peer
Ini:
Login administratif basis data oleh Unix domain socket local all postgres md5
Kemudian restart server pg:
$> sudo service postgresql restart
Di bawah ini adalah daftar METODE yang digunakan untuk terhubung dengan postgres:
Catatan: Jika Anda belum membuat Anda pengguna postgres. Buat itu dan sekarang Anda dapat mengakses server postgres menggunakan kredensial pengguna itu.
TIP: Jika tidak berhasil setelah postgres restart maka tutup terminal dan buka lagi.
sumber
Ini menyelesaikan masalah saya
sumber
Saya memiliki masalah yang sama.
Solusi dari depa benar-benar benar.
Pastikan Anda memiliki pengguna yang dikonfigurasi untuk menggunakan PostgreSQL.
Periksa file:
Izin file ini harus diberikan kepada pengguna yang telah Anda daftarkan psql Anda.
Lebih lanjut. Jika kamu baik sampai sekarang ..
Perbarui sesuai instruksi @ depa.
yaitu
lalu lakukan perubahan.
sumber
-rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
Jika Anda ingin mempertahankan konfigurasi default tetapi menginginkan otentikasi md5 dengan koneksi soket untuk satu koneksi pengguna / db tertentu, tambahkan baris "lokal" SEBELUM baris "semua / semua lokal":
sumber
Saya sedang memindahkan direktori data pada server yang dikloning dan mengalami kesulitan untuk login sebagai postgres. Mengatur ulang kata sandi postgres seperti ini berhasil untuk saya.
sumber
Pengeditan di atas berhasil untuk saya, setelah saya tahu bahwa saya perlu me-restart server postgres setelah membuatnya. Untuk ubuntu:
sumber
Mengubah rekan METHOD menjadi percaya pada pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | line 85) menyelesaikan masalah. Menambahkan md5 meminta kata sandi, maka jika ada persyaratan untuk menghindari menggunakan kata sandi, gunakan kepercayaan alih-alih md5 .
sumber
Gunakan
host=localhost
sehubungan.sumber
perintah di bawah ini berfungsi untuk saya:
sumber
-W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
Anda hanya perlu mengatur METODE untuk dipercaya.
Dan memuat kembali server postgres.
Perubahan pg_hba.conf tidak memerlukan RESTART server postgres. hanya BANTUAN.
sumber
Banyak jawaban lain berkaitan dengan pengaturan di berbagai file konfigurasi, dan yang berkaitan dengan
pg_hba.conf
do berlaku dan 100% benar. Namun, pastikan Anda memodifikasi file konfigurasi yang benar .Seperti orang lain telah menyebutkan lokasi file konfigurasi dapat diganti dengan berbagai pengaturan di dalam file konfigurasi utama, serta menyediakan path ke file konfigurasi utama pada baris perintah dengan
-D
opsi.Anda dapat menggunakan perintah berikut saat dalam sesi psql untuk menunjukkan di mana file konfigurasi Anda sedang dibaca (dengan asumsi Anda dapat meluncurkan psql). Ini hanyalah langkah pemecahan masalah yang dapat membantu sebagian orang:
Anda juga harus memastikan bahwa direktori home untuk pengguna postgres Anda sesuai dengan yang Anda harapkan. Saya mengatakan ini karena cukup mudah untuk mengabaikan ini karena fakta bahwa prompt Anda akan menampilkan '
~
' alih-alih jalur sebenarnya dari direktori home Anda, membuatnya tidak begitu jelas. Banyak instalasi default direktori home pengguna postgres/var/lib/pgsql
.Jika tidak diatur ke apa yang seharusnya, hentikan layanan postgresql dan gunakan perintah berikut saat login sebagai root. Pastikan juga pengguna postgres tidak masuk ke sesi lain:
Terakhir, pastikan variabel PGDATA Anda diatur dengan benar dengan mengetik
echo $PGDATA
, yang akan menghasilkan sesuatu yang mirip dengan:Jika tidak disetel, atau menunjukkan sesuatu yang berbeda dari yang Anda harapkan, periksa file startup atau RC Anda seperti .profile atau .bash.rc - ini akan sangat bervariasi tergantung pada OS dan shell Anda. Setelah Anda menentukan skrip startup yang benar untuk mesin Anda, Anda dapat memasukkan yang berikut ini:
Untuk sistem saya, saya menempatkan ini
/etc/profile.d/profile.local.sh
sehingga dapat diakses untuk semua pengguna.Anda sekarang harus dapat init database seperti biasa dan semua pengaturan jalur psql Anda harus benar!
sumber
pg_config adalah untuk informasi pelengkap, untuk membantu ekstensi dan program klien menyusun dan menautkannya dengan PostgreSQL. Ia tidak tahu apa-apa tentang instance PostgreSQL aktif pada mesin, hanya binari-binari.
pg_hba.conf dapat muncul di banyak tempat lain tergantung pada bagaimana Pg dipasang. Lokasi standar adalah pg_hba.conf dalam data_directory database (yang bisa di / home, / var / lib / pgsql, / var / lib / postgresql / [versi] /, / opt / postgres /, dll dll) tetapi pengguna dan pembuat paket dapat meletakkannya di mana saja mereka suka. Sayangnya.
Satu-satunya cara yang valid untuk menemukan pg_hba.conf adalah dengan menanyakan instance PostgreSQL yang menjalankan di mana pg_hba.conf berada, atau bertanya kepada sysadmin di mana letaknya. Anda bahkan tidak dapat bergantung pada bertanya di mana datadir berada dan mem-parsing postgresql.conf karena skrip init mungkin melewati param seperti -c hba_file = / some / other / path ketika memulai Pg.
Yang ingin Anda lakukan adalah bertanya pada PostgreSQL:
Perintah ini harus dijalankan pada sesi pengguna super, jadi untuk skrip shell Anda dapat menulis sesuatu seperti:
dan atur variabel lingkungan PGUSER, PGDATABASE, dll untuk memastikan bahwa koneksi benar.
Ya, ini agak masalah ayam-dan-telur, dalam hal itu jika pengguna tidak dapat terhubung (katakanlah, setelah mengacaukan pengeditan pg_hba.conf) Anda tidak dapat menemukan pg_hba.conf untuk memperbaikinya.
Pilihan lain adalah untuk melihat output perintah ps dan melihat apakah argumen direktori data postmaster -D terlihat di sana, misalnya
karena pg_hba.conf akan berada di dalam direktori data (kecuali jika Anda menggunakan Debian / Ubuntu atau turunan dan menggunakan paket-paket mereka).
Jika Anda menargetkan secara khusus sistem Ubuntu dengan PostgreSQL terinstal dari paket Debian / Ubuntu, itu akan menjadi sedikit lebih mudah. Anda tidak harus berurusan dengan Pg yang dikompilasi dengan tangan dari sumber yang initdb milik seseorang di dir rumah mereka, atau menginstal EnterpriseDB Pg di / opt, dll. Anda dapat meminta pg_wrapper, multi Debian / Ubuntu multi -version Pg manager, di mana PostgreSQL menggunakan perintah pg_lsclusters dari pg_wrapper.
Jika Anda tidak dapat terhubung (Pg tidak berjalan, atau Anda perlu mengedit pg_hba.conf untuk terhubung) Anda harus mencari file pg_hba.conf sistem. Di Mac dan Linux, sesuatu seperti sudo find / -type f -name pg_hba.conf akan berfungsi. Kemudian periksa file PG_VERSION di direktori yang sama untuk memastikan itu adalah versi PostgreSQL yang tepat jika Anda memiliki lebih dari satu. (Jika pg_hba.conf di / etc /, abaikan ini, itu adalah nama direktori induk). Jika Anda memiliki lebih dari satu direktori data untuk versi PostgreSQL yang sama, Anda harus melihat ukuran basis data, periksa baris perintah postgres yang berjalan dari ps untuk melihat apakah direktori data -D argumen yang cocok dengan tempat Anda mengedit, dll. . /ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
sumber
Masalah saya adalah bahwa saya tidak mengetikkan server apa pun. Saya pikir ini adalah default karena placeholder tetapi ketika saya mengetik localhost itu berhasil.
sumber
Jika Anda mencoba mencari file ini di Cloud 9, Anda dapat melakukannya
Tekan
I
untuk mengedit / menyisipkan, tekanESC
3 kali dan ketik:wq
akan menyimpan file dan berhentisumber
Jika Anda menghadapi masalah ini dengan rails dan Anda tahu bahwa Anda telah membuat nama pengguna itu dengan kata sandi bersama dengan hak-hak yang benar, maka Anda hanya perlu memasukkan berikut di akhir file database.yml Anda.
keseluruhan file akan terlihat seperti di bawah ini
Anda tidak perlu menyentuh
pg_hba.conf
file Anda sama sekali. Selamat codingsumber
Solusi paling sederhana tanpa mengubah konfigurasi. (ubuntu) Ubah pengguna, lalu sambungkan ke basis data klien.
diambil dari https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
sumber