psqlコマンド チートシート

cheatsheet

PostgreSQL対話式ターミナル psql の便利な使い方

接続と切断 🚪

データベースへの接続方法と切断に関するコマンドです。

コマンド形式説明使用例
psql [オプション] [DB名 [ユーザー名]]psqlを起動し、指定したデータベースとユーザーで接続します。省略した場合、環境変数やOSのユーザー名が使用されます。psql mydb myuser
psql -h <ホスト名> -p <ポート番号> -U <ユーザー名> -d <DB名> -Wホスト、ポート、ユーザー、データベースを明示的に指定して接続します。-W はパスワードプロンプトを表示させます。psql -h localhost -p 5432 -U admin -d production -W
psql "service=<サービス名>"接続サービスファイル (pg_service.conf) で定義されたサービス名を使って接続します。接続情報を一元管理できます。psql "service=my_service"
psql "postgresql://[ユーザー[:パスワード]@][ホスト[:ポート]]/[DB名][?パラメータ]"接続URI形式で接続情報を指定します。psql "postgresql://appuser:secret@db.example.com:5433/myappdb"
\c または \connect [DB名|- [ユーザー名] [ホスト名] [ポート番号]]現在の接続を切断し、新しい接続を確立します。引数なしの場合は現在の接続情報を表示します。ハイフン (-) はデフォルト値を使用することを示します。\c otherdb admin localhost 5433
\connect - otheruser
\conninfo現在の接続情報を表示します。「You are connected to database “…” as user “…” on host “…” at port “…”.」のような形式で出力されます。\conninfo
\q または Ctrl+D (EOF)psqlセッションを終了します。\q

メタコマンド (バックスラッシュコマンド) 💡

psql内で使用できる特殊なコマンドです。SQL文ではなく、psql自体の動作を制御したり、データベースの情報を表示したりします。SQL文の末尾にはセミコロンが必要ですが、メタコマンドの末尾には不要です。

