web-dev-qa-db-ja.com

シェルからpg_hba.confへのパスを見つけるにはどうすればよいですか?

シェルからpg_hba.confへのパスを取得したいと思います。パスはPostgreSQLのバージョンによって異なります。たとえば、8.4および9.1の場合:

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

pg_configコマンドを試しましたが、この情報が含まれていないようです。

これにより、pg_hba.confおよびその他のPostgreSQL構成ファイルを編集用に開くための統一コマンドを使用できます。

私はbashを使用しています。

98
Roger Dahl

pg_configは、拡張機能およびクライアントプログラムがPostgreSQLに対してコンパイルおよびリンクするのを支援するためのコンパイル情報用です。マシン上のアクティブなPostgreSQLインスタンスについては何も知りません。バイナリのみです。

pg_hba.confは、Pgのインストール方法に応じて他の多くの場所に表示されます。標準の場所は、データベースのpg_hba.conf内のdata_directory/home/var/lib/pgsql/var/lib/postgresql/[version]//opt/postgres/などにあります)など)が、ユーザーとパッケージャーは好きな場所に置くことができます。残念ながら。

pg_hba.confを見つける唯一の有効な方法は、実行中のPostgreSQLインスタンスにpg_hba.confがどこにあるかを尋ねるか、システム管理者にそれがどこにあるかを尋ねることです。 Pgの起動時にinitスクリプトがpostgresql.confのようなパラメータを渡す可能性があるため、datadirの場所を確認して-c hba_file=/some/other/pathを解析することすら信頼できません。

あなたがしたいことはPostgreSQLに尋ねることです:

SHOW hba_file;

このコマンドはスーパーユーザーセッションで実行する必要があるため、シェルスクリプトの場合は次のように記述できます。

psql -t -P format=unaligned -c 'show hba_file';

環境変数PGUSERPGDATABASEなどを設定して、接続が正しいことを確認します。

はい、これはやや鶏卵の問題です。ユーザーが接続できない場合(たとえば、pg_hba.confの編集を台無しにした後)、修正するためのpg_hba.confが見つかりません。それ。

別のオプションは、psコマンドの出力を見て、ポストマスターデータディレクトリ引数-Dが表示されているかどうかを確認することです。

ps aux  | grep 'postgres *-D'

pg_hba.confはデータディレクトリ内にあるため(Debian/Ubuntuまたはその派生物を使用しており、そのパッケージを使用している場合を除く)。

Debian/UbuntuパッケージからインストールされたPostgreSQLを使用するUbuntuシステムを特に対象にしている場合は、少し簡単になります。誰かのinitdb 'da datadirがホームディレクトリにある、または/ DBにインストールされたEnterpriseDB Pgなど、ソースから手作業でコンパイルされたPgを扱う必要はありません。pg_wrapper、Debian/UbuntuマルチバージョンPgマネージャー、PostgreSQLは pg_lsclustersコマンド from pg_wrapperを使用しています。

接続できない場合(Pgが実行されていないか、pg_hba.confを編集して接続する必要がある場合)、システムでpg_hba.confファイルを検索する必要があります。 MacとLinuxでは、Sudo find / -type f -name pg_hba.confのようなものができます。次に、同じディレクトリにあるPG_VERSIONファイルをチェックして、複数ある場合は正しいPostgreSQLバージョンであることを確認します。 (pg_hba.conf/etc /にある場合、これを無視し、代わりに親ディレクトリ名になります)。同じPostgreSQLバージョンのデータディレクトリが複数ある場合は、データベースサイズを調べる必要があります。psから実行中のpostgresのコマンドラインをチェックして、データディレクトリ-D引数が一致するかどうかを確認します編集している場所など.

146
Craig Ringer

これは私がそれを行う方法です:

john@Host:~$ ls /etc/postgresql
9.1
john@Host:~$ Sudo vim /etc/postgresql/9.1/main/pg_hba.conf

パスは次のようなものであるため:/etc/postgresql/[VERSION]/main/pg_hba.conf

21
its_me

構成ファイルの検出に次を使用しています。

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

デフォルトのビジュアルエディター(vim、emacs、nano、joeなど)を使用して正しいpg_hba.confを編集するのは簡単です。

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

1
christianbundy

データベースに問い合わせてください:

$ psql -U postgres
postgres=# SHOW config_file;
0
Keerthi S