pg_config
là để 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.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í giữa các ý kiến pg_hba.conf
trong data_directory
cơ 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.conf
là 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.conf
bở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/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à 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 -D
có hiển thị ở đó không, vd
ps aux | grep 'postgres *-D'
vì pg_hba.conf
sẽ ở 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ử initdb
dụ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_lsclusters
lệ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.conf
tệp. Trên Mac và Linux, một cái gì đó giống như sudo find / -type f -name pg_hba.conf
sẽ làm. Sau đó kiểm tra PG_VERSION
tệ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.conf
là 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.