psql

Name

psql  --  Postgres インタラクティブクライアント

Synopsis

psql [ dbname ]
psql -A [ -c query ] [ -d dbname ]
    -e -E [ -f filename ] [ -F separator ]
    [ -h hostname ] -Hln [ -o filename ]
    [ -p port ] -qsSt [ -T table_o ] -ux
    [ dbname ]
  

入力

psql は、 数多くのコマンドライン引数、豊富なメタコマンドのセットそして Postgres がサポートする全ての SQL 言語を受けつけます。最も一般的なコマンドライン 引数には以下のようなものがあげれれます。

dbname

アクセスする既存のデータベース名です。 デフォルトの dbnameUSER の環境変数の値となります。環境変数が設定されていない場合、 現在のユーザの Unix のアカウント名となります。

-c query

実行する単独の問合せです。 完了時点で psql は終了します。

全てのコマンドライン引数とメタコマンドのセットは引き続く節で 説明されます。

いくつかの環境変数をコマンドライン引数の代わりに使用する ことが出来ます。 更に、psql で使われる Postgres フロントエンドライブラリは、 例えば日付/時間の表現スタイルやローカルなタイムゾーンなどの、 その設定用にオプションである環境変数を見に行きます。より詳細については プログラマガイドlibpq 章を参照して下さい。

特定のコマンドラインオプションを省くため以下のどんな環境 変数をセットしてもかまいません。

PGHOST

データベースサーバの DNS ホスト名です。 PGHOST 名が何らかの文字列で指定されると、 デフォルトのローカル Unix ドメインソケットではなく、TCP/IP 通信が使用されます。

PGPORT

Postgres サーバが監視している ポート番号で、デフォルトは 5432 です。

PGTTY

クライアントのサポートライブラリからメッセージを 表示するターゲットです。必要ありません。

PGOPTION

PGOPTION が指定されると、それが含んでいる オプションは、どんなコマンドラインオプションより 前にパースされます。

PGREALM

Kerberos による認証 が使われいるときに限りPGREALM は 適用されます。 この環境変数がセットされている場合、 Postgres はこの領域にたいし サーバと認証をおこない、ローカルチケットファイルと 衝突を避けるため独立したチケットファイルを使用します。 Kerberos についての 追加情報は PostgreSQL 管理者ガイド を参照して下さい。

出力

全ての問合せが成功裡に終った場合、 psql はシェルに 0 を 返します。1 はエラーで、2 はバックエンドが急に 接続を解除した場合です。 psql は何らかの理由で データベースに接続できなかった場合にも 1 を返します。

デフォルトとして TAB デリミタが使用されます。

説明

psql は文字ベースの Postgres に対する フロントエンドです。 対話型で問合せを入力し、その問合せを Postgres にたいして発行、そして 結果を得ます。

psqlPostgres のクライアント アプリケーションです。ということは、 postmaster プロセスが データベースサーバホスト上で、psql が実行される以前に立ち上がっていなければなりません。 更に、postmaster ホスト名 のようなデータベースサーバを特定する正しいパラメータ が下記に説明するように指定されている必要があります。

psql が起動するとき SQL コマンドを /etc/psqlrc から、 そして $(HOME)/.psqlrc から読み込みます。 セッションの開始毎に実行される日付形式の設定に使用する SET のようなコマンドを使うことも出来ます。

データベースへの接続

psql はコマンドラインで指定された ホスト名とポート番号上のデータベースに接続しようと試みます。 何らかの理由(例えば権限が無効であるとか、サーバ上で postmaster が 走っていない等)によって接続できなかった場合、 psql は、

     Connection to database failed.
    
のようにエラーを返します。 なぜ接続に失敗したかは通知されません。

問合せの入力

通常の操作においては、 psql は、psql が現在接続しているデータベース名に続いて "=>" の文字列のプロンプト を表示します。 例えばこのようなものです。

$ psql testdb
Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.0 on i686-pc-linux-gnu, compiled by gcc 2.7.2.3]

   type \? for help on slash commands
   type \q to quit
   type \g or terminate with semicolon to execute query
 You are currently connected to the database: testdb
	  
testdb=>
    

このプロンプトにたいして、ユーザは SQL 問合せが入力可能となります。 -S オプションが設定されていない限り、入力された行は一つの 問合せの終結を意味するセミコロンが入力された時点で、バック エンドに送られます。

ある問合せが実行されたときはいつでも、 LISTENNOTIFY によって 生成された非同期通知イベントを psql は 同様に確認します。

psql はパイプ処理としても使用できます。 実ttyとの入出力がなければ自動的に(パイプであることを)検出します。

画面上でのページング

著者: 1998-04-04 メーリングリストの Brett McCormick より

