PostgreSQL | psql を使用して PostgreSQL に接続 | psql オプションの使い方とオプション一覧

psql を実行するときには、接続に使用するユーザー名やデータベースを指定するオプション以外にも、いくつかのオプションが用意されている。ここでは、psql の実行時に指定できるオプションの使い方とオプション一覧について説明する。

psql を実行するときによく使用するオプションは、PostgreSQL に接続するときに使う -h-U だが、それ以外にもいくつかのオプションが用意されている。

バージョンを確認する

-V オプションで PostgreSQL のバージョンを表示できる。

psql -V
C:\>psql -V
psql (PostgreSQL) 12.2

C:\>

オプション一覧とヘルプを表示する

-? はオプション一覧とヘルプを表示するオプションである。

C:\>psql -?
psql は PostgreSQL の対話式ターミナルです。

使用方法:
  psql [OPTION]... [DBNAME [USERNAME]]

一般オプション:
  -c, --command=COMMAND    1 つのコマンド(SQL または内部コマンド)だけを実行して終了
  -d, --dbname=DBNAME      接続するデータベース名(既定値: "devkuma")
  -f, --file=FILENAME      ファイル内に指定したコマンドを実行して終了
  -l, --list               使用可能なデータベース一覧を表示して終了
  -v, --set=, --variable=NAME=VALUE
                           psql 変数 NAME に VALUE を設定
                           (例: -v ON_ERROR_STOP=1)
  -V, --version            バージョン情報を表示して終了
  -X, --no-psqlrc          起動ファイル(~/.psqlrc)を読み込まない
  -1 ("one"), --single-transaction
                           コマンドファイルを 1 つのトランザクションとして実行
  -?, --help[=options]     このヘルプを表示して終了
      --help=commands      psql 内部コマンド(\ で始まるもの)を表示して終了
      --help=variables     特別な変数を表示して終了

入出力オプション:
  -a, --echo-all           スクリプトのすべての入力を表示
  -b, --echo-errors        失敗したコマンドを出力
  -e, --echo-queries       サーバーに送信したコマンドを表示
  -E, --echo-hidden        内部コマンドが生成するクエリを表示
  -L, --log-file=FILENAME  セッションログをファイルへ送信
  -n, --no-readline        拡張コマンドライン編集機能(readline)を無効化
  -o, --output=FILENAME    クエリ結果をファイル(または |パイプ)へ送信
  -q, --quiet              静かに実行(メッセージなしでクエリ結果のみ表示)
  -s, --single-step        シングルステップモード(各クエリを確認)
  -S, --single-line        1 行モード(行末で SQL コマンドを終了)

出力形式オプション:
  -A, --no-align           整列しない表形式の出力モード
      --csv                CSV (カンマ区切りデータ) の表出力モード
  -F, --field-separator=STRING
                           unaligned 出力用のフィールド区切り文字を設定(既定値: "|")
  -H, --html               HTML 表形式の出力モード
  -P, --pset=VAR[=ARG]     表示オプション VAR に ARG を設定(\pset コマンド参照)
  -R, --record-separator=STRING
                           unaligned 出力用のレコード区切り文字を設定
                           (既定値: 改行文字)
  -t, --tuples-only        行だけを表示
  -T, --table-attr=TEXT    HTML table タグの属性を設定(例: width, border)
  -x, --expanded           拡張表形式で出力
  -z, --field-separator-zero
                           unaligned 出力用のフィールド区切り文字を 0 バイトに指定
  -0, --record-separator-zero
                           unaligned 出力用のレコード区切り文字を 0 バイトに指定

接続オプション:
  -h, --host=HOSTNAME      データベースサーバーのホストまたはソケットディレクトリ
                           (既定値: "ローカルソケット")
  -p, --port=PORT          データベースサーバーのポート(既定値: "5432")
  -U, --username=USERNAME  データベースユーザー名(既定値: "devkuma")
  -w, --no-password        パスワードプロンプトを表示しない
  -W, --password           パスワード入力プロンプトを表示(通常は自動で処理)

詳しくは、psql 内で "\?"(内部コマンド) または "\help"(SQL
コマンド) を入力するか、PostgreSQL
ドキュメントの psql セクションを参照してください。

バグ報告: <pgsql-bugs@lists.postgresql.org>.

C:\>

結果表示に HTML テーブルタグを使用するよう指定する

psql を使用して PostgreSQL に接続した後の表示方法に関するオプションもある。たとえば、PostgreSQL に接続した後でデータベース一覧を表示すると、次のように表示される。

C:\>psql -U postgres
postgres ユーザーのパスワード:
psql (12.2)
ヘルプを表示するには "help" と入力してください。

postgres=# \l
                                      データベース一覧
   名前    |  所有者  | エンコーディング |     Collate      |      Ctype       |      アクセス権限
-----------+----------+------------------+------------------+------------------+-----------------------
 postgres  | postgres | UTF8             | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8             | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |                  |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8             | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |                  |                  |                  | postgres=CTc/postgres
(3 行)


postgres=#

-H オプションを使用して psql を起動し PostgreSQL に接続すると、同じデータベース一覧を HTML テーブルタグを使用した形式で出力できる。

C:\>psql -H -U postgres
postgres ユーザーのパスワード:
psql (12.2)
ヘルプを表示するには "help" と入力してください。

postgres=# \l
<table border="1">
  <caption>データベース一覧</caption>
  <tr>
    <th align="center">名前</th>
    <th align="center">所有者</th>
    <th align="center">エンコーディング</th>
    <th align="center">Collate</th>
    <th align="center">Ctype</th>
    <th align="center">アクセス権限</th>
  </tr>
  <tr valign="top">
    <td align="left">postgres</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">&nbsp; </td>
  </tr>
  <tr valign="top">
    <td align="left">template0</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">=c/postgres<br />
postgres=CTc/postgres</td>
  </tr>
  <tr valign="top">
    <td align="left">template1</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">=c/postgres<br />
postgres=CTc/postgres</td>
  </tr>
</table>
<p>(3 行)<br />
</p>

postgres=#

ここで示したデータベース一覧だけでなく、他の検索結果も HTML のテーブルタグを使用した形式で出力される。

postgres=# select now()
postgres-# ;
<table border="1">
  <tr>
    <th align="center">now</th>
  </tr>
  <tr valign="top">
    <td align="left">2020-03-15 02:30:16.292241+09</td>
  </tr>
</table>
<p>(1 行)<br />
</p>

postgres=#

ファイルを使用して SQL を実行する

-f オプションを使用すると、ファイルを使って SQL を実行できる。

まず、次のように SQL ファイルを作成する。

D:\>copy con file.sql
select now();^Z
        1 個のファイルをコピーしました。

作成したファイルを次のように実行すると、出力結果を確認できる。

D:\>psql -U postgres -f file.sql
postgres ユーザーのパスワード:
              now
-------------------------------
 2020-03-15 02:39:17.327284+09
(1 行)



D:\>

このように psql のオプションにはさまざまな機能が用意されているため、後でオプション一覧を確認し、何ができるかを把握しておくと便利に使える。