ルールシステムはこのままでよいのだろうか?
PostgreSQLではVIEWの仕組をRULEシステムをベースに構築しており、更にこれを利用して更新可能なVIEWも作成が可能となっている。しかし更新可能な
virtual tableとしてVIEWを見たときいささか心許ないものがある。実際私は更新可能なVIEWを使う気になれない。ということでわかっている問題点の覚書き。
RULEがマクロに過ぎないことによる副作用の発生が基本的な問題
- 引数の多重評価の発生 FAQ的な問題がある http://archives.postgresql.org/pgsql-sql/2003-07/msg00333.phpはその一例
- JOINビュー更新の不具合
- 例えば http://archives.postgresql.org/pgsql-odbc/2006-12/msg00029.php この場合実際は中途半端な部分更新が行われるのだが、更新は何もおこなわれなかったかのような報告がされる。結構深刻な問題である。
- ビュー更新の際のロックのタイミング違い?の問題([pgsql-jp: 38295] SYNONYM 代わりのVIEW+RULEへの、更新時ロックの挙動について)
- ロックのタイミングの違いとは少し違うようだ。RULEに従って変形していく時に発生する update .. from .. のPostgreSQL独自の構文においてfromで指定されるテーブルはread-onlyであって、それらには行ロックが取得されない。うーん、これはバグか仕様なのか?