добавить целое число в массив (используя Express и pg-обещание) - PullRequest
2 голосов
/ 22 сентября 2019

Я использую функцию array_append из документации PostgreSQL, и я не вижу, что я делаю неправильно, но получаю следующую ошибку:

error:  { error: invalid input syntax for integer: "{22}"

Вотзапрос:

UPDATE epics 
   SET collection_ids = array_append(collection_ids, '{${id}}') 
WHERE id = ${epicId}

Вот код таблицы:

CREATE TABLE epics (
  id SERIAL PRIMARY KEY,
  title varchar,
  collection_ids SMALLINT[]
);

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

Согласно комментарию от @ abelisto , это лучшее решение:

UPDATE epics SET collection_ids = collection_ids || ${id}::SMALLINT
WHERE id = ${epicId}

Это более элегантно, потому что оно является родным для SQL, не имеет никакой неоднозначности типов и дажеподдерживает массив, если он необходим (ниже мы предполагаем, что ${id} передается как массив):

UPDATE epics SET collection_ids = collection_ids || ${id}::SMALLINT[]
WHERE id = ${epicId}

Поскольку в pg-promise массив 1,2,3 будет автоматически отформатирован как array[1,2,3].

0 голосов
/ 22 сентября 2019

UPDATE epics SET collection_ids = array_append(collection_ids, '${id}') WHERE id = ${epicId}

Работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...