条令2 Postgresql存储过程映射

条令2 Postgresql存储过程映射,postgresql,doctrine-orm,Postgresql,Doctrine Orm,我想将一个postgresql存储过程(返回一个表作为结果)而不是一个表与一个条令实体相关联 例如:程序Get_Uuser(sexe,age)搜索所有用户以获取所选参数,并返回一个用户id集合(例如名称user_id_rech) 在pgsql中,我可以将此存储过程用作表: select user_name from User left join Get_User('H', 45) where User.user_id = user_id_rech 存储过程在这里像表一样使用 我认为条令2

我想将一个postgresql存储过程(返回一个表作为结果)而不是一个表与一个条令实体相关联

例如:程序Get_Uuser(sexe,age)搜索所有用户以获取所选参数,并返回一个用户id集合(例如名称user_id_rech)

在pgsql中,我可以将此存储过程用作表:

select user_name 
from User 
left join  Get_User('H', 45)
where User.user_id = user_id_rech
存储过程在这里像表一样使用

我认为条令2不允许映射存储过程,但我希望有人能向我证实这一点

谢谢

(写这篇文章作为回答,因为它太长了。)

不管条令允许与否,我愿意自愿告诉你,你的查询将是低效的(也许是非常低效的),因为Postgres将无法估计将返回多少行
Get\u User()

您的函数很可能只是
plpgsql
中的
returnqueryselect…
的包装器,或者如果函数是用纯
SQL
编写的,那么它就是SQL的等效函数。如果是,请考虑创建视图。这将允许Postgres在需要时重写查询,并对表的内容使用适当的统计信息,并且可能允许您完全摆脱连接


更好的是,直接发出查询。如果您经常使用它,请创建一个函数,返回它,以便进行进一步筛选。

谢谢您的回答。Get_user只是一个(非常)简单的示例,用于让我的问题更容易理解。我真正的函数实际上是一个动态查询生成器,它从多个表返回数据。在这种情况下,无法创建视图。注意,您可以告诉PostgreSQL查询通常返回多少行。参见
CREATE FUNCTION