PostgREST函数响应模式是随机不一致的吗?

时间:2018-02-14 17:34:51

标签: postgresql-9.6 postgrest

当调用返回JSON并请求对象返回模式的REST函数时,有时(似乎是随机的)结果被包装在一个具有函数名作为唯一键的对象中。这使得解析结果有点令人讨厌,例如:

使用数据库功能:

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请求没有Authorization标头,因为在现实生活中它是获取两个JWT(auth和perm)的请求。不确定这是否重要,只是PostgreSQL的角色是" anon"在这种情况下。

1 个答案:

答案 0 :(得分:0)

看来我的问题可能是由于在进行模式更改后未刷新PostgREST模式缓存。自实施自动模式重新加载as described in the latest docs以来,我还没有看到问题。