[pgsql-jp: 40898] search_path設定時のView

Tsunezumi tsunezumi @ efficlabo.com
2011年 8月 25日 (木) 21:50:15 JST


お世話になります。恒住と申します。
教えてください。

PostgreSQL8.4

search_path = '"$user",u1,public'

u1
・T1(テーブル)
・T2(テーブル)
・T3(テーブル)
・V1(T1とT2を参照したビュー)
・V2(T1とT3を参照したビュー)


u2
・T1(テーブル)
・T2(テーブル)×
・T3(テーブル)
・V1(T1とT2を参照したビュー)×
・V2(T1とT3を参照したビュー)

上記の状態で、u2.T2のテーブルを削除します。
u2.V1も削除されます。

SELECT * FROM V1
とすると、通常であれば、
u2.T1とu1.T2を参照するはずなのですが、
u1.T1とu1.T2を参照してしまいます。

u1.V1のソースを見ると、
元々が
SELECT * FROM T1 INNER JOIN T2 ON ・・・
だったのが、
SELECT * FROM u1.T1 INNER JOIN T2 ON ・・・
とビューのソースが変更されていました。

元のソースをu1に流しても同様のスキーマが指定された状態になったので、
u2の方でそのソースをコンパイルすると、元々のソースのままでになり、
想定の結果を返します。

因みに、u1.V2とu2.V2はスキーマが指定されていないソースのままになっています。


これはこういう仕様なのでしょうか?
どういったときにこのような状態になるのでしょうか?
例えば、search_pathを設定していて、その中で同一のテーブルが存在するとき、など。
また、回避方法があれば教えてください。

よろしくお願いします。



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