PostgREST 函数响应模式随机不一致?
PostgREST function response schema is randomly inconsistent?
当调用 returns JSON 的 REST 函数并请求 object return 模式时,有时(看起来是随机的)结果被包装在 object 以函数名称作为唯一键。这使得解析结果有点烦人,例如:
有数据库功能:
CREATE OR REPLACE FUNCTION api.conf_test(param TEXT)
RETURNS JSON AS $$
BEGIN
RETURN JSON_BUILD_OBJECT('auth', param, 'perm', param);
END;
$$
LANGUAGE plpgsql STABLE;
GRANT EXECUTE ON FUNCTION api.conf_test(TEXT) TO anon, rest_user_max;
还有一个 REST 调用:
return ajax({
url: 'https://' + site.domain + '/api/v1/rpc/conf_test',
type: 'POST',
data: JSON.stringify({param: user.id}),
headers: {
'Accept': 'application/vnd.pgrst.object+json',
'Content-Type': 'application/json'
}
}).then(function(result) {
if (result.data.conf_test === undefined) {
site.jwts = result.data;
} else {
site.jwts = result.data.conf_test;
}
}).catch(function(e) {
site.jwts = null;
throw e;
});
有时响应是:
{"auth" : "12213", "perm" : "12213"}
其他时候是:
{"conf_test" : {"auth" : "12213", "perm" : "12213"}}
我已经看到它在给定的服务器上从一种格式更改为另一种格式。有人知道为什么会这样吗?
编辑:
注意 - REST 请求没有授权 header,因为在现实生活中它是获取两个 JWT(auth 和 perm)的请求。不确定这是否重要,只是在这种情况下 PostgreSQL 角色是 "anon"。
看来我的问题可能是由于在进行架构更改后未刷新 PostgREST 架构缓存。自实施自动模式重新加载以来,我还没有发现问题 as described in the latest docs。
当调用 returns JSON 的 REST 函数并请求 object return 模式时,有时(看起来是随机的)结果被包装在 object 以函数名称作为唯一键。这使得解析结果有点烦人,例如:
有数据库功能:
CREATE OR REPLACE FUNCTION api.conf_test(param TEXT)
RETURNS JSON AS $$
BEGIN
RETURN JSON_BUILD_OBJECT('auth', param, 'perm', param);
END;
$$
LANGUAGE plpgsql STABLE;
GRANT EXECUTE ON FUNCTION api.conf_test(TEXT) TO anon, rest_user_max;
还有一个 REST 调用:
return ajax({
url: 'https://' + site.domain + '/api/v1/rpc/conf_test',
type: 'POST',
data: JSON.stringify({param: user.id}),
headers: {
'Accept': 'application/vnd.pgrst.object+json',
'Content-Type': 'application/json'
}
}).then(function(result) {
if (result.data.conf_test === undefined) {
site.jwts = result.data;
} else {
site.jwts = result.data.conf_test;
}
}).catch(function(e) {
site.jwts = null;
throw e;
});
有时响应是:
{"auth" : "12213", "perm" : "12213"}
其他时候是:
{"conf_test" : {"auth" : "12213", "perm" : "12213"}}
我已经看到它在给定的服务器上从一种格式更改为另一种格式。有人知道为什么会这样吗?
编辑:
注意 - REST 请求没有授权 header,因为在现实生活中它是获取两个 JWT(auth 和 perm)的请求。不确定这是否重要,只是在这种情况下 PostgreSQL 角色是 "anon"。
看来我的问题可能是由于在进行架构更改后未刷新 PostgREST 架构缓存。自实施自动模式重新加载以来,我还没有发现问题 as described in the latest docs。