Làm cách nào để tìm đường dẫn đến pg_hba.conf từ trình bao?


101

Tôi muốn có được đường dẫn đến pg_hba.conf từ trình bao. Đường dẫn khác nhau giữa các phiên bản của PostgreSQL. Chẳng hạn, cho 8.4 và 9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

Tôi đã thử pg_configlệnh, nhưng dường như không bao gồm thông tin này.

Điều này là để tôi có thể sử dụng một lệnh thống nhất để mở pg_hba.confvà các tệp cấu hình PostgreSQL khác để chỉnh sửa.

Tôi đang sử dụng bash.


1
Làm thế nào về việc xác định vị trí pg_hba.conf?
Pramod

1
@Pramod Có thể có hàng chục người nằm xung quanh. Điều gì nếu bạn muốn biết một trong số chúng đang được Postgres sử dụng.
Chảy máu ngón tay

@BleinatingFingers Tùy thuộc vào thiết lập của bạn, bạn có thể chỉ cần lọc theo thời gian truy cập. find / -name pg_hba.conf -amin -5(nếu máy chủ được khởi động lại trong 5 phút cuối; đủ dễ dàng để thay đổi thành -atimenếu lần cuối được khởi động lại cách đây lâu hơn). Hoặc bạn có thể lọc theo thời gian truy cập mới hơn thời gian thay đổi hoặc một trong các tùy chọn tìm thời gian khác ... (Mặc dù lọc lsof | grep pg_hba.conftrong khi máy chủ đang chạy không hoạt động).
Bắn Parthian

Câu trả lời:


151

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'

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.


Điều này có thể không hợp lệ cho 9.3, tôi nhận được: psql: invalid port number: "format=unaligned"khi tôi chạy lệnh psql đó.
jcollum

@jcollum Không, chỉ là một lỗi đánh máy. -Pkhông -p. Đã sửa.
Craig Ringer

Đây là câu trả lời duy nhất hoạt động nếu bạn đã cài đặt nhiều hơn một phiên bản PostgreSQL.
bonh

Có bất kỳ hy vọng cho Postges để tiêu chuẩn hóa này? Điều đó sẽ giúp giảm đau đầu khi cài đặt ...
Scott Skiles

@ScottSkiles PostgreSQL không kiểm soát nó, tùy thuộc vào các gói và nhà phân phối, những người này đều có ý kiến ​​mạnh mẽ (và khác biệt) về nơi cần có.
Craig Ringer

21

Đây là cách tôi làm điều đó:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Vì đường dẫn là như thế này: /etc/postgresql/[VERSION]/main/pg_hba.conf


2

Tôi đang sử dụng như sau để phát hiện tập tin cấu hình:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)

1

Chỉnh sửa chính xác pg_hba.confvới trình chỉnh sửa hình ảnh mặc định của bạn (vim, emacs, nano, joe, v.v.) dễ dàng như:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf



-2

Để biết nơi tập tin chỉ cần gõ:

pg_lsclusters

Nếu bạn muốn cập nhật tệp pg_hba.conf thì hãy dùng lệnh sau: $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
nirvanastack

-bash: pg_lscluster: không tìm thấy lệnh
Mona Jalal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.