postgresql запрос не выполняется в node.js, но успешно выполняется в pgadmin - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующий postgresql запрос:

SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN (1,2,3)

Он должен выбрать всех пользователей, у которых идентификатор 1, 2 или 3. Тип идентификатора bigint. В pgadmin этот запрос работает так, как должен, но при использовании node- postgres я получаю следующую ошибку:

error: недопустимый синтаксис ввода для типа bigint: "1 , 2,3 "

Node.js пример кода:

// I have an array user_ids_array containing all user ID's
// I convert it to a string using join()
const user_ids = user_ids_array.join(',')

query = "SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN ($1)"

values = [user_ids]

result = await pool.query(query, values)

Я думаю, это как-то связано с тем, что user_id (field) является целым числом (bigint), а user_ids - строка, но я не знаю, как ее привести.

Я нашел этот вопрос , но я также даю решение, используя WHERE some_id IN (1,2).

Заранее спасибо !

1 Ответ

0 голосов
/ 27 мая 2020

Один из способов решить эту проблему - выполнить unnest в вашем массиве.

Учитывая ваш текущий код, ваш arrayids должен быть массивом по умолчанию в javascript (без преобразования в строку):

const arrayids = [1,2,3]

const sql = "SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN (SELECT UNNEST($1::int[]))"

result = await pool.query(query, [arrayids])

Обратите внимание, что параметр second из pool.query отличается от вашего текущего варианта использования.

Надеюсь, это поможет.

В моем проекте я использовал lib pg . Не уверен, что он будет работать с node-postgres.

...