2011年9月 2日

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

MauMauさん、ご返信有難うございます。


分かりづらいですよね。すみません。
定義は長くなるので省略させてください。

search_path = '"$user",u1,public' で
u2で接続した場合、

u2にはT2がないので、
SELECT * FROM T1 INNER JOIN T2 ON ・・・ ----?
を実行すると、
SELECT * FROM u2.T1 INNER JOIN u1.T2 ON ・・・ ----?
と同じ意味になると思います。

なので、
?のSQLをそのままu1のViewにすれば、?と同じ結果が返ってくるだろうと
思っていたのですが、そうではないということなのでしょうね。

以前、同じ環境でストアドを作成した時に、
u2で接続している限りでは、
u1のストアドでも?の結果が返ってきてたと覚えているので、
Viewとストアドの動きが矛盾していると思い、
質問させて頂きました。

On Wed, 31 Aug 2011 07:42:27 +0900
"MauMau" <maumau307@xxxxx> wrote:

> 恒住さん
>
>
> MauMauといいます。
>
> ちょっと難しそうなご質問なので私には自信がありませんが、
> このMLの方々の協力を仰ぐために、もう少し正確な情報があったほうがよいような気がします。
>
>
> たとえば、
>
> > SELECT * FROM V1
> > とすると、通常であれば、
> > u2.T1とu1.T2を参照するはずなのですが、
>
> といっているということは、U2.V1を参照するはずだといっているのだと思いますが、
>
>
> > search_path = '"$user",u1,public'
>
> という状態なら、U1.V1を参照するものと思います。
>
> 問題が発生するまでに行った正確な操作がわかるよう、
> SET search_pathやCREATE TABLE、ビューの定義確認、SELECTなど
> 実行したすべてのSQL文とその出力を、psqlコマンドでファイルに出力し、
> その内容をメール本文に入れたほうがよいと思います。
>
>
> 以上です。
>
> ----- Original Message -----
> From: "Tsunezumi" <tsunezumi@xxxxx>
> To: <pgsql-jp@xxxxx>
> Sent: Thursday, August 25, 2011 9:50 PM
> Subject: [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年9月 2日 23:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106052
トラックバック
コメント
コメントする




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