{pg-обещание} postgres - как преобразовать тип int [] для совместимости с POINT () - PullRequest
0 голосов
/ 11 февраля 2019

Поэтому я использую pg-promise для вставки в столбец типа POINT.Но это дает мне следующую ошибку:

function point(integer[]) does not exist

Я передаю значения в виде массива.Что я должен изменить, чтобы это работало?

Какой-то код (не уверен, что полезен):

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

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

1 Ответ

0 голосов
/ 13 февраля 2019

Согласно Форматирование нестандартного типа , если 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 может быть классом пользовательского типа, который реализует Форматирование пользовательского типа либо явно, либочерез прототип, и в этом случае его можно использовать непосредственно в качестве параметра форматирования.

...