[pgsql-jp: 32123] トランザクション中にERRORが発生するとABORTする

tamaki. tt @ plum.plala.or.jp
2004年 1月 27日 (火) 00:17:48 JST


みなさんこんにちわ。玉置ともうします。

PostgreSQLを使用していて、一点質問があります。

それは、表題の通りなのですが、トランザクション中にSQLにエラーがあると
その時掛かっていたトランザクションがアボートしてしまい、それ以降トラ
ンザクションを終了させるまで、SQLを受け付けなくなってしまいます。

具体的な動きを示します。

testdb=# begin;
BEGIN
testdb=# se
testdb-# ;
ERROR:  parser: parse error at or near "se" at character 1
testdb=# select * from test1;
ERROR:  current transaction is aborted, queries ignored until end of transaction block
testdb=# rollback;
ROLLBACK
testdb=# select * from test1;
 code |  memo
------+--------
 01   | aaaaaaa
(1 row)

上記例では、selectしか発行していませんが、insert文などでも結果は同じです。

 おそらく仕様上の動きなのでしょうが、「insertして見て例外が発生するよう
ならupdateに切り替える」とか、「一括insert中に予期せぬエラーが発生したレ
コードをログに吐いて無視する」などの処理が出来ないので不便だな。と思いま
した。

PostgreSQLをお使いのほかの皆さんは、どのように対策されているのでしょうか?
もしくは、上記の動きを変えられるようなオプションがあれば教えていただきた
いと思います。

よろしくおねがいします。 



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