[pgsql-jp: 29538] Re: エラー発生時のトランザクションの動作について
T.Suzuki
t_suzuki @ kenwood-eng.co.jp
2003年 4月 1日 (火) 14:41:23 JST
鈴木と申します。
> トランザクションのロールバック処理についての質問です。
> 現在、PostgreSQL 7.2.3 を使用して機能の確認を行っております。
> 下記のような順序で作業をした場合、1件もデータが挿入されません。
> (1)トランザクション発行
> (2)20件のデータをinsert
> →5件目のデータは、キー重複によりエラーとなるデータ
> 5件目以外は正常なデータ
> (3)コミット
>
> 期待する動作としては、重複データのみ登録されず(当然ですが・・・)
> 残りの19件分のデータに関しては登録されるようにしたいということです。
> ※1件ずつコミットはしないという前提です。
PostgreSQLでは、一意制約に違反した場合など、トランザクションは
アボートしてしまいます。この為、COMMIT文を発行しても登録は行われません。
トランザクションのアボートを無効に設定できるかは分かりませんが、
何件エラーが発生しても登録(INSERT)を強行するのであれば、トランザクション
処理自体が必要ないのでは無いでしょうか?
> Oracle9iでは、上記のような期待する動作となりました。
Oracleでは、トランザクションをアボートせずに、ユーザがCOMMITかROLLBACK
を選択できる様ですね。
-----------------------------------------
鈴木 徹 (SUZUKI Toru)
KENWOOD ENGINEERING CORPORATION
E-mail:t_suzuki @ kenwood-eng.co.jp
-----------------------------------------
pgsql-jp メーリングリストの案内