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

Ebihara, Yuichiro Yuichiro.Ebihara @ jp.sony.com
2004年 1月 28日 (水) 13:19:27 JST


こんにちは、海老原です。

まず初めにお詫びから。

ここのところメールの遅配が続いていたため、Webのアーカイブで返信を
確認してみて初めて気がついたのですが、私の出したメールがことごとく
スレッドツリーを破壊しているようです。

指定されて仕方なくOutlook2002を使ってますが、このままでは申し訳ない
ので、このメールを出したら回避方法が分かるまでしばらく発言を控えよ
うと思います。このメールだけどうかご容赦下さい。

さて本題ですが、私はnested transactionのことは考慮していません。

SQL99の原文(訳も)を見たことはないので私が勘違いしている可能性もあ
りますが、SAVEPOINTについてはOracleやDB2のようなflat transactionでの
実装を想定しています。

それからSAVEPOINTそのものは私にとって問題の本質ではないです。
「SQL文のエラー、即トランザクションのロールバック」がDBMSにとって
あるべき仕様なのでは? という見解に対し、疑問を感じる理由の1つとして
例に挙げたまでです。

Oracleだと(たぶんDB2も)SQL文のエラー発生後もトランザクションを継続
することができます。エラーの原因となった文による変更のみがロールバッ
クされます(文レベルのロールバック)。
その後トランザクションレベルのロールバックを行うか否かは、プログラマ
の判断次第です。もちろんflat transactionの話です。

別にPostgreSQLの仕様にケチをつけるわけではなく、そういう実装に慣れた
人間にとっては最初は大きく戸惑う点だと思います。

このような実装が採用されている理由などあれば是非とも知りたいところ
です。

--
海老原 雄一郎 / EBIHARA Yuichiro
E-mail: Yuichiro.Ebihara @ jp.sony.com



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