Konvensi untuk PostgreSQL yang dikemas untuk Debian atau turunan Debian seperti Ubuntu adalah menggunakan /var/run/postgresql
sebagai direktori untuk soket domain Unix. Di sisi lain, konvensi untuk lib klien postgres yang dikompilasi sendiri adalah menggunakan /tmp
, kecuali jika dikonfigurasi sendiri sebaliknya.
Jadi akar penyebab umum ketidakcocokan antara keduanya adalah campuran dari hal-hal sisi klien yang dikompilasi sendiri dengan paket sisi server yang telah dikompilasi sebelumnya (bahkan jika klien dan server diinstal pada mesin yang sama, sisi klien dan sisi server adalah masih berbeda dan bisa tidak sinkron).
Tautan lunak dari /tmp
ke direktori ini seperti yang disarankan oleh penanya berfungsi kecuali bahwa tautan akan hilang setiap kali reboot, karena secara umum /tmp
dikosongkan saat reboot.
Opsi yang lebih baik adalah menambahkan sebagai entri di database.yml
:
-
baik
host: /tmp
jika jalur soket sebenarnya adalah/tmp
(server yang dikompilasi sendiri, klien yang dikemas) -
atau
host: /var/run/postgresql
jika jalur soket sebenarnya/var/run/postgresql/
(server paket, klien yang dikompilasi sendiri).
Ketika nilai di bidang Host dimulai dengan karakter garis miring, perpustakaan postgres mengetahui bahwa itu adalah lokasi direktori untuk soket lokal daripada nama host. Nama file di dalam direktori .s.PGSQL.portnumber
dihasilkan dan tidak boleh ditentukan, hanya direktori.
Kemungkinan lain adalah mengkonfigurasi paket perangkat lunak yang dikompilasi sendiri sedekat mungkin ke Debian, mengesampingkan default seperti yang mereka lakukan.