PSQL UNIX 1/20/96 日本語PostgreSQL 日本語PostgreSQL

名称

psql - 対話的問い合わせフロントエンドを走らせます

形式

psql [ -a authsvc][ -A ][ -c query][ -d dbName][ -e ][ -f filename][ -F separator][ -h hostname][ -H ][ -l ][ -n ][ -o filename][ -p port][ -q ][ -s ][ -S ][ -t ][ -T table-options][ -u ][ -x ][dbname]

説明

psql は Postgres への対話的問い合わせフロントエンドです。クエリを対話的にタイプし、それを Postgres に発行し、その問い合わせ結果を見ることができるようになります。psqlはパイプにつないで使うこともできますし、自動的に tty と接続されているかどうか判断します。psqlは昔のmonitorプログラムの拡張としてデザインされています。

psqlはその他と同じくフロントエンドアプリケーションです。ですから、postmasterプロセスがpsqlが実行される前にデータベースサーバのホスト上で走っていなくてはなりません。加えて、正しいpostmasterのポート番号が下記のように指定されなくてはなりません。

オプション引数dbnameはアクセスするデータベースの名前を指定します。このデータベースは既に作られているものでなくてはなりません。dbnameはデフォルトで環境変数 USER の値、もしくはセットされていなければ、現在のユーザの Unix アカウント名になります。

psqlがスタートすると、/etc/psqlrc と、それから$(HOME)/.psqlrcから SQL コマンドを読みます。これでSETのような SQLコマンドを各セッションのスタート時に日付のスタイルをセットするように使うことができます。

psqlは次のコマンドラインオプションを取ることができます:

-a system

postmasterプロセスとの接続に使う認証システムsystemを指定します。(pgintro(1) を参照してください)このオプションはもう何の効果もありません。

-A

表の要素を出力する際に行揃えをしません

-c query

psqlに1つの問い合わせ文字列queryを実行させて終了します。これはシェルスクリプトで有用です。典型的には -q

オプションとつなげて使います。

-d dbName

接続するデータベースの名前を指定します

-e

バックエンドに送られた問い合わせをエコーします

-f filename

対話的に問い合わせを読む代わりに、ファイルfilenameをクエリのソースとして使います。

-F separator

separatorをフィールドの区切り文字として使います。デフォルトは | です。

-h hostname

postmasterが走っているマシンのホスト名を指定します。このオプションがないと、ローカル Unix ドメインソケットを使って接続をします。

-H

HTML3.0 テーブル出力をします。

-l

すべてのアクセス可能なデータベースをリストアップします。

-n

readline ライブラリを入力の行編集とコマンド履歴に使用しません。

-o filename

すべての出力を filename に出します。

-p port

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

-q

psqlが寡黙に実行されることを指定します。デフォルトでは、ウエルカムメッセージと終了メッセージを出力し、各問い合わせにプロンプトを出し、問い合わせから戻る行数を出力します。このオプションが使われると、これらは起こりません。これは -c

オプションと一緒にシェルスクリプトで使う時に有用です。

-s

バックエンドへの各問い合わせが送られる前にユーザにプロンプトを出すシングルステップモードで実行します。

-S

各問い合わせがセミコロンではなく、改行文字によって区切られるシングルラインモードで実行します。

-t

カラム名を出力しません。これは -c

オプションと一緒にシェルスクリプトで使う時に有用です。

-T table-options

HTML3.0 のテーブル出力に<table ...> タグの中に置くオプションを指定できます。例えば、 border

はテーブルに罫線が引かれます。

-u

データベースに接続する前に、ユーザにユーザ名とパスワードを訊きます。もしデータベースがパスワード認証を必要としなければ、これらは無視されます。もしこのオプションが使われず(そして環境変数 PGPASSWORD がセットされず)そしてデータベースがパスワード認証を必要とするなら、接続は失敗します。ユーザ名はどのみち無視されます。

-x

拡張行フォーマットモードになります。これが有効になると、各行はカラム名が左にそしてその値が右に出力されます。これは行が1行に収めるには長すぎるような時に有用です。HTML の行出力もこのモードをサポートしています。

環境変数をセットすることで、上記のオプションのいくつかをわざわざタイプする必要がなくなります。下の "環境変数" の節を参照してください。

データベースに接続する

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

Connection to database failed
    
というエラーを返します。接続に失敗した理由は与えられません。

問い合わせを入力する

通常の作業では、psql は現在接続中のデータベースの名前に => という文字列をつなげたプロンプトを表示します。例えば、

Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms of POSTGRESQL

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 オプションがセットされていないなら、インプットされた行は問い合わせを区切るセミコロンに到達した時点でバックエンドに送られます。

問い合わせが実行されるといつも、psql もlisten(l)notify(l) で引き起こされる非同期の通知イベント受け取ります。

PSQLコマンド

psql 上で入力するクオートで囲まれていないバックスラッシュで始まるものはpsql コマンドです。その他はすべて SQL で、単にクエリバッファに溜ります。(そして少なくともひとつの完全な問い合わせがあれば、自動的にバックエンドに送られます。)psqlコマンドはスラッシュコマンドとも呼ばれています。

