pg_configlà để cung cấp thông tin khiếu nại, để giúp các phần mở rộng và chương trình máy khách biên dịch và liên kết với PostgreSQL. Nó không biết gì về (các) phiên bản PostgreQuery đang hoạt động trên máy, chỉ có các tệp nhị phân.
pg_hba.confcó thể xuất hiện ở nhiều nơi khác tùy thuộc vào cách cài đặt PG. Vị trí giữa các ý kiến pg_hba.conftrong data_directorycơ sở dữ liệu (mà có thể là trong /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, vv vv vv) nhưng người dùng và đóng gói có thể đặt nó bất cứ nơi nào họ thích. Không may.
Các cách hợp lệ duy nhất tìm thấy pg_hba.conflà hỏi một cá thể PostgreQuery đang chạy ở đâu pg_hba.conf, hoặc hỏi sysadmin nó ở đâu. Bạn thậm chí không thể dựa vào việc hỏi datadir ở đâu và phân tích cú pháp postgresql.confbởi vì một tập lệnh init có thể vượt qua một thông số như -c hba_file=/some/other/pathkhi bắt đầu PG.
Những gì bạn muốn làm là hỏi PostgreSQL:
SHOW hba_file;
Lệnh này phải được chạy trên một phiên siêu người dùng, vì vậy để tạo kịch bản shell, bạn có thể viết một cái gì đó như:
psql -t -P format=unaligned -c 'show hba_file';
và thiết lập các biến môi trường PGUSER, PGDATABASE, vv để đảm bảo rằng kết nối là đúng.
Vâng, đây là một phần của vấn đề trứng gà, trong đó nếu người dùng không thể kết nối (giả sử, sau khi chỉnh sửa pg_hba.conf), bạn không thể tìm thấy pg_hba.confđể khắc phục nó.
Một tùy chọn khác là xem xét psđầu ra của lệnh và xem liệu đối số thư mục dữ liệu postmaster -Dcó hiển thị ở đó không, vd
ps aux | grep 'postgres *-D'
vì pg_hba.confsẽ ở trong thư mục dữ liệu (trừ khi bạn sử dụng Debian / Ubuntu hoặc một số công cụ phái sinh và sử dụng các gói của chúng).
Nếu bạn đang nhắm mục tiêu các hệ thống Ubuntu cụ thể có PostgreQuery được cài đặt từ các gói Debian / Ubuntu thì mọi chuyện sẽ dễ dàng hơn một chút. Bạn không phải đối phó với PG được biên dịch từ nguồn mà ai đó sử initdbdụng trong thư mục nhà của họ hoặc cài đặt EnterpriseDB PG trong / opt, v.v. Bạn có thể hỏi pg_wrapper, PG đa phiên bản Debian / Ubuntu quản lý, nơi PostgreSQL đang sử dụng các pg_lsclusterslệnh từ pg_wrapper.
Nếu bạn không thể kết nối (PG không chạy hoặc bạn cần chỉnh sửa pg_hba.confđể kết nối), bạn sẽ phải tìm kiếm hệ thống để tìm pg_hba.conftệp. Trên Mac và Linux, một cái gì đó giống như sudo find / -type f -name pg_hba.confsẽ làm. Sau đó kiểm tra PG_VERSIONtệp trong cùng thư mục để đảm bảo đó là phiên bản PostgreQuery phù hợp nếu bạn có nhiều hơn một. (Nếu pg_hba.conflà trong /etc/, hãy bỏ qua cái này, thay vào đó là tên thư mục mẹ). Nếu bạn có nhiều thư mục dữ liệu cho cùng một phiên bản PostgreSQL, bạn sẽ phải xem kích thước cơ sở dữ liệu, kiểm tra dòng lệnh của các postgres đang chạy psđể xem liệu -Dđối số thư mục dữ liệu có khớp với nơi bạn đang chỉnh sửa không, v.v.