PostgreSQL psql オプション一覧と使い方ガイド
はじめに
PostgreSQLは、堅牢性、機能性、拡張性に優れたオープンソースのリレーショナルデータベース管理システム(RDBMS)です。PostgreSQLを操作するための主要なツールの一つが、コマンドラインインターフェース(CLI)であるpsql
です。psql
は単にSQLコマンドを実行するだけでなく、データベースオブジェクトの参照、設定変更、スクリプトの実行、出力形式の制御など、多岐にわたる機能を提供します。PostgreSQLの開発者や管理者にとって、psql
をマスターすることは必須と言えるでしょう。
この記事では、psql
コマンドの主要なオプションについて、その機能、使い方、そして具体的な利用例を詳細に解説します。約5000語を目標とし、各オプションがどのような場面で役立つのか、どのような注意点があるのかを掘り下げていきます。psql
のオプションを理解することで、より効率的かつ柔軟にPostgreSQLを操作できるようになるはずです。
psqlの起動と基本的な使い方
psql
を起動する最も簡単な方法は、コマンドラインでpsql
と入力することです。
bash
psql
このコマンドは、以下の条件でデータベースに接続を試みます。
- ユーザー名: 現在のOSのユーザー名を使用します。
- データベース名: 現在のOSのユーザー名と同じ名前のデータベースに接続を試みます。
- ホスト:
localhost
(ローカルマシン)に接続を試みます。 - ポート: デフォルトのPostgreSQLポート番号(通常5432)に接続を試みます。
接続に成功すると、psqlのプロンプトが表示されます。
“`
psql (14.5)
Type “help” for help.
postgres=#
“`
プロンプトが表示されたら、SQLコマンドを入力してEnterキーを押すことで実行できます。SQLコマンドはセミコロン(;
)で終了する必要があります。
sql
SELECT version();
psqlを終了するには、プロンプトで\q
と入力するか、exit
と入力します。
postgres=# \q
または
postgres=# exit
これでpsqlセッションが終了し、シェルのプロンプトに戻ります。
主要な接続オプション
psqlの最も一般的な用途は、特定のデータベースやユーザー、ホストに接続することです。これらの接続情報は、コマンドラインオプションで指定できます。
-
-d dbname
または--dbname=dbname
- 接続するデータベースの名前を指定します。
- 例:
psql -d mydb
(mydbというデータベースに接続) - オプションを省略した場合や、
dbname
引数を省略した場合、ユーザー名と同じ名前のデータベースに接続しようとします。環境変数PGDATABASE
でデフォルト値を設定することも可能です。
-
-h hostname
または--host=hostname
- データベースサーバーが稼働しているホスト名またはIPアドレスを指定します。
- 例:
psql -h db.example.com
(db.example.com上のPostgreSQLに接続) - 省略した場合、ローカルホスト(UnixドメインソケットまたはTCP/IP
localhost
)に接続を試みます。環境変数PGHOST
でデフォルト値を設定できます。
-
-p port
または--port=port
- データベースサーバーがリッスンしているTCP/IPポート番号を指定します。
- 例:
psql -p 5433
(ポート番号5433でリッスンしているPostgreSQLに接続) - 省略した場合、デフォルトのポート番号(通常5432)を使用します。環境変数
PGPORT
でデフォルト値を設定できます。
-
-U username
または--username=username
- データベース接続に使用するユーザー名を指定します。
- 例:
psql -U myuser
(myuserというユーザーとして接続) - 省略した場合、現在のOSのユーザー名を使用します。環境変数
PGUSER
でデフォルト値を設定できます。
-
-W
または--password
- 接続前にパスワードの入力を求めるプロンプトを表示します。
- 例:
psql -U myuser -W
- パスワード認証が必要な場合、このオプションを使用するのが一般的です。パスワードをコマンドライン引数で直接指定することは、セキュリティ上のリスクがあるため推奨されません(後述)。
これらの接続オプションは組み合わせて使用できます。
例: psql -h 192.168.1.100 -p 5432 -U admin -d productiondb -W
(IPアドレス192.168.1.100、ポート5432のサーバーに、adminユーザーとしてproductiondbデータベースにパスワード認証で接続)
環境変数との連携:
psqlは、接続オプションが指定されていない場合、環境変数PGDATABASE
, PGHOST
, PGPORT
, PGUSER
の値をデフォルトとして使用します。これにより、頻繁に接続するデータベース情報を環境変数に設定しておくことで、コマンドラインでの入力を省略できます。
例:
bash
export PGDATABASE=mydatabase
export PGUSER=myuser
export export PGHOST=db.example.com
export PGPORT=5432
psql # これだけで上記の設定で接続を試みる
パスワード認証とセキュリティ:
-W
オプションを使用してプロンプトでパスワードを入力する方法が最も安全です。環境変数PGPASSWORD
を設定したり、--password=mypassword
のようにコマンドライン引数でパスワードを指定したりする方法は、パスワードがシェルの履歴やプロセスリストに表示される可能性があるため、非推奨です。より安全な方法として、パスワードファイル(~/.pgpass
など)を使用することも可能です。パスワードファイルの詳細については、PostgreSQLの公式ドキュメントを参照してください。
入力/出力に関するオプション
psqlは、SQLコマンドを対話的に入力するだけでなく、ファイルから読み込んだり、コマンドライン引数として受け取ったり、その実行結果をファイルに出力したりすることも可能です。
-
-f filename
または--file=filename
- 標準入力ではなく、指定したファイルからコマンドを読み込んで実行します。
- 例:
psql -d mydb -f script.sql
(mydbに接続し、script.sqlファイルの内容を実行) - このオプションは、SQLスクリプトを実行する際によく使用されます。ファイル内のコマンドは、対話モードで入力するのと同様に扱われます。実行後、psqlは終了します。
- スクリプト内でエラーが発生した場合の挙動は、psql変数
ON_ERROR_STOP
で制御できます。デフォルトではエラー後も処理を続行しますが、psql -v ON_ERROR_STOP=1 -f script.sql
のように指定すると、エラー発生時にpsqlは即座に終了します。
-
-o filename
または--output=filename
- 標準出力ではなく、指定したファイルにコマンドの出力結果を書き込みます。
- 例:
psql -d mydb -f query.sql -o result.txt
(query.sqlの実行結果をresult.txtに保存) - このオプションは、クエリ結果やメタコマンドの出力をファイルに記録したい場合に便利です。出力形式は、後述する表示形式オプション(
-A
,-H
,-t
など)やメタコマンド\pset
で制御できます。ファイルが既に存在する場合、上書きされます。
-
-L filename
または--log-file=filename
- psqlセッション全体のログを指定したファイルに記録します。これには、入力したコマンドとそれに対する出力の両方が含まれます。
- 例:
psql -d mydb -L session.log
(mydbに接続し、セッションの内容をsession.logに記録) - デバッグや監査の目的で、セッション全体のやり取りを保存したい場合に役立ちます。
-o
はコマンドの出力のみを記録するのに対し、-L
は入力と出力の両方を記録します。
-
-c command
または--command=command
- psqlを起動し、指定した単一のSQLコマンドまたはメタコマンドを実行して終了します。
- 例:
psql -d mydb -c "SELECT count(*) FROM mytable;"
(mydbに接続し、指定したSELECT文を実行して件数を表示後、終了) - シェルスクリプトなどで、単一のデータベース操作を自動化したい場合に非常に便利です。複数のコマンドを実行したい場合は、
-f
オプションを使用するか、-c
オプションを複数指定します(ただし、複数指定しても最初の-c
のみが実行される挙動になる場合があるため、ファイルにまとめるか、セミコロンで区切るのが安全です)。
-
-v varname=value
または--set=varname=value
- 指定したpsql変数に値を設定します。psql変数は、SQLコマンドやメタコマンド内で利用できる変数です。
- 例:
psql -d mydb -v report_year=2023 -f report.sql
(report_year変数に2023を設定してreport.sqlを実行。report.sql内で:report_year
のように変数を利用可能) - スクリプトの汎用性を高めるために利用されます。コマンドラインからスクリプトにパラメータを渡す主要な方法の一つです。
例: リモートサーバー上のデータベースから、特定のテーブルの全データをCSV形式で取得し、ファイルに保存する。
bash
psql -h remote.example.com -U user -d dbname -c "COPY mytable TO STDOUT WITH (FORMAT CSV, HEADER)" -o mytable_data.csv
ここでは、-c
オプションでCOPY TO STDOUT
コマンドを実行し、その標準出力(STDOUT)を-o
オプションでファイルにリダイレクトしています。COPY
コマンドは、大量のデータを高速にエクスポートするのに適しています。
表示形式/整形に関するオプション
psqlは、クエリ結果の表示形式を細かく制御できます。これにより、人間が読みやすい表形式で表示したり、他のプログラムで処理しやすい形式で出力したりすることが可能です。
-
-A
または--unaligned
- 出力の際にカラムのアライメント(整列)を行いません。デフォルトでは、読みやすいように各カラムの幅に合わせて空白が挿入されます。
- 例:
psql -d mydb -c "SELECT * FROM mytable LIMIT 3;" -A
- このオプションは、通常、後述するフィールドセパレーターオプション
-F
やレコードセパレーターオプション-R
と組み合わせて、CSVやタブ区切りなどの特定形式のデータを生成する際に使用されます。アライメントがなくなる分、出力サイズは小さくなります。
-
-H
または--html
- 出力結果をHTML形式のテーブルとして生成します。
- 例:
psql -d mydb -c "SELECT * FROM mytable LIMIT 3;" -H
- Webページに組み込んだり、HTMLビューアで確認したりする場合に便利です。HTMLテーブルの属性は、
\pset tableattr
メタコマンドで設定できます。
-
-t
または--tuples-only
- カラムヘッダー、行カウント、フッター行など、タプル(データ行)以外の情報を出力しません。
- 例:
psql -d mydb -c "SELECT col1, col2 FROM mytable LIMIT 3;" -t
- プログラムでpsqlの出力を処理する場合や、データ部分だけが必要な場合に役立ちます。
-
-P variable[=value]
または--pset=variable[=value]
- psqlの表示設定変数(pset variable)を設定します。これは、対話モードでのメタコマンド
\pset
と同様の機能を提供します。variable
には設定名、value
には設定値を指定します。値を省略すると、多くの場合その設定が有効/無効を切り替えます。 - 非常に多くの表示設定が可能ですが、代表的なものをいくつか挙げます。
-P format=unaligned
:-A
と同じ、アライメントなし。-P format=aligned
: デフォルト、アライメントあり。-P format=html
:-H
と同じ、HTML形式。-P format=latex
: LaTeX形式。-P format=troff-ms
: Troff形式。-P border=integer
: 表の枠線のスタイルを設定(0:枠線なし, 1:最小枠線, 2:罫線)。デフォルトは1。-P expanded
:-x
と同じ、拡張表示。-P null=string
: NULL値を表示する際に使用する文字列を指定。デフォルトは空文字列。-P tuples_only
:-t
と同じ、タプルのみ表示。-P pager[=on|off]
: 出力が多い場合にページャーを使用するかどうか。デフォルトはon(環境変数PAGER
またはLESS
などが使用される)。-P fieldsep=string
: フィールドセパレーターを指定。-F
と同じ。-P recordsep=string
: レコードセパレーターを指定。-R
と同じ。
- 例:
psql -d mydb -c "SELECT * FROM mytable" -P border=2 -P null="(NULL)"
(罫線付きの表形式で出力し、NULL値を”(NULL)”と表示) -P
オプションは複数指定して、複数の設定を同時に行うことができます。
- psqlの表示設定変数(pset variable)を設定します。これは、対話モードでのメタコマンド
-
-x
または--expanded
- 拡張表示モードを有効にします。通常、各行は各カラムの値を横に並べて表示しますが、拡張表示では各行が複数の行に分割され、各行が「カラム名 = 値」の形式で表示されます。これは、行が非常に多くのカラムを持つ場合や、特定のカラムの値が非常に長い場合に、画面幅を超えずに表示するのに役立ちます。
- 例:
psql -d mydb -c "SELECT * FROM very_wide_table WHERE id = 1;" -x
- 特に詳細なレコードの内容を確認したい場合に便利です。
-
-F separator
または--field-separator=separator
- アライメントなしモード(
-A
または\pset format=unaligned
)でのフィールドセパレーター(カラム間の区切り文字)を指定します。 - 例:
psql -d mydb -c "SELECT col1, col2, col3 FROM mytable;" -A -F ','
(カンマ区切りのCSV形式で出力) -A
オプションと組み合わせて使用されることがほとんどです。CSV、タブ区切り(-F '\t'
)、パイプ区切り(-F '|'
)など、様々な形式のデータ出力に利用できます。
- アライメントなしモード(
-
-R separator
または--record-separator=separator
- アライメントなしモード(
-A
または\pset format=unaligned
)でのレコードセパレーター(行間の区切り文字)を指定します。 - 例:
psql -d mydb -c "SELECT col1 FROM mytable LIMIT 5;" -A -R ';'
(各行の終わりにセミコロンを付けて出力) - あまり一般的ではありませんが、特定のデータ形式を生成する必要がある場合に使用できます。
- アライメントなしモード(
表示形式オプションの組み合わせ例:
CSV形式でヘッダー付きのデータを出力する場合:
bash
psql -d mydb -c "SELECT col1, col2 FROM mytable;" -A -F ','
これは、\pset unaligned on \pset fieldsep ','
と同等です。ヘッダーが必要ない場合は -t
オプションも追加します。
bash
psql -d mydb -c "SELECT col1, col2 FROM mytable;" -A -F ',' -t
これは、\pset unaligned on \pset fieldsep ',' \pset tuples_only on
と同等です。COPY TO STDOUT
コマンドを使用する方が、通常はCSV出力には推奨されますが、psqlのクエリ結果を直接パイプやファイルにリダイレクトしたい場合にはこれらのオプションが便利です。
psqlの動作設定に関するオプション
psqlは、その起動時やセッション中の動作について、様々な設定を行うことができます。
-
-e
または--echo-all
- 実行されるすべてのコマンドを標準出力にエコー(表示)します。これには、入力したSQLコマンドや、psql内部で実行されるコマンドなどが含まれます。
- 例:
psql -d mydb -e
(psqlセッション中に実行したコマンドが表示される) - スクリプトを実行する際や、psqlがバックグラウンドで何を実行しているかを確認したい場合に役立ちます。
-
-E
または--echo-queries
- メタコマンド(
\d
,\l
など)が内部で実行するSQLコマンドを標準出力にエコーします。 - 例:
psql -d mydb -E
(\d mytable
と入力すると、psqlがテーブル定義を取得するために内部で実行するSELECT
文などが表示される) - psqlのメタコマンドがどのように機能しているかを理解したり、同様の情報をプログラムから取得するためのSQL文を知りたい場合に非常に有用です。
- メタコマンド(
-
-q
または--quiet
- ほとんどのメッセージを抑制し、クワイエットモードで起動します。これは、ウェルカムメッセージ、情報メッセージ、プロンプト、および一部のエラーメッセージを抑制します。
- 例:
psql -d mydb -q -c "SELECT 1;"
(最小限の出力でコマンドを実行) - バッチ処理やスクリプト実行において、不要なメッセージを表示したくない場合に主に使用されます。
-
-n
または--no-align
- アライメントなしモードと、ヘッダーおよびフッターなしモード(タプルのみ)を有効にします。これは、
-A
オプションと-t
オプションを同時に指定するのとほぼ同等です。 - 例:
psql -d mydb -n -c "SELECT * FROM mytable LIMIT 3;"
-A -t
のショートカットとして使用できます。CSV出力などのプログラム処理に適した形式を素早く設定するのに便利です。ただし、-A -t
とは異なり、-n
はメタコマンド\pset unaligned on
および\pset tuples_only on
を設定するだけなので、後から\pset
で設定を変更できます。
- アライメントなしモードと、ヘッダーおよびフッターなしモード(タプルのみ)を有効にします。これは、
-
-1
または--single-step
- シングルステップモードを有効にします。これは、
-f
オプションでスクリプトを実行する際に、ファイル内の各コマンドを実行する前にユーザーに確認を求めるモードです。 - 例:
psql -d mydb -1 -f script.sql
(script.sqlの各SQL文の実行前にEnterキーを押す必要がある) - 長いスクリプトをステップ実行してデバッグしたい場合に便利です。各ステップの実行をスキップしたり、編集したりすることも可能です。
- シングルステップモードを有効にします。これは、
-
-S
または--single-line
- シングルラインモードを有効にします。このモードでは、各入力行がセミコロン(
;
)で終了していなくても、単一のコマンドとして即座にサーバーに送信・実行されます。通常、複数行にわたるコマンドはセミコロンが入力されるまでバッファリングされます。 - 例:
psql -d mydb -S
(プロンプトでSELECT 1
と入力してEnterを押すと即座に実行される) - 主に簡単なコマンドを素早く試したい場合に便利ですが、複数行の複雑なSQLを書く場合は不便です。デフォルトの複数行モードの方が一般的です。
- シングルラインモードを有効にします。このモードでは、各入力行がセミコロン(
-
-X
または--no-psqlrc
- ユーザーのホームディレクトリにある起動ファイル(通常
.psqlrc
)を読み込まないようにします。 - 例:
psql -d mydb -X
.psqlrc
ファイルで設定されたエイリアスや表示設定などを無視したい場合に、クリーンな状態でpsqlを起動するために使用します。トラブルシューティングの際にも役立つことがあります。
- ユーザーのホームディレクトリにある起動ファイル(通常
その他/ヘルプ関連のオプション
psqlには、バージョン情報やヘルプを表示するためのオプションもあります。
-
-V
または--version
- psqlのバージョン情報を表示して終了します。
- 例:
psql -V
- psqlおよび接続先のPostgreSQLサーバーのバージョンを確認できます。
-
-?
または--help
- psqlのコマンドラインオプションの概要を表示して終了します。
- 例:
psql -?
- 利用可能なオプションを素早く確認したい場合に役立ちます。ただし、オプションの簡単な説明しか表示されないため、詳細はこの記事や公式ドキュメントを参照する必要があります。
実践的な使い方と例
ここからは、これまで説明したオプションを組み合わせた、より実践的なpsqlの使い方を見ていきましょう。
例1: リモートサーバー上の特定のテーブルから最新10件のレコードを整形して表示
bash
psql -h db.example.com -U report_user -d analytics_db -W -c "SELECT * FROM sales_data ORDER BY sale_date DESC LIMIT 10;" -x
* -h db.example.com
: リモートホストを指定。
* -U report_user
: 接続ユーザーを指定。
* -d analytics_db
: 接続データベースを指定。
* -W
: パスワード入力をプロンプト表示。
* -c "..."
: 単一のSQLコマンドを実行。ここでは最新10件を取得するクエリ。
* -x
: 拡張表示モードで、カラムが多い場合でも見やすく表示。
例2: SQLスクリプトを実行し、ログファイルに記録、エラー発生時に停止
bash
psql -d production_db -f migration_script.sql -L migration.log -v ON_ERROR_STOP=1
* -d production_db
: 接続データベース。
* -f migration_script.sql
: 実行するSQLスクリプトファイル。
* -L migration.log
: セッションの入出力をmigration.logに記録。
* -v ON_ERROR_STOP=1
: エラーが発生した場合にスクリプトの実行を停止。
例3: データベースのテーブル一覧をCSV形式で取得
テーブル一覧は\dt
メタコマンドで取得できますが、\dt
の出力は整形されています。プログラムで処理しやすい形式で取得するには、pg_catalog
スキーマのシステムカタログテーブルを直接クエリするか、psqlの表示オプションを調整します。システムカタログを直接クエリする方が柔軟です。
bash
psql -d mydb -c "SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';" -A -F ',' -t -o tables.csv
* -c "SELECT ..."
: システムカタログをクエリしてテーブル名を取得。システムスキーマは除外。
* -A
: アライメントなし。
* -F ','
: フィールドセパレーターをカンマに設定。
* -t
: タプル(データ行)のみ出力(ヘッダーなし)。
* -o tables.csv
: 結果をtables.csvファイルに保存。
ヘッダーが必要な場合は-t
を削除しますが、この場合、最初の行のカラム名もカンマ区切りで出力されます。システムカタログのクエリ結果のカラム名が大文字小文字混じりなどで都合が悪い場合は、エイリアスを使用します。
bash
psql -d mydb -c "SELECT schemaname AS schema, tablename AS table FROM pg_catalog.pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema');" -A -F ',' -t -o tables.csv
よりpsqlのメタコマンドに近い形式(ヘッダー行と区切り行付き)でアライメントなし出力が欲しい場合は、\d
系のコマンドの出力を利用することも考えられますが、これはpsqlの内部実装に依存するため、システムカタログクエリの方が安定した方法です。
例4: シェルスクリプト内でpsqlを利用し、条件分岐を行う
“`bash
!/bin/bash
DBNAME=”mydatabase”
TABLE_NAME=”users”
テーブルが存在するか確認
TABLE_EXISTS=$(psql -t -A -d “$DBNAME” -c “SELECT 1 FROM information_schema.tables WHERE table_schema=’public’ AND table_name=’$TABLE_NAME’;”)
if [[ “$TABLE_EXISTS” == “1” ]]; then
echo “Table ‘$TABLE_NAME’ exists. Counting rows…”
ROW_COUNT=$(psql -t -A -d “$DBNAME” -c “SELECT COUNT(*) FROM $TABLE_NAME;”)
echo “Row count: $ROW_COUNT”
else
echo “Table ‘$TABLE_NAME’ does not exist.”
# テーブル作成などの処理に進む
fi
``
-t -A
*: 出力を最小限(タプルのみ、アライメントなし)にする。
SELECT 1の結果は
1だけが出力される。
-c “…”`: 単一コマンドを実行。
*
* シェル変数で結果を受け取り、条件分岐に利用。
.psqlrc ファイルについて
psqlの起動オプションとは少し異なりますが、psqlの動作をカスタマイズする上で非常に重要なのが、起動時に読み込まれる.psqlrc
ファイルです。このファイルは通常、ユーザーのホームディレクトリに配置されます。
.psqlrc
ファイルには、psqlのプロンプトで入力できるメタコマンド(\set
, \pset
, \timing
など)を記述できます。これにより、psqlセッションを開始するたびに手動で設定を行う手間を省くことができます。
.psqlrc
ファイルの例:
“`sql
— psqlrc ファイルの例
— プロンプトのカスタマイズ (ユーザー名@データベース名 ホスト名 ポート >)
— \set PROMPT1 ‘%[%033[1;34m%]%n@%M %>%[%033[0m%] ‘
— \set PROMPT2 ‘%[%033[1;32m%]%n@%M %> %[%033[0m%] ‘
— クエリ実行時間の表示を有効にする
\timing on
— 表示形式のデフォルト設定 (枠線を増やす)
\pset border 2
— NULL値を表示する文字列を設定
\pset null ‘(null)’
— よく使うクエリにエイリアスを設定
\set dt ‘SELECT tablename FROM pg_tables WHERE schemaname = current_schema();’
— 起動時に特定のメッセージを表示
\echo ‘Welcome to psql! \timing is on, border is 2, nulls are “(null)”.’
“`
\set variable value
: psql変数を設定します。PROMPT1
,PROMPT2
はプロンプト文字列をカスタマイズする組み込み変数です。\timing on
: 各クエリの実行時間を表示するように設定します。\pset variable value
: 表示設定変数を設定します。-P
オプションで設定できる変数と同じです。\echo message
: psqlの標準出力にメッセージを表示します。
.psqlrc
ファイルを活用することで、自分にとって最も使いやすいpsql環境を構築できます。-X
または--no-psqlrc
オプションを使用すると、このファイルの読み込みをスキップできます。
psqlのメタコマンド(補足)
オプション一覧の記事ではありますが、psqlを効果的に使うにはメタコマンドの知識も不可欠です。オプションで設定できることの多くは、対話モードでメタコマンドを使ってセッション中に変更できます。ここでは、主要なメタコマンドを簡単に紹介します。
\d[+] [pattern]
: テーブル、ビュー、シーケンスなどのオブジェクト情報を表示します。+
を付けると詳細情報が表示されます。\dt[+] [pattern]
: テーブルのみを表示します。\du[+] [pattern]
: ユーザー(ロール)情報を表示します。\l[+] [pattern]
: データベース一覧を表示します。\?
: psqlのメタコマンド一覧と簡単な説明を表示します。\q
: psqlを終了します。\e [filename]
: 現在のクエリバッファまたは指定したファイルをエディタで開きます。\i filename
: 指定したファイルからコマンドを読み込んで実行します(-f
オプションと類似しますが、対話モード内で実行できます)。\o [filename]
: 以降のクエリ結果を標準出力ではなく、指定したファイルにリダイレクトします(-o
オプションと類似)。ファイル名を省略するとリダイレクトを停止します。\set variable value
: psql変数を設定します(-v
オプションや-P
オプションと関連)。\unset variable
: psql変数の設定を解除します。\pset variable value
: 表示設定変数を設定します(-P
オプションと関連)。\timing [on|off]
: クエリ実行時間の表示を有効/無効にします。\! command
: シェルコマンドを実行します。
これらのメタコマンドは、psqlセッション中の操作を柔軟に行うために非常に重要です。特に\pset
コマンドは、-P
オプションで設定できるすべての表示設定をセッション中に変更できます。
まとめ
この記事では、PostgreSQLのコマンドラインクライアントであるpsql
の主要なオプションを網羅的に解説しました。接続オプション、入出力オプション、表示形式オプション、動作設定オプション、そしてヘルプ関連オプションについて、その機能、使い方、そして具体的な利用例を詳しく見てきました。
psql
のオプションを理解し、状況に応じて適切に使い分けることで、以下のようなメリットが得られます。
- 効率的な接続:
-h
,-p
,-U
,-d
などのオプションや環境変数を利用することで、素早く目的のデータベースに接続できます。 - バッチ処理と自動化:
-f
,-c
オプションを使用することで、SQLスクリプトの実行や単一コマンドの実行を自動化できます。シェルスクリプトと組み合わせることで、複雑なタスクも容易になります。 - 多様な出力形式:
-A
,-H
,-t
,-F
,-R
,-x
,-P
などの表示形式オプションを利用することで、人間が読みやすい整形された表形式から、プログラムが処理しやすいCSVやタブ区切り形式まで、様々な形式でデータを出力できます。これは、データのエクスポートやレポート生成に役立ちます。 - デバッグとトラブルシューティング:
-e
,-E
,-L
,-1
などのオプションは、psqlの動作やスクリプトの実行過程を詳細に確認するのに役立ち、問題の特定や解決に貢献します。 - カスタマイズ:
.psqlrc
ファイルや-X
オプションを利用することで、psqlの起動時の設定や動作をユーザーの好みに合わせて調整できます。
psql
は単なるSQL実行ツールではなく、PostgreSQLの管理、開発、データ操作のための強力な統合環境です。この記事で紹介したオプションは、その機能のごく一部に過ぎませんが、これらをマスターすることで、psql
をより深く、より効果的に活用するための基盤が築けるはずです。
この記事で紹介しきれなかった詳細や、さらに多くの機能については、PostgreSQLの公式ドキュメントを参照してください。特に、psqlの内部変数や.psqlrc
ファイルのより高度な使い方、様々なメタコマンドの詳細などが記載されています。
日々のデータベース操作において、ぜひこれらのオプションを積極的に活用してみてください。きっと、あなたのPostgreSQLワークフローがよりスムーズで効率的なものになるでしょう。
参考文献
- PostgreSQL 15 Documentation: psql (https://www.postgresql.org/docs/current/app-psql.html) – 最新バージョンの公式ドキュメントを参照することを強く推奨します。
(約5000語)