我想做最简单的事情,将结构化数据添加到 postgraphile 突变中。
我有一个简单的示例表:
> \d test1.my_table
+----------+--------+
| Column | Type |
|----------+--------+
| id | uuid |
| the_box | box |
+----------+--------+
该box
列{kind: "SCALAR", name: "String", ofType: null}
通过 postgraphile 创建了一种类型,这让我可以解析查询的结果,并将数据编组为一个字符串以进行突变。
query MyQuery {
myTables {
nodes { id theBox }
}
}
产量
{
"data": {
"myTables": {
"nodes": [
{
"id": "c79ee287-88ca-4950-a44b-e4ef07d3c3dc",
"theBox": "(3,4),(1,2)"
}
]
}
}
}
类似的事情发生在polygon
orbytea
类型上。
在我的理想世界中,我为查询编写了一个计算列函数,它返回box
(or polygon
, or bytea
) 作为一些自定义 postgres 类型。
CREATE TYPE box_arg AS (x point, y point);
CREATE OR REPLACE FUNCTION test1.my_table_box_for_query(the_row test1.my_table)
RETURNS box_arg AS $$
BEGIN
SELECT '(the_row.the_box[0][0], the_row.the_box[1][0])'::point,
'(the_row.the_box[0][1], the_row.the_box[1][1])'::point;
END;
$$ LANGUAGE 'plpgsql' STABLE;
(不管我是否在该查询中选择了正确的 x/y ......)
但是,我似乎无法弄清楚另一个方向。如何编写一个在 postgraphile 创建的突变上公开的函数,该函数my_table
将接受结构化数据(box_arg
例如上面的类型),并让函数在突变期间使用函数参数中的值更新记录?我想将box_arg
类型作为突变的输入。实际上,您可以在此处看到该框仅input
作为字符串可用。
这可以通过 postgres 函数实现吗?或者这只能通过 postgraphile 插件实现?
非常感谢您提供任何建议/示例!