问题
我想添加一个计算字段,返回一个整数数组。Hasura当前支持的返回类型为SETOF <table-name>
或BASE
类型。我尝试返回一个integer[]
,但失败了(它不是BASE
类型)。是否有解决方法?
这是我尝试过的
我有两个表:courses和quizzes。一个course拥有多个quiz,每个quiz有一个名为difficulty的整数字段。 我想要向courses表中添加一个计算字段,列出相关quiz的不同难度。
使用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;
当我尝试添加计算字段时,因为整数数组不是基本类型,所以出现错误。
在表 "courses" 中,计算字段 "quiz_difficulties" 无法添加到表 "courses" 中,因为返回类型 _int4 的函数 "courses_quiz_difficulties" 不是基本类型
是否有一种方法可以解决它,并使其与 Hasura 兼容?
以下是相应的文档:
https://hasura.io/docs/1.0/graphql/manual/schema/computed-fields.html#supported-sql-functions