psql の出力のページングの振舞いをどう するかは、自分の PAGER の環境変数を設定または解除 します。 筆者はいつも中断する前に自分用のを設定しなければならなく なります。 もちろん、皆さんは psql プログラムを起動する前に行って おいてください。

csh/tcsh または他の C シェルの場合:

% unsetenv PAGER
    
一方 sh/bash または他の Bourne シェルの場合:
% unset PAGER
    

コマンドラインオプション

psql では以下のコマンドライン オプションが使えます。

-A

テーブルの要素を出力するときの均等割り付けを行いません。

-c query

psql が単一の問合せ文 query を実行し、そして終了するように指定します。 このことはシェルスクリプト、典型的な場合として、 スクリプト中の -q オプションと一緒に 使うと便利です。

-d dbname

接続するデータベース名を指定します。 コマンドラインの最終フィールドで dbname を指定することと同等です。

-e

バックエンドへ送られた問合せをエコーします。

-E

\d で実際に生成された問合せと他のバックスラッシュの付いた コマンドをエコーします。

-f filename

対話的に問合せを読み込むのではなしに、ファイル filename を 問合せの元として使用します。ファイルはクライアントフロント エンド用に、かつクライアントフロントエンドが処理できるよう 指定されていなければなりません。

-F separator

separator をフィールドセパレータとして使用します。 デフォルトは ASCII の縦棒 ("|") です。

-h hostname

postmaster が走っている 機械のホスト名を指定します。 このオプションが無い場合、通信にはローカル Unix ドメイン ソケットが使用されます。

-H

HTML 3.0 表形式出力を有効にします。

-l

利用できるデータベースの一覧を表示し、終了します。 他の接続関連以外のオプションは無視されます。

-n

入力行の編集とコマンド履歴にリードラインライブラリの使用を 禁止します。

-o filename

全ての出力をファイル filename に落します。ファイルへのパスはクライアントが書き込めるように なっていなければなりません。

-p port

TCP/IP ポートを指定します。省略された場合は postmaster が接続を監視しているローカル Unix ドメインソケットファイル の拡張子となります。デフォルトは環境変数がセットされていれば PGPORT で、セットされていなければ 5432 です。

-q

psql が沈黙して処理を行うよう指定します。 デフォルトでは welcome と exit メッセージ、それぞれの 問合せに対するプロンプトおよび問合せで戻った行数を 出力します。このオプションを使用するとこのように出力されません。 -c オプションと一緒に使うと便利です。

-s

各問合せがバックエンドに送られる前に、 ユーザに確認のプロンプトが出されるシングルステップモードで 起動します。

-S

各問合せがセミコロンではなく改行で締めくくられる様にして、 シングルステップモードで起動します。

-t

カラム名の出力を無効にします。 シェルスクリプトでの -c オプションと一緒に使うと便利です。

-T table_options

HTML 3.0 表形式出力 用の table ... タグの中にオプションを 指定することを可能にします。 例えば、border はテーブルに枠を付けます。 このオプションは -H オプションと共に使用 する必要があります。

-u

ユーザに対して、データベースに接続する前にユーザ名とパスワードを 求めます。データベースがパスワード認証を必要としてい なければ無視されます。このオプションが使用されないで (環境変数 PGPASSWORD が設定されておらず)データベースがパス ワード認証を必要とする場合、接続は失敗となります。いずれに してもユーザ名は無視されます。

-x

拡張行フォーマットモードを有効にします。 有効となっている場合、行のカラム名は左詰めで、カラムの値は 右詰めで出力されます。画面の横一列に何としても入らない長い 行に対して有効です。HTML の行出力もこのモードをサポート しています。

上に述べたいくつかのオプションをいちいち入力することなしに 環境変数で設定することも出来ます。下記の環境変数の節を 参照して下さい。

psql メタコマンド

引用符なしでバックスラッシュから始まるいかなる psql への入力は、 psql のメタコマンドです。 どれもが SQL で単に現在の問合せバッファ に送られます。(そして、問合せ文が終結した時点でバッファの 内容は自動的にバックエンドに送付されます。) psql のメタコマンドはスラッシュコマンド とも呼ばれます。

psql コマンドはバックスラッシュに すぐ続く動詞コマンドと、それに続く何らかの引数からなります。 引数は動詞コマンドからは離されて、それぞれがいくつでもよい 空白文字で区切られます。

歴史的理由で、一文字の動詞コマンドは引数との間を空白文字で区切る 必要がありません。 ともかく次の通りです。

以下のメタコマンドが定義されています:

\a

テーブルの要素を出力する時にフィールドの位置揃えをトグルします。

\C caption

