[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 メーリングリストの案内