メタコマンドの一覧は \? で確認できます。
コマンド説明使用例 (S+は追加情報表示)
\l, \l+データベース一覧を表示します。+付きは詳細情報(サイズ、テーブルスペースなど)も表示します。\l+
\dn, \dnS, \dn+スキーマ一覧を表示します。Sはシステムスキーマも表示、+は詳細情報(所有者、アクセス権限など)を表示します。\dn+ public
\dt, \dtS, \dt+テーブル一覧を表示します (現在のスキーマ、または指定したスキーマ)。Sはシステムテーブルも表示、+は詳細情報(サイズ、永続性など)を表示します。パターンマッチングも可能です。\dt public.*
\dt+ users
\di, \diS, \di+インデックス一覧を表示します。Sはシステムオブジェクトのインデックスも表示、+は詳細情報(サイズなど)を表示します。\di+ user_id_idx
\ds, \dsS, \ds+シーケンス一覧を表示します。Sはシステムシーケンスも表示、+は詳細情報(データ型、キャッシュ値など)を表示します。\ds+ public.
\dv, \dvS, \dv+ビュー一覧を表示します。Sはシステムビューも表示、+は詳細情報(ビュー定義など)を表示します。\dv+ user_view
\dm, \dmS, \dm+マテリアライズドビュー一覧を表示します。Sはシステムオブジェクトも表示、+は詳細情報(サイズ、アクセス権限など)を表示します。\dm+ sales_summary
\df, \dfS, \df+関数一覧を表示します。引数の型を指定して絞り込むことも可能です。Sはシステム関数も表示、+は詳細情報(戻り値の型、揮発性など)を表示します。\df public.get_*
\df+ calculate_total(int, numeric)
\sf[+] <関数名>関数の定義 (CREATE FUNCTION 文) を表示します。+付きは行番号も表示します。\sf+ my_function
\d, \d+ <オブジェクト名>テーブル、ビュー、シーケンス、インデックス、複合型などの詳細情報を表示します。+付きはさらに詳細な情報(制約、ストレージ情報など)を表示します。\d users
\d+ public.orders
\du, \du+, \dg, \dg+ロール (ユーザーとグループ) の一覧を表示します。\du はユーザーロール、\dg はグループロールに近いです (PostgreSQLではユーザーとグループの区別は曖昧)。+付きはロールの属性(ログイン権限、スーパーユーザーかなど)を表示します。\du+ myuser
\dp <パターン>, \z <パターン>テーブル、ビュー、シーケンスのアクセス権限 (GRANT/REVOKE) を表示します。\z\dp のエイリアスです。\dp users
\z public.*
\ddpデフォルト権限を表示します。ALTER DEFAULT PRIVILEGES で設定された権限を確認できます。\ddp
\dD, \dD+ <パターン>ドメイン一覧を表示します。+付きは制約情報なども表示します。\dD+ public.
\dT, \dT+ <パターン>データ型一覧を表示します (複合型、ENUM型などを含む)。+付きは詳細情報(内部名、サイズなど)を表示します。\dT+ my_enum
\dx, \dx+ <パターン>インストールされている拡張機能 (Extension) の一覧を表示します。+付きは詳細情報(説明、バージョンなど)を表示します。\dx+ uuid-ossp
\dyイベントトリガーの一覧を表示します。\dy
\dL手続き言語 (Procedural Language) の一覧を表示します (plpgsqlなど)。\dL
\encoding [<エンコーディング名>]クライアントの文字エンコーディングを表示または設定します。サーバーエンコーディングと一致させることが重要です。\encoding
\encoding UTF8
コマンド説明使用例
\g [<ファイル名> | |<コマンド>]現在のクエリバッファの内容を実行します。引数でファイルに出力したり、パイプで他のコマンドに渡したりできます。SQL文の末尾のセミコロン (;) とほぼ同等ですが、出力先指定などの機能があります。SELECT * FROM users \g results.txt
SELECT version() \g | grep PostgreSQL
\s [<ファイル名>]コマンド履歴を表示します。ファイル名を指定すると履歴をファイルに保存します。\s
\s history.sql
\e [<ファイル名>] [<行番号>]外部エディタ (環境変数 PSQL_EDITOR, EDITOR, VISUAL の順で探される) で現在のクエリバッファまたは指定したファイルを開きます。編集後、保存してエディタを終了すると、その内容がクエリバッファに読み込まれます。\e
\e my_query.sql
\ef [<関数名> [<行番号>]]指定した関数の定義を外部エディタで開きます。編集・保存後、psql内で \g を実行すると関数定義が更新されます (実際には ALTER FUNCTION が実行されるわけではなく、編集後の内容がバッファに読み込まれる)。\ef my_function
\ev [<ビュー名> [<行番号>]]指定したビューの定義を外部エディタで開きます。編集・保存後、psql内で \g を実行するとビュー定義が更新されます。\ev my_view
\p現在のクエリバッファの内容を表示します。実行前に確認するのに便利です。\p
\rクエリバッファをリセット(空に)します。\r
\w <ファイル名>現在のクエリバッファの内容を指定したファイルに書き込みます。\w save_query.sql
\watch [<秒数>]現在のクエリバッファの内容を繰り返し実行します。デフォルトは2秒間隔です。Ctrl+C で停止します。監視用途に便利です。SELECT count(*) FROM logs WHERE level = 'ERROR'; \watch 5
コマンド説明使用例
\i <ファイル名>指定したファイルからコマンドを読み込んで実行します。SQLスクリプトの実行に用います。\i setup.sql
\ir <ファイル名>\i と同様ですが、現在のスクリプトファイルからの相対パスでファイルを指定します。スクリプト内で他のスクリプトを読み込む際に便利です。\ir ../common/init.sql
\o [<ファイル名> | |<コマンド>]以降のクエリ結果を、指定したファイルまたはパイプ経由でコマンドに出力します。引数なしで標準出力に戻ります。\o query_result.txt
SELECT * FROM users;
\o
\o | less
SELECT * FROM large_table;
\o
\copy ...クライアントとサーバー間でデータをコピーします (SQLの COPY コマンドとは異なり、クライアント側のファイルシステムにアクセスできます)。ファイルとテーブル間のデータ移行に便利です。構文はSQLの COPY と似ています。\copy users TO 'users.csv' WITH CSV HEADER
\copy products FROM 'products.csv' DELIMITER ',' CSV
\echo <テキスト>指定したテキストを標準出力に表示します。スクリプト内でメッセージを表示するのに使います。変数展開も可能です。\echo 'Processing table :tablename ...'
\qecho <テキスト>指定したテキストをクエリ出力チャネル (\o で指定した先) に表示します。レポートにヘッダーやフッターを追加するのに便利です。\o report.txt
\qecho '--- Sales Report ---'
SELECT * FROM sales;
\qecho '--- End of Report ---'
\o
コマンド説明使用例
\a出力フォーマットを「整列 (aligned)」と「非整列 (unaligned)」で切り替えます。デフォルトは整列です。非整列はタブ区切りになります。\a
\C [<タイトル>]テーブルのキャプション(タイトル)を設定します。引数なしで解除します。\pset formathtml, latex などの場合に意味を持ちます。\C 'User List'
\H または \htmlHTMLテーブル形式での出力を有効/無効にします。Webページへの埋め込みなどに便利です。\H
\t [on|off]タプル(行データ)のみの表示を有効/無効にします。デフォルトは off で、ヘッダーやフッターも表示されます。on にするとデータ行のみが表示されます。引数なしでトグルします。\t
\t on
\T <テーブル属性>HTML の <table> タグに追加する属性を設定します (例: border="1")。\H が有効な場合に意味を持ちます。\T 'cellpadding="5" cellspacing="0"'
\x [on|off|auto]拡張表示モードを切り替えます。on にすると、各行が「列名 | 値」の形式で表示され、横に長いテーブルが見やすくなります。auto は通常の表示で収まらない場合に自動で拡張表示にします。引数なしでトグルします (on/off)。\x auto
\pset <オプション> [<値>]出力フォーマットに関する様々なオプションを設定します。以下に主なオプションを示します。下記参照
\pset format <フォーマット>出力フォーマットを指定します。aligned, unaligned, html, latex, troff-ms, csv, wrapped などがあります。\pset format csv
\pset border <数値>罫線のスタイルを設定します。0 (罫線なし), 1 (内側のみ), 2 (内側と外側、デフォルト) があります。\pset border 1
\pset tuples_only [on|off]\t と同じ効果です。\pset tuples_only on
\pset title [<テキスト>]\C と同じ効果です。テーブルのタイトルを設定します。\pset title 'Product Catalog'
\pset null '<表示文字列>'NULL 値をどのように表示するかを設定します。デフォルトは空文字列です。\pset null '(NULL)'
\pset recordsep [on|off]非整列 (unaligned) モードで行区切り文字 (デフォルトは改行) を表示するかどうか。\pset recordsep on
\pset linestyle <ascii|old-ascii|unicode>罫線の描画に使用する文字種を設定します。\pset linestyle unicode
\pset pager [on|off|always]長い出力に対するページャ(lessなど)の使用を制御します。on は端末の高さに応じて自動、off は無効、always は常時使用。\pset pager off
コマンド / 構文説明使用例
\set [<変数名> [<値> ...]]psql 変数を設定します。値が省略された場合は空文字列、変数名も省略された場合は現在の変数一覧を表示します。特殊な変数 (PROMPT1, PROMPT2, PROMPT3, ECHO, VERBOSITY など) もあります。\set mytable users
\set start_id 100
\set
\set PROMPT1 '%/%R%# '
\unset <変数名>psql 変数の設定を解除します。\unset mytable
:変数名psql 変数の値を参照(展開)します。SQL 文内でも使用できます。文字列として展開されるため、必要に応じてクォートが必要です。SELECT * FROM :mytable WHERE id > :start_id;
\echo 'Current table is ' :mytable
:'変数名'変数の値を SQL リテラルとして展開します。シングルクォートで囲まれ、内部のシングルクォートはエスケープされます。SELECT * FROM users WHERE name = :'user_name';
:`変数名`変数の値を SQL 識別子として展開します。ダブルクォートで囲まれ、内部のダブルクォートはエスケープされます。テーブル名や列名などに使用します。SELECT * FROM :"schema_name"."table_name";
\prompt [<変数名>] <プロンプトテキスト>ユーザーに入力を促し、その値を指定した psql 変数に設定します。変数名を省略すると、入力された値はクエリバッファに追加されます。\prompt user_id 'Enter user ID: '
SELECT * FROM users WHERE id = :user_id;
PROMPT1, PROMPT2, PROMPT3プロンプトの表示形式を制御する特殊変数。PROMPT1: 通常、PROMPT2: 複数行入力時、PROMPT3: COPY FROM STDIN 時。% で始まるシーケンス(%M: ホスト名、%/: DB名、%n: ユーザー名、%#: スーパーユーザーなら #、他は > など)を使用できます。\set PROMPT1 '%n@%/%R%# '
ECHOpsql が実行するコマンドのエコーを制御する特殊変数。none (デフォルト), queries (実行するクエリを表示), all (\i で読み込んだコマンドも表示)。\set ECHO queries
VERBOSITYエラーメッセージの詳細度を制御する特殊変数。default, terse, verbose\set VERBOSITY verbose
ON_ERROR_STOPスクリプト実行中にエラーが発生した場合の動作を制御する特殊変数。off (デフォルト、エラー後も続行), on (エラーでスクリプトを停止)。\set ON_ERROR_STOP on
デフォルトでは、psql は自動コミットモードではありません。各 SQL 文は個別のトランザクションとして実行されるわけではなく、BEGIN から COMMIT または ROLLBACK までが一つのトランザクションブロックになります。ただし、単一の文 (エラーなし) は暗黙的にコミットされます。明示的なトランザクション制御が推奨されます。\set AUTOCOMMIT off とすると、すべての文が明示的な COMMIT/ROLLBACK を必要とするようになります。
コマンド説明
BEGIN; または START TRANSACTION;トランザクションを開始します。
COMMIT; または END;現在のトランザクションをコミットし、変更を確定します。
ROLLBACK;現在のトランザクションをロールバックし、変更を取り消します。
SAVEPOINT <セーブポイント名>;トランザクション内にセーブポイントを設定します。
ROLLBACK TO SAVEPOINT <セーブポイント名>;指定したセーブポイント以降の変更を取り消します。
RELEASE SAVEPOINT <セーブポイント名>;指定したセーブポイントを削除します。これ以降、そのセーブポイントへのロールバックはできなくなります。
\set AUTOCOMMIT [on|off]自動コミットモードを切り替えます。on の場合、各SQL文が成功すると自動的にコミットされます (psql のデフォルトの振る舞いとは異なる点に注意)。off の場合は明示的な COMMIT/ROLLBACK が必要になります。
-- トランザクション例
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
SAVEPOINT after_deduct;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- 何か問題が発生した場合
-- ROLLBACK TO SAVEPOINT after_deduct; -- user_id=2 の変更を取り消し
-- ROLLBACK; -- 全ての変更を取り消し
COMMIT; -- 問題なければ変更を確定
コマンド説明使用例
\timing [on|off]各SQL文の実行時間をミリ秒単位で表示するかどうかを切り替えます。パフォーマンス測定に役立ちます。\timing on
\cd [<ディレクトリパス>]psql のカレントディレクトリを変更します。引数なしで現在のディレクトリを表示します。\i などで相対パスを使用する際に便利です。\cd /path/to/sql/scripts
\cd
\! [<シェルコマンド>]シェルコマンドを実行します。引数なしで対話的なシェルを起動します (終了すると psql に戻る)。\! ls -l *.sql
\!
\? [<トピック>]psql のメタコマンドに関するヘルプを表示します。トピック (例: variables, display) を指定すると、関連するコマンドのヘルプが表示されます。\?
\? variables
\copyrightPostgreSQL と psql の配布条件 (著作権情報) を表示します。\copyright
\history\s と同じくコマンド履歴を表示します。\history
\prompt -r <変数名>プロンプトを表示せずに、標準入力から一行読み込んで変数に格納します。スクリプト内でパイプからの入力を受け取る場合などに使用できます。\! echo 'some_value' | psql -c '\prompt -r myvar' -c '\echo :myvar'
\setenv <NAME> [<VALUE>]psql が実行される環境の環境変数を設定します。\! で実行されるコマンドなどに影響します。\setenv PAGER less

psql 起動オプション ⚙️

psql 起動時に指定できる主なコマンドラインオプションです。

オプション説明使用例
-c, --command=<コマンド>単一のコマンド文字列を実行して終了します。SQL文でもメタコマンドでも可。psql -c "SELECT version();" mydb
-f, --file=<ファイル名>指定したファイルからコマンドを読み込んで実行し、終了します。\i と似ていますが、psql 起動時に指定します。psql -f init.sql mydb
-v, --set=, --variable=
NAME=VALUE
psql 変数を起動時に設定します。\set と同等です。複数指定可能です。psql -v table=users -v limit=10 -f query.sql
-X, --no-psqlrcスタートアップファイル (~/.psqlrc) を読み込まないようにします。psql -X mydb
-1, --single-transaction-f または -c で指定されたコマンド全体を単一のトランザクションとして実行します。エラーが発生すると全体がロールバックされます。psql -1 -f setup.sql mydb
-L, --log-file=<ファイル名>セッションの全内容を指定したファイルに記録します。psql -L session.log mydb
-o, --output=<ファイル名>クエリの出力を指定したファイルに書き込みます。\o と似ています。psql -o result.txt -c "SELECT * FROM products;"
-q, --quiet起動時のメッセージや情報メッセージを抑制し、静かに実行します。スクリプトでの利用に適しています。psql -q -f script.sql
-A, --no-align非整列モードで起動します。\a のデフォルトが非整列になります。psql -A -c "SELECT * FROM users;"
-H, --htmlHTML出力モードで起動します。\H のデフォルトが on になります。psql -H -o report.html -f report.sql
-t, --tuples-onlyタプルのみ表示モードで起動します。\t のデフォルトが on になります。psql -t -c "SELECT count(*) FROM logs;"
-x, --expanded拡張表示モードで起動します。\x のデフォルトが on になります。psql -x -c "SELECT * FROM config WHERE id=1;"
-P, --pset=
NAME[=VALUE]
\pset コマンドを起動時に実行します。psql -P format=csv -P tuples_only=on -o data.csv -f export.sql
-d, --dbname=<DB名>接続するデータベース名を指定します。(接続のセクション参照)
-h, --host=<ホスト名>接続するサーバーのホスト名を指定します。(接続のセクション参照)
-p, --port=<ポート番号>接続するサーバーのポート番号を指定します。(接続のセクション参照)
-U, --username=<ユーザー名>接続に使用するデータベースユーザー名を指定します。(接続のセクション参照)
-W, --password接続パスワードの入力を強制的に要求します。(接続のセクション参照)
-w, --no-passwordパスワードプロンプトを表示しません。パスワードが必要な場合、他の方法(例: .pgpass ファイル)で提供されている必要があります。接続に失敗します。psql -w mydb myuser

環境変数 🌍

psql の動作は、いくつかの環境変数によっても制御されます。コマンドラインオプションは通常、環境変数よりも優先されます。

環境変数説明対応するオプション/メタコマンド
PGDATABASEデフォルトの接続先データベース名。-d
PGHOSTデフォルトの接続先ホスト名。-h
PGPORTデフォルトの接続先ポート番号。-p
PGUSERデフォルトの接続ユーザー名。-U
PGPASSWORD接続パスワード。セキュリティ上の理由から、この変数の使用は推奨されません。.pgpass ファイルの使用を検討してください。-W / -w
PGSERVICEデフォルトの接続サービス名 (pg_service.conf 内のエントリ)。psql "service=..."
PGPASSFILEパスワードファイル (デフォルトは ~/.pgpass) の場所を指定します。
PSQL_EDITOR, EDITOR, VISUAL\e, \ef, \ev で使用するエディタを指定します。この順序で参照されます。\e, \ef, \ev
PAGER長い出力の表示に使用するページャプログラム (例: less, more)。\pset pager
PSQLRCユーザごとのスタートアップスクリプトの場所を指定します (デフォルトは ~/.psqlrc)。-X
PSQL_HISTORYコマンド履歴ファイルの場所を指定します (デフォルトは ~/.psql_history)。\s

コメント

タイトルとURLをコピーしました