PostgreSQLで接続情報を安全に管理:pg_dumpコマンドと接続URI/URL
PostgreSQLでpg_dumpコマンドを接続URI/URLを使って利用する方法
接続URI/URLは、データベース接続に必要な情報を文字列形式で表現したものです。一般的な形式は以下の通りです。
postgresql://username:password@host:port/database
postgresql://
: PostgreSQLデータベースであることを示す識別子username
: ログインユーザー名password
: ログインパスワードhost
: 接続先ホスト名port
: 接続先ポート番号database
: 接続対象データベース名
上記に加え、オプション情報も指定できます。
sslmode=require
: SSL暗号化接続を必須とするapplication_name=pg_dump
: アプリケーション名を指定encodings=UTF8
: 文字エンコーディングを指定
pg_dumpコマンドで接続URI/URLを利用するには、--host-addr
オプションと--dbname
オプションの代わりに、--uri
オプションを使用します。
pg_dump --uri postgresql://username:password@host:port/database > dump.sql
上記コマンドは、指定された接続URI/URLを使用してデータベースに接続し、dump.sql
ファイルにバックアップを作成します。
メリット
- 接続情報の管理が簡潔になる
- 環境ごとに接続情報を設定する必要がない
- コマンドライン引数に接続情報を直接記述できるので、スクリプトなどに埋め込みやすい
デメリット
- パスワードを含む接続情報を公開してしまうリスクがある
- 複雑な接続オプションを設定できない
注意点
- 接続URI/URLをコマンドライン引数に直接記述する場合は、パスワードが漏洩しないよう注意する必要があります。
- 複雑な接続オプションを設定する場合は、従来の
postgresql.conf
ファイルや~/.pgpass
ファイルを利用する方が安全です。
PostgreSQLでpg_dumpコマンドを接続URI/URLを使って利用する方法 - サンプルコード
バックアップの作成
pg_dump --uri postgresql://myuser:mypassword@localhost:5432/mydatabase > dump.sql
説明
pg_dump
: pg_dumpコマンドを実行--uri
: 接続URI/URLを指定postgresql://myuser:mypassword@localhost:5432/mydatabase
: 接続URI/URL (ユーザー名:パスワード@ホスト:ポート/データベース)>
: 出力をファイルにリダイレクトdump.sql
: 出力ファイル名
復元の方法
以下のコマンドを実行すると、dump.sql
ファイルからmydatabase
データベースに復元されます。
psql --uri postgresql://myuser:mypassword@localhost:5432/mydatabase < dump.sql
psql
: psqlコマンドを実行<
: ファイルの内容を標準入力として読み込む
上記に加え、pg_dumpコマンドの様々なオプションを接続URI/URLに含めることも可能です。詳細はpg_dumpコマンドのマニュアルを参照してください。
補足
- バックアップ前にデータベースをシャットダウンするかどうかは、状況に応じて判断する必要があります。
- 大規模なデータベースのバックアップを取る場合は、
pg_dump
コマンドの圧縮オプションを使用することを検討してください。 - バックアップは定期的に実行し、安全な場所に保管してください。
PostgreSQLでpg_dumpコマンドを接続URI/URL以外で利用する方法
postgresql.conf
ファイルに接続情報を設定し、--hostaddr
オプションと--dbname
オプションを使用して接続する方法です。
postgresql.confファイルの例
host=localhost
port=5432
user=myuser
password=mypassword
database=mydatabase
pg_dumpコマンドの実行例
pg_dump --hostaddr localhost --dbname mydatabase > dump.sql
メリット
- 接続情報をファイルに集中管理できる
- ファイルの共有や管理が煩雑になる場合がある
~/.pgpassファイルの例
localhost:5432:mydatabase:myuser:mypassword
pg_dump --hostaddr localhost --dbname mydatabase > dump.sql
- ファイルの編集が必要
- パスワードが平文で保存されるため、セキュリティ面で不安がある
設定例
export PGPASSWORD=mypassword
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=mydatabase
pg_dump --hostaddr localhost --dbname mydatabase > dump.sql
- 環境変数の設定が必要
- セキュリティ面で不安がある
コマンドライン引数
--hostaddr
オプション、--port
オプション、--username
オプション、--password
オプション、--dbname
オプションを使用して接続する方法です。
pg_dump --hostaddr localhost --port 5432 --username myuser --password mypassword --dbname mydatabase > dump.sql
- ファイルの編集や環境変数の設定が不要
- コマンドライン引数が長くなる
- パスワードをコマンドライン引数に直接記述するため、セキュリティ面で不安がある
- 接続情報をファイルに集中管理したい場合は、
postgresql.conf
ファイルを使用します。 - ユーザーごとに接続情報を設定したい場合は、
~/.pgpass
ファイルを使用します。 - ファイルの編集や環境変数の設定が不要な場合は、コマンドライン引数を使用します。
- セキュリティ面を重視する場合は、接続URI/URLを使用するか、
postgresql.conf
ファイルと環境変数を組み合わせて使用します。
注意事項
- 接続情報を設定する際は、パスワードが漏洩しないよう注意する必要があります。
postgresql connection-string