[pgsql-jp: 40368] Re: ODBCドライバの設定についてわかりません

Hiroshi Inoue inoue @ tpf.co.jp
2010年 9月 7日 (火) 12:17:35 JST


井上です。

(2010/09/06 13:46), toshihideka4316 @ zenrin.co.jp wrote:
>   片山です。
> 
> 井上さん、高塚さんご回答ありがとうございました。
> 
>> これは「無し」で想定されている動作でなく「文単位]のロールバックの動作
>> です。もしかしたらデフォルトの動作と混同されているのではないでしょうか?
> デフォルトの動作と勘違いしておりました。
> 接続文字列protocol=以下の数字は4パターンあって、7.4, 7.4-0 , 7.4-1 , 7.4-2で
> すが、7.4と7.4-0が同じ挙動と思い込んでいました。
> サーババージョンが8.2.4であるので7.4(デフォルト)は「無し」ではなくて、文単
> 位で処理されるのですね。
> 
> その後文単位について、動作検証を行いました。
> エラーとして、以下の2つを試しましたが行単位のロールバックを確認できませんでし
> た。(全てのデータがロールバックされている状況)

> 1.複数レコードのInsert途中にクライアントのプロセスを強制終了

どのロールバックオプションを選択しても最終的にコミットを確定するのは
アプリケーション側の責任です。この場合、クライアントアプリケーション
が死んでしまうので、動作中のトランザクションに対してcommitが発行され
ることはなく、結果として全キャンセルされてしまいます。

> 2.ユニークインデックス違反になるようなレコードの挿入

文単位のロールバックはこのようなエラーをスキップするためのオプション
といってもよいと思います。ただし自動的にロールバックしてもエラーを
無視するわけではなく、エラーはエラーとして通知されます。エラーに対し
全キャンセルするようなコードを書いていれば当然全キャンセルされてしま
います。またロールバックは文単位であって行単位ではありません。一度に
複数行を更新するようなコマンドを発行すればロールバックの対象は関連す
る行全部となります。

> 「エラー時」のロールバックとは、どのようなエラーについて述べたものなのでしょ
> うか?
> 
> ご存知でしたら教えていただけないでしょうか。



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