\conninfoで現在の接続情報を確認する

psqlの\conninfoメタコマンドは、現在接続しているデータベース・ユーザー・ホスト・ポートを表示する。

testdb=# \conninfo
You are connected to database "testdb" as user "postgres" via socket in "/tmp" at port "5432".

接続方法がUnixドメインソケット経由の場合はvia socket in "パス"、TCP接続の場合はホスト名とアドレスが表示される形式に変わる。

\cで接続先を切り替える

\c(\connectの短縮形)は、セッションを切断せずに別のデータベースやユーザーへ接続し直す。

testdb=# \c testdb2
You are now connected to database "testdb2" as user "postgres".

データベース名だけでなく、ユーザー名・ホスト名・ポート番号も続けて指定できる。

testdb=# \c testdb2 postgres localhost 5432
You are now connected to database "testdb2" as user "postgres" on host "localhost" (address "::1") at port "5432".

途中の引数を変えずに一部だけ変更したい場合は-を指定する。

testdb=# \c - - localhost
You are now connected to database "testdb2" as user "postgres" on host "localhost" (address "::1") at port "5432".

データベース名とユーザー名は-のまま維持され、ホストだけがTCP接続のlocalhostに変わる。

具体例: 複数のデータベースを行き来する

同じサーバー上の別データベースにある設定値を見比べたい場合、psqlを終了せず\cで行き来できる。

testdb=# SELECT count(*) FROM users;
 count
-------
     2
(1 row)

testdb=# \c testdb2
You are now connected to database "testdb2" as user "postgres".
testdb2=# SELECT count(*) FROM users;
 count
-------
     1
(1 row)

testdb2=# \c testdb
You are now connected to database "testdb" as user "postgres".

プロンプトの先頭に表示されるデータベース名が切り替わるため、どちらに接続中か見失いにくい。

\passwordでパスワードを変更する

\passwordは対話的に新しいパスワードの入力を求め、内部でALTER ROLE ... PASSWORDを実行してロールのパスワードを変更する。

testdb=# \password postgres
Enter new password for user "postgres":
Enter it again:

ロール名を省略すると、現在接続しているロール自身のパスワードを変更する。入力した内容は画面に表示されず、SQL文としてサーバーへ平文のまま送信されるのではなくハッシュ化されてから送られる。パスワードをSQL文に直接書いて\iで読み込むよりも安全である。

\encodingでクライアント側の文字エンコーディングを確認・変更する

\encodingはpsqlとサーバー間で使う文字エンコーディング(client_encoding)を表示・変更する。

testdb=# \encoding
UTF8

引数を付けると変更できる。

testdb=# \encoding SJIS
testdb=# SELECT 'テスト' AS japanese;
ERROR:  character with byte sequence 0x86 0xe3 in encoding "SJIS" has no equivalent in encoding "UTF8"

ターミナル自体はUTF-8のまま入力しているため、client_encodingをSJISに変更すると、そのUTF-8バイト列をSJISとして解釈できずサーバー側でエラーになる。\encodingはターミナルの実際の文字コードと一致させて使う必要がある。

testdb=# \encoding UTF8
testdb=# SELECT 'テスト' AS japanese;
 japanese
----------
 テスト
(1 row)

文字化けしたダンプファイルを読み込む場合など、サーバー側のエンコーディングとクライアント側のターミナルの文字コードが異なる環境で、一時的に\encodingを切り替えて調査する場面で使う。

参考