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

时间:2019-02-11 19:44:50

标签: pg-promise

因此,我正在使用pg-promise插入类型POINT列中。但这给了我以下错误:

function point(integer[]) does not exist

我将值作为数组传递。我应该进行哪些更改才能使其正常工作?

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

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

fields =
[
    "geolocation",
    [10, 10]
]

1 个答案:

答案 0 :(得分: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,在这种情况下,它可以直接用作格式参数。