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


101

シェルから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を使用しています。


1
pg_hba.confを見つけるのはどうですか?
プラモド

1
@Pramod数十人が横たわっている可能性があります。それらのどれがPostgresによって使用されているかを知りたい場合はどうでしょう。
出血の指14

@BleedingFingers設定によっては、おそらくアクセス時間でフィルタリングすることもできます。find / -name pg_hba.conf -amin -5(サーバーが最後の5分間に再起動された場合; -atimeずっと前に最後に再起動された場合にサーバーを簡単に変更できます)。または、時間の変更よりも新しいアクセス時間でフィルタリングするか、他のいずれかの時間ベースのオプションを見つけます...(ただしlsof | grep pg_hba.conf、サーバーの実行中はフィルタリングできません)。
パルティアショット

回答:


151

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

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

有効な唯一の検索方法pg_hba.confは、実行中のPostgreSQLインスタンスに現在の場所を確認するpg_hba.confか、sysadminに現在の場所を確認することです。postgresql.confinitスクリプトが-c hba_file=/some/other/pathPgを起動するときのようにparamを渡す可能性があるため、datadirの場所を尋ねて解析することすら信頼できません。

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

SHOW hba_file;

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

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

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

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

別のオプションは、psコマンドの出力を見て、postmaster dataディレクトリの引数-Dがそこに見えるかどうかを確認することです。例えば

ps aux  | grep 'postgres *-D'

以来、pg_hba.confデータディレクトリ内になります(あなたは、Debian / Ubuntuのか、いくつかの誘導体と、使用してパッケージにしている場合を除きます)。

Debian / UbuntuパッケージからインストールされたPostgreSQLを使用するUbuntuシステムを特に対象にしている場合は、少し簡単になります。誰かのinitdb'da datadirがホームディレクトリにある、またはEnterpriseDB Pgが/ optにインストールされているなど、手作業でコンパイルされたソースPgに対処する必要はありません。Debian pg_wrapper/ UbuntuマルチバージョンPgマネージャー。PostgreSQLはからpg_lsclustersコマンドを使用てい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バージョンに複数のデータディレクトリがある場合、データベースサイズを調べる必要があります。実行中のpostgresのコマンドラインをチェックして、psデータディレクトリ-D引数が編集中などに一致するかどうかを確認します。


これは9.3では有効ではない可能性がありますpsql: invalid port number: "format=unaligned"。そのpsqlコマンドを実行すると。
jcollum 14年

@jcollumいいえ、タイプミスです。-Pない-p。一定。
クレイグリンガー14年

これは、複数のバージョンのPostgreSQLがインストールされている場合に機能する唯一の答えです。
ボン

Postgesがこれを標準化する希望はありますか?それはインストールの頭痛の種に大いに役立つでしょう...
Scott Skiles

@ScottSkiles PostgreSQLはそれを制御しません。それはパッケージとディストリビューター次第であり、彼らはそれがどこにあるべきかについて強い(そして異なる)意見を持っています。
クレイグリンガー

21

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

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


2

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

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

1

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

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



-2

ファイルの場所を知るには、次のように入力します。

pg_lsclusters

pg_hba.confファイルを更新する場合は、次のコマンドを発行します。$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
nirvanastack

-bash:pg_lsclusters:コマンドが見つからない
モナジャラル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.