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

Hiroshi Inoue Inoue @ tpf.co.jp
2004年 1月 28日 (水) 19:29:20 JST


井上です。

TANIDA Yutaka wrote:
> 
> 谷田です。
> 
> On Wed, 28 Jan 2004 13:19:27 +0900
> "Ebihara, Yuichiro" <Yuichiro.Ebihara @ jp.sony.com> wrote:

[snip]

> (snip)
> > このような実装が採用されている理由などあれば是非とも知りたいところ
> > です。
> 
> 理由は、と聞かれたら「save pointやnested transactionに当たる機能がまだ実
> 装されて無いから」という事になると思います。なんとなれば、文レベルのロー
> ルバックというのは「文を実行して、エラーが出たら文の実行直前まで自動的に
> 戻る。ただし大本のトランザクションは継続している」ということに他ならない
> からです。
> 
> 部分的なロールバックは、WALのundo(PostgreSQLでは実装されていない)を使う
> 事で実現可能らしいのですが、なぜWAL undoが出来てないのかという経緯は私も
> よく知りません。
> 
> # この件は井上さんが詳しいはずです。

最近は本家を見ている暇がなく、とても詳しいとはいえませんが。

トランザクション全体はロールバック出来るけれども部分的なロール
バックが出来ないというのは、他の大多数のDBと違って、PostgreSQL
が(全体の)ロールバック処理においてundoを(必要と)しておらず
、部分的なundo処理等を行なうにはPostgreSQLが持っている既存のメ
カニズムが役に立たないためです。
WALの実装はリカバリーの強化という面は勿論あったにせよ、どちらか
といえば部分的なロールバックのサポートを意図して導入されました
が、(多分?)長いトランザクションによりWALログが肥大化してしま
う現象のため、現在にいたるもWALはundoの実装には使用されていませ
ん。最近の議論はフォローしきれていないので確かではありませんが、
undo処理を回避する実装が有力視されているのではないかと思います。

Hiroshi Inoue



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