[pgsql-jp: 36112] Re: psqlメタコマンドとトランザクション

Kiyoshi Mizuno kiyoshi_mizuno @ mail.toyota.co.jp
2005年 10月 12日 (水) 16:58:46 JST


水野です。


> -----Original Message-----
> メタコマンドの実行は別物として動作するのでしょうか?

この動きがあるべき動作なのかは別にして、
後ろに続くのがメタコマンドの場合は”;”がなくても
トランザクションが開始される、というかメタコマンド経由で
実行したコマンドはキー入力と独立したトランザクションとして
扱われているようです。(検証に使ったのは Windows版8.0.3)

【実験 その1】
−−−−ここから−−−−ここから−−−−
template1=# begin	←”;”なしでbeginをタイプ
template1-# \d		←メタコマンド実行
                リレーションの一覧
 スキーマ |       名前       |    型    |  所有者
----------+------------------+----------+----------
 public   | geometry_columns | テーブル | postgres
 public   | pg_logdir_ls     | ビュー   | postgres
 public   | spatial_ref_sys  | テーブル | postgres
(3 行)

template1-# ;		←beginを完結させる目的で”;”をタイプ
WARNING:  there is already a transaction in progress
BEGIN			↑もう始まった事になっている
template1=#
−−−−ここまで−−−−ここまで−−−−

【実験 その2】
−−−−ここから−−−−ここから−−−−
template1=# begin
template1-# \d
                リレーションの一覧
 スキーマ |       名前       |    型    |  所有者
----------+------------------+----------+----------
 public   | geometry_columns | テーブル | postgres
 public   | pg_logdir_ls     | ビュー   | postgres
 public   | spatial_ref_sys  | テーブル | postgres
(3 行)


template1-# select * from pg_logdir_ls;	←”;”でなく通常のSQLを入力してみる
ERROR:  syntax error at or near "select" at character 7
行 2: select * from pg_logdir_ls;
      ^			←SELECTのSのところを指してます
template1=# end;
WARNING:  there is no transaction in progress	←今回の場合トランザクションは開始されていない。
COMMIT
template1=#
−−−−ここまで−−−−ここまで−−−−




pgsql-jp メーリングリストの案内