gpt4 book ai didi

postgresql - 在 scala 框架中支持 PostgreSQL 特定的 array_agg 函数?

转载 作者:行者123 更新时间:2023-11-29 11:45:19 26 4
gpt4 key购买 nike

是否有一些 scala 关系数据库框架(anorm、squeryl 等)使用类似 postgres 的聚合器在 group-by 之后生成列表,或者至少模拟它的使用?

我希望有两个级别的实现:

  • 一个“标准”的,其中至少任何使用 array_agg 的 SQL 分组都被转换为正在聚合的类型的列表,

  • 还有一个“scala ORM powered”,其中允许某种类型的连接,因此如果聚合是其他表的外键,则会生成另一个表的元素列表。当然,这最后一件事超出了 SQL 的范围,但如果我使用更强大的语言,我不介意一些类固醇。

我发现特别有趣的是,正是基于允许 Scala 分组符号的 slick 文档似乎明确否定了分组结果的列表输出。

编辑:用例

您有一个典型的多对多表,例如,产品和供应商,对 (p_id, s_id)。您想要为每个产品生成一个供应商列表。所以postgresql查询应该是

SELECT p_id, array_agg(s_id) from t1 group by p_id

人们可以期待一些惯用的方式来巧妙地做到这一点,但我不知道如何。此外,如果我们转到某个 ORM,那么我们还可以考虑分别在 p_id 和 s_id 上连接表产品和供应商,并得到一个包含对象和不仅是 id

最佳答案

我也不确定我是否理解你的问题,你能详细说明一下吗?

在 slick 中,您目前不能使用 postgres“array_agg”或“string_agg”作为查询类型的方法。如果要使用此特定功能,则需要使用自定义 sql。但是:我前段时间添加了一个问题(https://github.com/slick/slick/issues/923,你应该关注这个讨论)并且我们有一个来自 cvogt 的原型(prototype)为此做好准备。

我过去需要使用“string_agg”并为它添加了一个补丁(参见 https://github.com/mobiworx/slick/commit/486c39a7ed90c9ccac356dfdb0e5dc5c24e32d63 ),所以也许这对你有帮助。查看“AggregateTest”以了解更多信息。

另一种可能性是将“array_agg”的用法封装在一个数据库 View 中,然后使用 slick 来使用这个 View 。这样你就不需要直接在 slick 中使用“array_agg”。

关于postgresql - 在 scala 框架中支持 PostgreSQL 特定的 array_agg 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com