首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgREST中使用group by

postgREST中使用group by
EN

Stack Overflow用户
提问于 2019-09-23 04:39:07
回答 2查看 647关注 0票数 1

我是Postgres和postgREST的新手。我需要从一个列接收不同的记录-理想情况下可以过滤。

我需要解决的任务是SQL

select distinct "column1" where "column2" = "value2 and "column3" = "value3

column1、column2、colum3和values应该是REST调用的参数。

在postgREST中,我可能需要使用函数或存储过程,但我对此还不熟悉。

你能帮帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2019-09-28 03:08:29

我建议创建三个视图:

代码语言:javascript
复制
CREATE VIEW table_dist_column1 AS
  SELECT
    DISTINCT ON(column1)
    column1
  , column2
  , column3
  FROM table;

CREATE VIEW table_dist_column2 AS
  SELECT
    DISTINCT ON(column2)
    column1
  , column2
  , column3
  FROM table;

-- Analogously:
-- CREATE VIEW table_dist_column3 AS ....

然后就可以正常使用PostgREST过滤器(例如curl "<url>/table_dist_column1?column1=eq.baz&column2=eq.foo&column3=eq.bar")。

也可以使用带有dynamic sql的单个plpgsql存储过程(使用quote_ident)来完成此任务。但我不建议这样做,因为暴露给最终用户可能是危险的。

所以视图是最好的选择。

票数 1
EN

Stack Overflow用户

发布于 2019-11-13 08:39:33

另一种选择是在存储过程中使用动态sql,并通过使用pg format函数非常小心。假设我们有一个projects表,然后我们创建这个函数:

代码语言:javascript
复制
create function projects(dist name) returns setof projects as $$
begin
  return query execute format('select distinct on(%I) * from projects', dist);
end; $$ language plpgsql;

现在,您可以对此函数结果使用所有PostgREST过滤器:

代码语言:javascript
复制
## Filtering by a column
curl "localhost:3000/rpc/projects?id=eq.1&dist=name"

## Selecting only certain columns
curl "localhost:3000/rpc/projects?select=id,name&dist=name"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58053223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档