在 postgresql-simple 中使用多维数据集

Using cubes in postgresql-simple

您打算如何使用 cubes with postgresql-simple

目前,我正在做

query conn "SELECT thing FROM table WHERE coord <@ cube('?, ?') ORDER BY cube_distance(coord, cube('?')) ASC" 
      (In [a, b, c], In [d, e, f], In [g, h, i])

效果很好,但感觉像是对 In 的误用。在 executeMany 的情况下它也会失败。例如

executeMany conn "INSERT INTO table(thing, coord) VALUES(?, cube('?'))" lst

其中 lst :: [(String, In [Float])] 失败并显示 syntax error in multi-row template。等效,但效率较低

mapM_ (execute conn "INSERT INTO table(thing, coord) VALUES(?, cube('?'))") lst

工作正常,所以我假设这与 executeMany 如何组织插入参数有关。

但是,文档没有提到 Cube 类型,而且我找不到它的使用示例,所以我不太确定我应该 去做。

你可以用this mini-library我写的。一旦包含它,您就可以

execute "INSERT INTO table(cube_field, name) VALUES(?, ?) RETURNING id" (Cube [[1, 2, 3]], "Testing")

而且,更重要的是,

executeMany "INSERT INTO table(cube_field, name) VALUES(?, ?) RETURNING id"
            [(Cube [[1, 2]], "One"), (Cube [[3, 4]], "Two"), (Cube [[5, 6]], "Three")]

没有 fromField 实例,因此您现在不能 select Cube。我不会添加它,因为它看起来很重要,而且我的用例不需要它,但是 patches are definitely welcome.