0

テーブルの代わりに postgresql ストアド プロシージャ (結果としてテーブルを返す) を教義エンティティに関連付けたいと思います。

例: プロシージャ Get_Uuser(sexe, age) は、選択されたパラメータについてすべてのユーザーを検索し、user_id のコレクションを返します (たとえば、user_id_rech という名前)。

pgsql では、このストアド プロシージャをテーブルとして使用できます。

select user_name 
from User 
left join  Get_User('H', 45)
where User.user_id = user_id_rech

ここでは、ストアド プロシージャをテーブルのように使用します。

教義 2 ではストアド プロシージャをマップすることはできないと思いますが、誰かに確認してもらいたいです。

ありがとう

4

1 に答える 1

1

(コメントとしては長すぎるため、これを回答として書きます。)

Doctrine がこれを許可するかどうかにかかわらず、Postgres にGet_User()は返される行数を見積もる手段がないため、クエリが非効率的であることは自明です (おそらく非常に効率的です)。

あなたの関数は の単なるラッパーreturn query select ...plpgsqlあるか、プレーンで書かれている場合は SQL に相当する可能性がありますsql。その場合は、代わりにビューを作成することを検討してください。これにより、Postgres は必要に応じてクエリを書き直し、テーブルの内容に関する適切な統計を使用できるようになり、おそらく結合を完全に取り除くことができるようになります。

さらに良いのは、クエリを直接発行することです。頻繁に使用する場合は、さらにフィルタリングする準備ができていることを返す関数を作成します。

于 2013-06-10T12:14:38.433 に答える