psqlコマンドラインツールの基本操作
psqlは、PostgreSQLに標準で付属している、非常に強力で高機能なコマンドラインクライアントです。対話的にSQLクエリを実行したり、データベースの管理タスクを行ったり、スクリプトを自動実行したりと、PostgreSQLを扱う上で欠かせないツールです。
このガイドでは、psqlの基本的な使い方から、日々の業務を効率化するための便利なテクニックまでを解説します。
1. psqlへの接続
psqlを使用してデータベースに接続するには、いくつかの方法があります。
1.1. 基本的な接続
最も基本的なコマンドは以下の通りです。
psql -U <ユーザー名> -d <データベース名> -h <ホスト名>-U: 接続に使用するユーザー名(ロール名)を指定します。-d: 接続先のデータベース名を指定します。-h: データベースサーバーのホスト名またはIPアドレスを指定します。ローカルホストの場合は省略可能です。-p: ポート番号を指定します。デフォルトの5432以外を使用している場合に指定します。
例:localhostにあるmydatabaseというデータベースにmyuserというユーザーで接続する場合:
psql -U myuser -d mydatabase実行後、パスワードの入力を求められます。
1.2. 接続情報の省略
ユーザー名やデータベース名を省略した場合、現在のOSのユーザー名がデフォルト値として使用されます。 例えば、OSのユーザー名がmyuserの場合、以下のコマンドはpsql -U myuser -d myuserと等価です。
psql2. SQLの実行
psqlに接続すると、データベース名=>(スーパーユーザーの場合は#)というプロンプトが表示されます。ここに直接SQLクエリを入力して実行できます。
- コマンドの終端: SQLコマンドの終わりはセミコロン(
;)で示します。セミコロンを入力するまで、コマンドは複数行にわたって記述できます。 - コマンドのキャンセル: 入力中のコマンドをキャンセルしたい場合は
\cではなく、Ctrl+Cを使用します。
例:
SELECT version();CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INTEGER
);3. メタコマンド(バックスラッシュコマンド)
psqlの最大の特徴は、\(バックスラッシュ)から始まる「メタコマンド」です。これらはSQLではなく、psql自身に対する命令であり、データベースの情報を表示したり、psqlの動作をカスタマイズしたりするのに役立ちます。
3.1. よく使うメタコマンド
| コマンド | 説明 |
|---|---|
\q | psqlを終了します。 |
\l | データベースの一覧を表示します。 |
\c <DB名> | 指定したデータベースに再接続します。 |
\dt | 現在のデータベースのテーブル一覧を表示します。 |
\d <テーブル名> | 指定したテーブルの定義(カラム、型、制約など)を表示します。 |
\dn | スキーマの一覧を表示します。 |
\df | 関数の一覧を表示します。 |
\dv | ビューの一覧を表示します。 |
\du | ユーザー(ロール)の一覧を表示します。 |
\timing | SQLの実行時間を表示/非表示を切り替えます。 |
\x | 実行結果の表示形式を「通常」と「拡張(縦表示)」で切り替えます。カラムが多い場合に便利です。 |
\i <ファイル名> | 指定したファイルからSQLを読み込んで実行します。 |
\? | 利用可能なメタコマンドの一覧を表示します。 |
\h <SQLコマンド> | 指定したSQLコマンドのヘルプを表示します。(例: \h CREATE TABLE) |
使用例:
mydatabase=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | products | table | myuser
(1 row)
mydatabase=> \d products
Table "public.products"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('products_id_seq'::regclass)
name | character varying(100) | | not null |
price | integer | | |
Indexes:
"products_pkey" PRIMARY KEY, btree (id)4. スクリプトファイルの実行
.sqlファイルに書かれた一連のコマンドを実行するには、リダイレクトを使う方法と、-fオプションを使う方法があります。
# リダイレクトを使用
psql -U myuser -d mydatabase < my_script.sql
# -f オプションを使用
psql -U myuser -d mydatabase -f my_script.sqlpsql内から実行する場合は\iメタコマンドを使用します。
\i my_script.sql5. psqlのカスタマイズ
~/.psqlrcファイルを作成することで、psql起動時の設定をカスタマイズできます。
例: ~/.psqlrc
-- 実行時間を常に表示する
\timing
-- プロンプトをカスタマイズして、ユーザー名@ホスト名:ポート/DB名 を表示
\set PROMPT1 '%n@%m:%>/%d=> '
-- 拡張表示をデフォルトにする
\xこのファイルに良く使うメタコマンドや設定を記述しておくことで、psqlをより快適に使用できます。