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: /tmpjika jalur soket sebenarnya adalah/tmp(server yang dikompilasi sendiri, klien yang dikemas) -
atau
host: /var/run/postgresqljika 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.