pgproto

名前

pgproto --  PostgreSQL もしくはフロントエンド/バックエンドプロトコルを理解しているサーバに対してテストする

概要

pgproto [option...]

説明

pgproto PostgreSQL もしくはフロントエンド/バックエンドプロトコルを理解しているサーバに対してテストします

オプション

-h hostname
--hostname=hostname

サーバが稼働しているマシンのホスト名。 "/"からホスト名が始まる場合、Unixドメインソケットのディレクトリとして使用されます (デフォルト: unixドメインソケット)。

-p port
--port=port

ポート番号 (デフォルト:5432)

-u username
--user=username

ユーザ名 (デフォルト: OSユーザ名)

-d databasename
--database=databasename

データベース名 (デフォルト: ユーザ名)

-f filename
--proto-data-file=filename

サーバに送信するメッセージデータを記述したテキストファイル (デフォルト: pgproto.data)。

-r naptime
--read-nap=naptime

待ち時間、単位はマイクロ秒 (デフォルト:0)。 0より大きな値が指定された場合、ソケットから各データを読み込む際にスリープを入れます。 これは、遅いクライアントをシミュレートします。

-D
--debug

デバッグメッセージを表示します。

-v
--version

バージョンを表示して終了します。

-?
--help

コマンドのヘルプを表示します。

ファイル内の最初の文字 (Q)がフロントエンド/バックエンドプロトコルのメッセージの種類を表します。

'Y'と'z'と'y'は例外です。 'Y'は、Ready for queryが受信されるまで、バックエンドからメッセージを読み取ります。 'y'は、バックエンドからメッセージを受信している間はメッセージを読み取り、1秒間メッセージを受信しなかった場合停止します。 'Y'は、拡張クエリのSync ('S')、簡易問い合わせ ('Q')の応答を待つために使用できます。 'y'は、Flush ('H')後にメッセージを受信するために使用できます。 'z'は、バックエンドから1つメッセージを読みます。1秒間メッセージを受信しなかった場合停止します。 'z'は、事前にいくつメッセージが届くかわかっている場合に'H'のテストのために利用することができます。

"SELECT * FROM "aaa""のように文字列にダブルクォートを含める場合、"SELECT * FROM \"aaa\""のようにバックスラッシュを使用します。 以下のように、\を使用して複数行にまたがるコマンド行を作成することもできます。

    'Q' "SELECT * FROM aaa \
    WHERE a = 1"
   

ここでは入力ファイルの例を示します。

    #
    # Test data example
    #
    'Q'	"SELECT * FROM aaa"
    'Y'
    'P'	"S1"	"BEGIN"	0
    'B'	""	"S1"	0	0	0
    'E'	""	0
    'C'	'S'	"S1"
    'P'	"foo"	"SELECT 1"	0
    'B'	"myportal"	"foo"	0	0	0
    'E'	"myportal"	0
    'P'	"S2"	"COMMIT"	0
    'B'	""	"S2"	0	0	0
    'E'	""	0
    'C'	'S'	"S2"
    'S'
    'Y'
    'X'
   

ここでは出力例を示します。

    $ pgproto -p 11000 -d test -f sample.data
    FE=> Query (query="SELECT * FROM aaa")
    <= BE RowDescription
    <= BE CommandComplete(SELECT 0)
    <= BE ReadyForQuery(I)
    FE=> Parse(stmt="S1", query="BEGIN")
    FE=> Bind(stmt="S1", portal="")
    FE=> Execute(portal="")
    FE=> Close(stmt="S1")
    FE=> Parse(stmt="foo", query="SELECT 1")
    FE=> Bind(stmt="foo", portal="myportal")
    FE=> Execute(portal="myportal")
    FE=> Parse(stmt="S2", query="COMMIT")
    FE=> Bind(stmt="S2", portal="")
    FE=> Execute(portal="")
    FE=> Close(stmt="S2")
    FE=> Sync
    <= BE ParseComplete
    <= BE BindComplete
    <= BE CommandComplete(BEGIN)
    <= BE CloseComplete
    <= BE ParseComplete
    <= BE BindComplete
    <= BE DataRow
    <= BE CommandComplete(SELECT 1)
    <= BE ParseComplete
    <= BE BindComplete
    <= BE CommandComplete(COMMIT)
    <= BE CloseComplete
    <= BE ReadyForQuery(I)
    FE=> Terminate
   

その他のデータファイルの例です。

Copy

    #
    # Test data example
    #

    # CopyIn
    #
    'Q'	"COPY t1 FROM STDIN"
    # CopyData
    'd'	"abc"
    # CopyDone
    'c'
    'Y'

    # CopyOut
    #
    'Q'	"COPY t1 TO STDOUT"
    'Y'

    #
    # Copy fail case
    #
    'Q'	"COPY t1 FROM STDIN"
    # CopyData
    'd'	"abc"
    # CopyFail
    'f'	"pgproto copy fail test"
    'Y'
    'X'
   

Function Call

    #
    # Test data example
    #

    # Function call (lo_creat)
    # from PostgreSQL's src/include/catalog/pg_proc.data
    # { oid => '957', descr => 'large object create',
    #  proname => 'lo_creat', provolatile => 'v', proparallel => 'u',
    #  prorettype => 'oid', proargtypes => 'int4', prosrc => 'be_lo_creat' },

    'F'	957	1	0	1	1	"0"	0
    'Y'
    'X'