2011年9月17日

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

MauMauさん、ゆむさんご返信有難うございます。
返信遅くなりすみません。

確かに、依存関係からいくと私が期待した動きはできないはずですね。
ストアドがそのような動きをしていたと記憶していたので混乱してしまいました。

各々にビューをつくることで対応しました。

有難うございました。

On Sat, 3 Sep 2011 13:40:55 +0900
"MauMau" <maumau307@xxxxx> wrote:

> 恒住さん
>
>
> MauMauです。
>
> ヤムさんのおっしゃるように、ユーザu1とu2のどちらがビューを作成するかによって、
>
> ビューが参照するテーブルが異なるはずです。
>
> どういうことかというと、参照されるテーブルはビューの作成時に確定するということです。
> 恒住さんが期待したことは、ビューに対して問い合わせを実行するときの
> スキーマ検索パスに応じて、参照されるテーブルが変わるということだと思います。
> もしそうだとすると、たとえSELECT文でu1.v1のようにスキーマを明治しても、
> そのSELECT文を実行したセッションのスキーマ検索パスによって、
> 問い合わせの結果が変わってしまいます。
> u1.v1というように参照するオブジェクトを明治したにもかかわらず、です。
> これは困りますね。
>
> また、恒住さんの期待した振る舞いは、テーブルとビューの間の
> 依存性の観点からも困ったことになります。
> ビューが参照するテーブルを削除すると、DBMSはそのテーブルに依存したビューもいっしょに削除してくれますよね。
> これが可能な理由は、「どのスキーマのどのテーブル」に依存しているのは
> 「どのスキーマのどのビュー」かが記録されていてわかるからです。
>
> 恒住さんの期待に基づくと、u1.v1が、
> u1.t1とu1.t2に依存するのか、
> それとも
> u2.t1とu2.t2に依存するのか、
> が確定できなくなります。
>
> そのため、当初に臨んだビューを得るには、
> ユーザu1とu2がそれぞれ、スキーマu1とu2に
> ビューを作成する必要があると思います。
>
> 以上です。
>
> ----- Original Message -----
> From: "Tsunezumi" <tsunezumi@xxxxx>
> To: "PostgreSQL Japanese Mailing List" <pgsql-jp@xxxxx>
> Sent: Friday, September 02, 2011 11:52 PM
> Subject: [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とストアドの動きが矛盾していると思い、
> > 質問させて頂きました。
> >

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




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