{pg-promise} postgres - 如何转换类型int []以与POINT()兼容

问题描述 投票:1回答:1

所以我使用pg-promise插入一个类型POINT列。但它给了我以下错误:

function point(integer[]) does not exist

我将值作为数组传递。我应该改变什么来使它工作?

一些代码(不确定是否有用):

simplified_query = `$${counter++}:name = POINT($${counter++})`

fields =
[
    "geolocation",
    [10, 10]
]
pg-promise
1个回答
1
投票

根据Custom Type Formatting,如果你的field['geolocation', [10, 10]],第一个值是列名,你可以使用以下函数:

function asPoint(field) {
    return {
        rawType: true,
        toPostgres: () => pgp.as.format('$1:name = POINT($2:csv)', field)
    };
}

然后你可以使用asPoint(field)作为查询格式参数:

const field = ['geolocation', [10, 10]];
db.any('SELECT * FROM table WHERE $1', [asPoint(field)])
//=> SELECT * FROM table WHERE "geolocation" = POINT(10, 10)

或者,你的field可以是一个自定义类,它可以显式地或通过原型实现Custom Type Formatting,在这种情况下,它可以直接用作格式化参数。

© www.soinside.com 2019 - 2024. All rights reserved.