我是Postgres和postgREST的新手。我需要从一个列接收不同的记录-理想情况下可以过滤。
我需要解决的任务是SQL
select distinct "column1" where "column2" = "value2 and "column3" = "value3“
column1、column2、colum3和values应该是REST调用的参数。
在postgREST中,我可能需要使用函数或存储过程,但我对此还不熟悉。
你能帮帮忙吗?
发布于 2019-09-28 03:08:29
我建议创建三个视图:
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)来完成此任务。但我不建议这样做,因为暴露给最终用户可能是危险的。
所以视图是最好的选择。
发布于 2019-11-13 08:39:33
另一种选择是在存储过程中使用动态sql,并通过使用pg format函数非常小心。假设我们有一个projects表,然后我们创建这个函数:
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过滤器:
## 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"https://stackoverflow.com/questions/58053223
复制相似问题