Quy ước cho PostgreSQL được đóng gói cho Debian hoặc các dẫn xuất Debian như Ubuntu là sử dụng /var/run/postgresql
làm thư mục cho các ổ cắm miền Unix. Mặt khác, quy ước cho các libs ứng dụng khách postgres tự biên dịch là sử dụng /tmp
, trừ khi tự định cấu hình theo cách khác.
Vì vậy, nguyên nhân gốc rễ thông thường của sự không khớp này giữa cả hai là sự kết hợp giữa nội dung phía máy khách tự biên dịch với các gói phía máy chủ được biên dịch trước (ngay cả khi máy khách và máy chủ được cài đặt trên cùng một máy, phía máy khách và phía máy chủ đều vẫn khác biệt và có thể không đồng bộ).
Liên kết mềm từ /tmp
đến thư mục này theo đề xuất của người hỏi sẽ hoạt động ngoại trừ liên kết sẽ bị mất mỗi khi khởi động lại, vì nói chung /tmp
được làm trống khi khởi động lại.
Một tùy chọn tốt hơn sẽ là thêm dưới dạng một mục nhập trong database.yml
:
-
host: /tmp
nếu đường dẫn ổ cắm thực là/tmp
(máy chủ tự biên dịch, máy khách đóng gói) -
hoặc
host: /var/run/postgresql
nếu đường dẫn socket thực/var/run/postgresql/
(máy chủ đóng gói, máy khách tự biên dịch).
Khi giá trị trong trường máy chủ lưu trữ bắt đầu bằng một ký tự gạch chéo, thư viện postgres biết rằng đó là vị trí của thư mục cho các ổ cắm cục bộ chứ không phải tên máy chủ. Tên tệp bên trong thư mục .s.PGSQL.portnumber
được tạo và không được chỉ định, chỉ có thư mục.
Một khả năng khác là định cấu hình các gói phần mềm tự biên dịch càng chặt chẽ càng tốt với Debian, ghi đè các giá trị mặc định như chúng.