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