Я пытаюсь написать запрос, используя расширение postgresql earthdistance, и хочу вернуть вычисляемый столбец, но все время получаю сообщение об ошибке: отсутствует запись в предложении FROM для таблицы «670906, -79». Предположительно это связано с тем, что синтаксический анализатор считает, что точка отделяет имя таблицы от имени столбца, но в моем случае я выполняю расчет (см. Пример запроса ниже). Есть ли способ обойти это?
Possibly unhandled error: missing FROM-clause entry for table "670906,-79"
at Connection.parseE (/usr/local/lib/node_modules/pg/lib/connection.js:534:11)
at Connection.parseMessage (/usr/local/lib/node_modules/pg/lib/connection.js:361:17)
at Socket.<anonymous> (/usr/local/lib/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:764:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:426:10)
at emitReadable (_stream_readable.js:422:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
var columns = [
'id',
'(earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance)'
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])
Вы должны использовать knex.raw
для вычисляемого столбца, чтобы он не цитировался. Следующее должно работать:
var columns = [
'id',
knex.raw('earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance')
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])
Спасибо! Именно то, что мне нужно. Как-то не додумался использовать knex.raw
.
Пожалуйста!
Самый полезный комментарий
Вы должны использовать
knex.raw
для вычисляемого столбца, чтобы он не цитировался. Следующее должно работать: