Схема ответа функции PostgREST случайно несовместима?

При вызове функции REST, которая возвращает JSON, и запросе схемы возврата объекта, иногда (кажется случайным образом) результат оборачивается в объект, имя функции которого является единственным ключом. Это делает анализ результатов немного утомительным, например:

С функцией БД:

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 не имеет заголовка авторизации, поскольку в реальной жизни это запрос на получение двух JWT (auth и perm). Не уверен, что это имеет значение, просто роль PostgreSQL в этом случае "анон".

1 ответ

Решение

Похоже, что моя проблема, вероятно, была связана с тем, что кэш схемы PostgREST не обновлялся после внесения изменений в схему. Я не видел проблемы с тех пор, как реализовал автоматическую перезагрузку схемы, как описано в последних документах.

Другие вопросы по тегам