2011年8月25日

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

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

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を設定していて、その中で同一のテーブルが存在するとき、など。
また、回避方法があれば教えてください。

よろしくお願いします。


投稿者 xml-rpc : 2011年8月25日 21:50
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105911
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。