将来自 jsonb 的 Postgres FK 与 Hasura 一起使用?

Using Postgres FK from jsonb with Hasura?

我们在 postgres 的 json blob 中有外键。我们像这样加入这些:

SELECT f.id, b.id FROM foo AS f
  LEFT JOIN bar AS b ON f.data -> 'baz' ->> 'barId' = text(b.id)

我现在正在尝试使用 Hasura 进行 som graphql 查询,我需要这些作为对象关系。在 UI 我只能尝试手动添加与普通列的关系,而不是嵌套的 json 数据:

是否可以通过这种方式获得 graphql 关系?

我在评论中得到了答案,谢谢@iamnat。为了清楚起见,我将在这里以我的示例进行演变,因为我仍然有点挣扎:

超级简单的架构和数据:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE foo
(
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    name text,
    data jsonb NOT NULL
);

CREATE TABLE bar
(
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    name text,
);

WITH bars AS (
  INSERT INTO bar (name) VALUES ('bar') RETURNING id
)
INSERT INTO foo (name, data) VALUES ('foo', jsonb_build_object('barId', (SELECT id FROM bars)));

然后我可以为关系创建一个函数:

CREATE FUNCTION foo_bar(foo_row foo)
RETURNS SETOF bar AS $$
  SELECT *
  FROM bar
  WHERE text(id) = foo_row.data ->> 'barId'
$$ LANGUAGE sql STABLE;

然后我可以在 Hasura 中将其用作“数据”下的计算字段 -> foo -> 修改 -> 计算字段 -> “添加新计算字段”。只需为其命名并在下拉列表中引用该函数即可:

然后我可以查询:

query MyQuery {
  foo {
    name
    foo_bar {
      name
    }
  }
}

预期结果:

{
  "data": {
    "foo": [
      {
        "name": "foo",
        "foo_bar": [
          {
            "name": "bar"
          }
        ]
      }
    ]
  }
}