Проблема
Я пытаюсь добавить вычисляемое поле, которое возвращает массив целых чисел. Hasura в настоящее время поддерживает типы возвращаемых данных типа SETOF <table-name>
или BASE
. Я попытался вернуть integer[]
, но это не удалось (это не тип BASE
). Есть ли обходной путь?
Вот что я пробовал
У меня есть две таблицы: курсы и тесты, курс имеет много тестов, каждый тест имеет целочисленное поле с именем трудность. Я хочу добавить вычисляемое поле в таблицу курсов, в которой перечислены различные трудности связанных тестов.
С помощью SQL мы можем создать массив, который создает этот список с помощью этого запроса:
SELECT array(SELECT DISTINCT difficulty FROM quizzes
WHERE course_id = 1 ORDER BY difficulty ASC);
Поэтому я создаю функцию, которая возвращает результат этого запроса, и добавляю его в качестве вычисляемого поля в таблицу курсов.
CREATE OR REPLACE FUNCTION courses_quiz_difficulties(course_row courses)
RETURNS integer[] AS $$
SELECT array(SELECT DISTINCT difficulty FROM quizzes
WHERE course_id = course_row.id ORDER BY difficulty ASC);
$$
LANGUAGE SQL STABLE;
Когда я пытаюсь добавить вычисляемое поле, я получаю сообщение об ошибке, потому что и массив int не является типом BASE.
в таблице "курсы": в вычисляемом поле "quiz_difficulty": вычисляемое поле "quiz_difficulty" нельзя добавить в таблицу "курсы", поскольку функция " courses_quiz_difficulty "возвращаемый тип _int4 не является типом BASE
Есть ли способ заставить его работать с Hasura?
Вот соответствующая документация:
https://hasura.io/docs/1.0/graphql/manual/schema/computed-fields.html#supportedsql -функции