[pgsql-jp: 36113] Re: psqlメタコマンドとトランザクション
Toshihiro Kurai
tkurai @ taiyo-st.co.jp
2005年 10月 12日 (水) 17:23:34 JST
倉井です。
水野さんいろいろと検証していただきありがとうございました。
自分なりに考えるところ、BEGINの後に「;」を入力するまで
データベースにはSQL文が発行された形になっていないのでしょうね。
メタコマンドはキー入力状態を迂回して直接データベースへ
コマンドを発行するように動作するといったところなのでしょうか
結局のところ正しくSQLコマンドを入力すれば良いということなのでしょうが、
少々気持ちが悪いです。
> 水野です。
>
>
> > -----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 メーリングリストの案内