将来自 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"
}
]
}
]
}
}
我们在 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"
}
]
}
]
}
}