如何在PostgREST的Select语句中使用内联函数?
在PostgREST中使用内联SQL函数的方法
你尝试的语法之所以报错,是因为PostgREST把ST_AsEWKT识别成了需要关联的表(select参数里的alias:table格式是用来做外键关联查询的),所以它会去查找mytable和ST_AsEWKT之间的外键关系,自然找不到匹配项。
除了你已经用的视图方案,还有两种更灵活的方式实现需求:
1. 用计算字段(Computed Columns)
先给目标表创建一个同名前缀的SQL函数,PostgREST会自动把它识别为表的计算字段:
CREATE OR REPLACE FUNCTION mytable_geom_ewkt(mytable) RETURNS text AS $$ SELECT ST_AsEWKT($1.geom); $$ LANGUAGE sql STABLE;
之后就可以直接通过API调用这个计算字段:
https://api.example.com/mytable?select=id,geom_ewkt
2. 用远程过程调用(RPC)
创建一个返回结果集的函数,通过PostgREST的RPC接口调用:
CREATE OR REPLACE FUNCTION get_mytable_with_ewkt() RETURNS SETOF RECORD AS $$ SELECT id, ST_AsEWKT(geom) AS geom FROM mytable; $$ LANGUAGE sql STABLE;
调用方式:
https://api.example.com/rpc/get_mytable_with_ewkt
关于视图方案
你目前用的视图方案完全可行,适合需要固定返回格式、不需要动态调整的场景,而且调用方式简单直观。
内容的提问来源于stack exchange,提问作者Elrot
相关产品推荐
相关产品推荐

