1

我想做最简单的事情,将结构化数据添加到 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)"
        }
      ]
    }
  }
}

类似的事情发生在polygonorbytea类型上。

在我的理想世界中,我为查询编写了一个计算列函数,它返回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作为字符串可用。

作为字符串的 Box 参数示例

这可以通过 postgres 函数实现吗?或者这只能通过 postgraphile 插件实现?

非常感谢您提供任何建议/示例!

4

0 回答 0