HTML3.0 のテーブルの見出しを "caption" に設定します。

\connect dbnameceable> [ username ]

特に指定されていなければ、デフォルトの username で新規データベースに接続します。

\copy tableceable> { FROM | TO } filename

フロントエンド(クライアント)のコピーを実行します。 SQL COPY コマンドの操作となります。 ただし、バックエンドが直接指定ファイルの読み書きを行なう(これ には必然的にバックエンドへのアクセスと特別なユーザ権限が要求さ れます)のではなく、psql がそのファ イルを読みバックエンドにそのデータを中継する、あるいは、バック エンドから中継されたデータをファイルに書き込みます。

Tip: この操作は SQL COPY コマンド程 効率よくありません。というのは、全てのデータがクライアント/サーバ IP 接続かソケット接続を通じてやりとりされなくてはならないからです。 データ量が多いときは他の手法を使ったほうがよいでしょう。

\d [ table ]

データベースにあるテーブルの一覧を表示し、 table が指定 された場合は、テーブル内のカラムが表示されます。 星印 ("*") でテーブル名が指定されると 全てのテーブルとそれぞれのテーブルのカラムの情報の 一覧が表示されます。

\da

有効な集約の一覧を表示します。

\dd object

pg_descriptionから, 指定された、テーブル、テーブル・カラム、型、演算子または 集約などのオブジェクトの記述の一覧を表示します。

Tip: 全てのオブジェクトが pg_description に 記述があるとは限りません。 このメタコマンドは Postgres 本来の特徴の記述をを素早く見たいときに便利です。

\df

関数の一覧を表示します。

\di

インデックスのみの一覧を表示します。

\do

演算子の一覧のみを表示します。

\ds

シーケンスの一覧のみを表示します。

\dS

システムテーブルとインデックスの一覧を表示します。

\dt

非システムテーブルのみの一覧を表示します。

\dT

型の一覧を表示します。

\e [ filename ]

現在の問合せバッファまたは filename ファイルの 内容を編集します。

\E [ filename ]

現在の問合せバッファまたは filename ファイルの 内容を編集し、エディタが終了した時点で実行します。

\f [ separator ]

フィールドのセパレータを設定します。デフォルトは 一つの空白スペースです。

\g [ { filename | |command } ]

現在の問合せ入力バッファをバックエンドに送り、オプションとして filename に出力を セーブするかまたは command 実行のため独立した Unix シェルに出力をパイプします。

\h [ command ]

指定した SQL コマンドの構文のヘルプを表示します。 command が SQL コマンドに定義されていない (あるいはpsqlにドキュメント化されていない) 場合または、command が 指定されていない場合、psql は構文の ヘルプが有効な全てのコマンドの一覧を表示します。

\H

HTML3 出力をトグルします。 コマンドラインの -H オプションと同等です。

\i filename

問合せを filename ファイルから問合せ入力バッファに読み込みます。

\l

サーバに存在する全てのデータベースの一覧を表示します。

\m

テーブルを囲む線付の、旧式のモニタ形式のテーブル表示をトグルします。 これは標準の SQL 出力です。 デフォルトでは、psql はカラム間の フィールドセパレータのみ表示します。

\o [ { filename | |command } ]

後の問合せ結果を filename ファイルにセーブするか、 command 実行のため、後の問合せ結果を独立した Unix シェルにパイプします。

\p

現在の問合せバッファを表示します。

\q

psql プログラムを終了します。

\r

問合せバッファをリセット(消去)します。

\s [ filename ]

コマンドラインの履歴を表示するか filename に セーブします。 filename が省略 されると、引き続くコマンドは履歴ファイルにセーブされません。 このオプションは psql が リードライン を使用するように configure されているときのみ有効です。

\t

カラム名の書き出しと行数フッタの出力表示をトグルします。 (デフォルトは on です。)

\T table_options

HTML 3.0 表形式出力 用の table ... タグの中にオプションを 指定することを可能にします。 例えば、border はテーブルに枠を付けます。 このオプションは \H メタコマンドと共に使用 されなければなりません。

\x

拡張行フォーマットモードをトグルします。 有効となっている場合、行のカラム名は左詰めで、カラムの値は 右詰めで出力されます。画面の横一列に何としても入らない長い 行に対して有効です。HTML の行出力もこのフラグをサポート しています。

\w filename

現在の問合せバッファをファイル filename に出力します。

\z

データベースにある全てのテーブルの一覧適切な ACL (grant/revoke パーミッション)リストをつけて表示します。

\! [ command ]

独立した Unix シェルまたは Unix コマンド command へのエスケープです。

\?

スラッシュ ("\") コマンドに付いての ヘルプ情報を表示します。