【PostgreSQL】psqlについて

PostgreSQL

環境

CentOS7
PostgreSQL 11.18

psqlとは

psqlとはPostgreSQLのターミナル型フロントエンドです。 対話的に問い合わせを入力し、それをPostgreSQLに対して発行して、結果を確認することができます。 また、ファイルまたはコマンドライン引数から入力を読み込むことも可能です。 さらに、psqlは、スクリプトの記述を簡便化したり、様々なタスクを自動化したりする、いくつものメタコマンドとシェルに似た各種の機能を備えています。

参考: PostgreSQL 14.5文書

構文

psql [option...] [dbname [username]]

-bash-4.2$ psql -U postgres
ユーザ postgres のパスワード: 
psql (11.18)
"help" でヘルプを表示します。

postgres=# 

オプション

接続オプション

接続オプション説明環境変数デフォルト
-U ユーザ名接続時のデータベースユーザ名を指定PGUSEROSユーザ名
-h ホスト名またはIPアドレス接続先のホスト名またはIPアドレスを指定
TCP/IPやUNIXドメインによる接続が可能
PGHOSTUNIXドメインによる接続
-d データベース名接続先のデータベース名を指定PGDATABASEデータベースユーザ名
-p ポート名接続先のポート番号を指定PGPORT5432

※ -dは省略可能
psql -U user testdb はユーザー名user、DB名testdbを指定

代表的なオプション

接続オプション説明
-l
--list
すべてのデータベースのリストを表示した後、psqlを終了する
-c コマンド名
--command=コマンド名
指定したコマンドの実行結果を表示した後、psqlを終了する
-f ファイル名
--file=ファイル名
指定したファイルをソースとして読み込み、実行結果を表示した後、psqlを終了する
-s
--single-step
各コマンドごとに実行するかキャンセルするかの確認をおこなう(シングルステップモード)
-1
--single-transaction
複数のコマンドを1つのトランザクションで実行する
-cオプションや-fオプションと組み合わせた場合のみ使用できる

※ 指定したファイルの読み込みには、シェルの出力リダイレクションを使用することもできる
psql -U user -d testdb < ファイル名

使用例

-l

-bash-4.2$ psql -l
ユーザ postgres のパスワード: 
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(3 行)

-c

-bash-4.2$ psql -U postgres -c "select * from tbl;"
ユーザ postgres のパスワード: 
 c1 | c2  
----+-----
  2 | 200
  1 | 300
(2 行)

-bash-4.2$ 

-f

-bash-4.2$ echo "select * from tbl;" > /home/postgres/test.sql
-bash-4.2$ psql -U postgres -f /home/postgres/test.sql 
ユーザ postgres のパスワード: 
 c1 | c2  
----+-----
  2 | 200
  1 | 300
(2 行)

-bash-4.2$ 

-s

-bash-4.2$ psql -U postgres -sf /home/postgres/test.sql 
ユーザ postgres のパスワード: 
***(シングルステップモード: コマンドを確認してください)********
select * from tbl;
***([Enter] を押して進むか、x [Enter] でキャンセル)**************

 c1 | c2  
----+-----
  2 | 200
  1 | 300
(2 行)

-bash-4.2$ 

-1

-bash-4.2$ psql -U postgres -1sf /home/postgres/test.sql 
ユーザ postgres のパスワード: 
***(シングルステップモード: コマンドを確認してください)********
select * from tbl;
***([Enter] を押して進むか、x [Enter] でキャンセル)**************

 c1 | c2  
----+-----
  2 | 200
  1 | 300
(2 行)

***(シングルステップモード: コマンドを確認してください)********
insert into tbl values (3, 400);
***([Enter] を押して進むか、x [Enter] でキャンセル)**************

INSERT 0 1
***(シングルステップモード: コマンドを確認してください)********
select * from tbl;
***([Enter] を押して進むか、x [Enter] でキャンセル)**************

 c1 | c2  
----+-----
  2 | 200
  1 | 300
  3 | 400
(3 行)

-bash-4.2$ 

メタコマンド

メタコマンドとは

psqlで独自に使用できるコマンド。
「\」で始まり、改行で終了する。
psql自体を終了するときは\qを使用する。

主なメタコマンド

コマンド取得する情報
\lデータベースの一覧
\dテーブル、ビュー、シーケンスの一覧
\dtテーブルの一覧
\duユーザの一覧
\z(\dp)テーブル、ビュー、シーケンスの一覧(アクセス権限付き)
\?メタコマンドの一覧
\hSQLコマンドのヘルプ一覧
\!OSコマンドの実行結果

使用例

\l

postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(3 行)

\d

postgres=# \d
           リレーション一覧
 スキーマ | 名前 |    型    |  所有者  
----------+------+----------+----------
 public   | tbl  | テーブル | postgres
(1 行)

\dt

postgres=# \dt
           リレーション一覧
 スキーマ | 名前 |    型    |  所有者  
----------+------+----------+----------
 public   | tbl  | テーブル | postgres
(1 行)

\du

postgres=# \du
                                              ロール一覧
 ロール名 |                                    属性                                    | 所属グループ 
----------+----------------------------------------------------------------------------+--------------
 postgres | スーパーユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

\z

postgres=# \z
                          アクセス権限
 スキーマ | 名前 |    型    | アクセス権限 | 列の権限 | ポリシー 
----------+------+----------+--------------+----------+----------
 public   | tbl  | テーブル |              |          | 
(1 行)

\?

postgres=# \?
一般
  \copyright             PostgreSQL の使い方と配布条件を表示します。
  \crosstabview [列数]   問い合わせを実行し、結果をクロスタブに表示します。
  \errverbose            最後に発生したエラーメッセージを冗長性最大で表示します。
  \g [ファイル] または ; 問い合わせを実行(し、結果をファイルまたは |パイプ へ出力)します。
  \gdesc                 問い合わせを実行せずに結果の説明を行います
  \gexec                 問い合わせを実行し、結果の中の個々の値を実行します。
  \gset [PREFIX]         問い合わせを実行して結果を psql 変数に格納します。
  \gx [ファイル名]       \g と同じですが、拡張出力モードで実行します。
  \q                     psql を終了します。
  \watch [秒数]          指定した秒数ごとに問い合わせを実行します。
~

\h

postgres=# \h
利用可能なヘルプ:
  ABORT                            CREATE FOREIGN DATA WRAPPER      DROP ROUTINE
  ALTER AGGREGATE                  CREATE FOREIGN TABLE             DROP RULE
  ALTER COLLATION                  CREATE FUNCTION                  DROP SCHEMA
  ALTER CONVERSION                 CREATE GROUP                     DROP SEQUENCE
  ALTER DATABASE                   CREATE INDEX                     DROP SERVER
  ALTER DEFAULT PRIVILEGES         CREATE LANGUAGE                  DROP STATISTICS
  ALTER DOMAIN                     CREATE MATERIALIZED VIEW         DROP SUBSCRIPTION
~

postgres=# \h ABORT
コマンド:    ABORT
説明: 現在のトランザクションを中止します
書式:
ABORT [ WORK | TRANSACTION ]

\!

postgres=# \! pwd
/var/lib/pgsql

コメント

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