PostgreSQL: .pgpassファイルとpg_service.confファイルを使ったパスワード設定
PostgreSQL にパスワードをコマンドラインで非対話的に指定する方法
環境変数を使う
環境変数 PGPASSWORD
にパスワードを設定することで、psql コマンドにパスワードを明示的に指定することなく接続できます。
設定方法
- 以下のコマンドを実行して、
PGPASSWORD
変数にパスワードを設定します。
export PGPASSWORD="your_password"
- psql コマンドを実行して接続します。
psql -U postgres -h localhost
注意点
PGPASSWORD
変数は環境変数なので、他のユーザーからも読み取ることが可能です。セキュリティに注意が必要です。export
コマンドは現在のシェルでのみ有効です。他のシェルで接続するには、再度export
コマンドを実行する必要があります。
コマンドラインオプションを使う
psql コマンドには -W
オプションがあり、パスワードをコマンドラインで直接指定することができます。
接続方法
psql -U postgres -h localhost -W "your_password"
- コマンドラインオプションでパスワードを指定すると、パスワードがコマンド履歴に残ってしまう可能性があります。セキュリティに注意が必要です。
接続文字列を使う
psql コマンドには -c
オプションがあり、接続文字列を指定することができます。接続文字列にはパスワードを含めることができます。
psql -c "host=localhost port=5432 dbname=postgres user=postgres password=your_password"
- 接続文字列は、
psql
コマンドだけでなく、他のアプリケーションでも使用できます。
上記の方法のどれを使うかは、環境やセキュリティ要件によって異なります。
- セキュリティが重要な場合は、環境変数を使う方法は避けた方が良いです。
- コマンド履歴が残ってしまうのが気になる場合は、接続文字列を使う方法がおすすめです。
環境変数を使う
# パスワードを設定
export PGPASSWORD="your_password"
# psql コマンドを実行
psql -U postgres -h localhost
コマンドラインオプションを使う
psql -U postgres -h localhost -W "your_password"
接続文字列を使う
psql -c "host=localhost port=5432 dbname=postgres user=postgres password=your_password"
your_password
を実際のパスワードに置き換えてください。localhost
を PostgreSQL サーバのホスト名に置き換えてください。
注意事項
- サンプルコードを実行する前に、PostgreSQL サーバが起動していることを確認してください。
- サンプルコードは、PostgreSQL 14.5 で動作確認しています。他のバージョンでは動作しない可能性があります。
PostgreSQL にパスワードをコマンドラインで非対話的に指定するその他の方法
.pgpass
ファイルは、PostgreSQL サーバへの接続情報を保存するためのファイルです。このファイルにパスワードを保存することで、psql コマンドにパスワードを明示的に指定することなく接続できます。
- 以下のコマンドを実行して、
.pgpass
ファイルを作成します。
touch ~/.pgpass
- 以下の形式で
.pgpass
ファイルに接続情報を記述します。
host:port:database:username:password
例:
localhost:5432:postgres:postgres:your_password
.pgpass
ファイルのパーミッションを 600 に設定します。
chmod 600 ~/.pgpass
psql -U postgres -h localhost
- 以下のコマンドを実行して、
pg_service.conf
ファイルを開きます。
vim /etc/postgresql/14/main/pg_service.conf
service_name:
host: localhost
port: 5432
database: postgres
username: postgres
password: your_password
psql -S postgres
パスワードプロンプトを使う
psql コマンドは、パスワードプロンプトを表示してパスワードを入力させることができます。
psql -U postgres -h localhost
パスワードプロンプトが表示されるので、パスワードを入力して Enter キーを押します。
- パスワードプロンプトは、画面にパスワードが表示されるため、セキュリティ的に問題があります。
環境変数 PGPASSFILE を使う
PGPASSFILE
環境変数に .pgpass
ファイルのパスを設定することで、psql コマンドは .pgpass
ファイルからパスワードを読み取ることができます。
- 以下のコマンドを実行して、
PGPASSFILE
変数に.pgpass
ファイルのパスを設定します。
export PGPASSFILE=~/.pgpass
psql -U postgres -h localhost
PostgreSQL にパスワードをコマンドラインで非対話的に指定するには、いくつかの方法があります。どの方法を使うかは、環境やセキュリティ要件によって異なります。
postgresql bash command-line