psqlコマンドのフォーマットは、バックスラッシュとすぐその後のコマンドの動詞、そして引数となります。コマンドの動詞と引数との間はスペース文字で区切られます。

1文字のコマンド動詞は、これまでの歴史的配慮から、スペース文字で引数と区切る必要はありません。区切るべきでしょうですが。

\a
表の要素を出力する際の行揃えを切替えます。

\C caption
HTML3.0 のテーブルの見出しをセットします。

\connect dbname username
新しいデータベースへの接続を確立します。その前の接続はクローズされます。

\copy table {FROM | TO} filename
フロントエンドコピーを行います。これは、SQL の COPY コマンドの実行ですが、バックエンドが指定したファイルの読み書きをする代わりに、その結果特別なユーザ権限が必要ですが、psql がファイルの読み書きをして、データをバックエンドとやりとりします。

\d [table]
データベースの表をリストアップします。もしtableが指定されれば、table中のカラムをリストアップします。もしテーブル名が*でしたら、すべてのテーブルと各々のカラムの情報をリストアップします。

\da
集約関数をリストアップします。

\dd object
テーブル、テーブル.カラム、型、演算子、集約関数の説明をリストアップします。

\df
関数をリストアップします。

\di
インデックスのみをリストアップします。

\do
演算子をリストアップします。

\ds
シーケンスのみをリストアップします。

\dS
テーブルとインデックスをリストアップします。

\dt
テーブルのみをリストアップします。

\dT
型をリストアップします。

\e [filename]
現在のクエリバッファもしくはfileを編集します。

\E [filename]
現在のクエリバッファもしくはfileを編集して、エディタが終了したらそれを実行します。

\f [separator]
フィールドのクギリ文字をセットします。デフォルトでは1文字のスペースです。

\g [|command] | [filename]
現在のクエリ入力バッファをバックエンドに送り、オプションとして、出力をfilenameに保存、またはパイプを通して|commandに出力します。

\h [command]
指定した SQL コマンドのヘルプを表示します。もしcommandが指定されなければ、文法のヘルプが用意されているすべてのコマンドをリストアップします。もしcommand*なら、すべての SQL コマンドに付いての文法のヘルプをリストアップします。

\H
html3 の出力を切替えます。

\i filename
クエリをfilenameからクエリ入力バッファに読み込みます。

\l
サーバのすべてのデータベースをリストアップします。

\m
monitor のような表の表示を切替えます。これは標準的な SQL の出力です。(つまり、余分なボーダー文字のことです。)

\o [|command] | [filename]
問い合わせの結果をfilenameに、もしくはパイプを通してcommandに出力します。もし引数が指定されなければ、問い合わせの結果は標準出力になります。

\p
現在のクエリバッファを表示します。

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

\r
クエリバッファをリセット(クリア)します。

\s [filename]
コマンドラインの履歴を filename に出力または保存します。(psql が readline を使うように設定された場合にのみ有効です。)

\t
カラム名のヘッダと行数の表示を切替えます。(デフォルトではオンになっています。)

\T
html3.0 の <table ...> のオプションをセットします。

\x
拡張行フォーマットモードを切替えます。これが有効になると、各行はカラム名が左に、そしてその値が右に出力されます。これは行がスクリーンの1行に収めるには長すぎるような時に有用です。HTML の行出力もこのモードをサポートしています。

\z
データベース内のすべてのテーブルを適切な ACL (grant と revoke で定義した権限) を付けてリストアップします。

\! [command]
シェルにエスケープ、あるいはcommandを実行します。

\?
\ コマンドについてのヘルプ情報を表示します。

環境変数

いくつかの環境変数をコマンドライン引数の代わりに使うことができます。これらを下に説明します。さらに、psql アプリケーションに使われる Postgres のフロントエンドライブラリは例えば日付や時間の表示スタイルやローカルのタイムゾーンなどの設定をするために他のオプションの環境変数を期待していることもあります。libpq(3) を参照してください。

コマンドラインオプションを指定することを避けるように、次の環境変数をセットすることができます。

hostname:   PGHOST
port:       PGPORT
tty:        PGTTY
options:    PGOPTION
realm:      PGREALM
    
PGHOST を0より長い文字列にセットすることで、デフォルトのローカル Unix ドメインソケットではなくTCP/IP の通信を使うことになります。

もし PGOPTION が指定されると、その中のオプションはコマンドラインオプションよりも 前に 解析されます。

PGREALMKerberos認証が使われているときにのみ適用されます。この環境変数がセットされると、Postgres はサーバとの認証にこの realm を使おうと試み、ローカルチケットファイルとの衝突を避けるために別のチケットファイルを使います。Kerberosについてのさらなる情報についてはpgintro(1) を参照してください。

戻り値

psqlは、すべての問い合わせがうまく完了すれば 0を、エラーならば 1 を、そしてバックエンドからの不意の接続終了時に 2を返します。psqlはまた、データベースへの接続を何らかの理由で確立できなかった時にも1 を返します。

参照

libpq(3) ,monitor(1) postgres(1) ,postmaster(1) .