pg_config dành cho 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 PostgreQuery. 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.conf có 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í tiêu chuẩn là pg_hba.conf trong data_directory của cơ sở dữ liệu (có thể ở / home, / var / lib / pssql, / var / lib / postgresql / [version] /, / opt / postgres /, v.v. v.v.) nhưng người dùng và người đó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.conf là hỏi một cá thể PostgreQuery đang chạy, nơi pg_hba.conf đang ở đó, hoặc hỏi sysadmin ở đâu. Thậm chí, bạn không thể dựa vào việc hỏi datadir ở đâu và phân tích cú pháp postgresql.conf vì tập lệnh init có thể truyền một thông số như -c hba_file = / some / other / path khi 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à đặt các biến môi trường PGUSER, PGDATABASE, v.v để đả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.
Một tùy chọn khác là xem xét đầu ra của lệnh ps và xem liệu đối số thư mục dữ liệu postmaster -D có hiển thị ở đó không, ví dụ:
ps aux | grep 'postgres *-D'
vì pg_hba.conf sẽ nằm trong thư mục dữ liệu (trừ khi bạn sử dụng Debian / Ubuntu hoặc một số dẫn xuất 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 đó đã khởi tạo một datadir 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, Debian / Ubuntu multi -version Trình quản lý PG, trong đó PostgreSQL đang sử dụng lệnh pg_lscl cluster 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 cho các tệp pg_hba.conf. Trên Mac và Linux, một cái gì đó như sudo find / -type f -name pg_hba.conf sẽ làm. Sau đó kiểm tra tệp PG_VERSION 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.conf nằm 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 từ ps để xem liệu đối số thư mục -D có khớp với nơi bạn đang chỉnh sửa không, v.v. .
https://askubfox.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711