将整数附加到数组(使用 express 和 pg-promise)

append integer to an array (using express and pg-promise)

我正在使用 PostgreSQL 文档中的 array_append 函数,但我没有看到我做错了什么,却收到以下错误:

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

这里是查询:

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

这是 table 的代码:

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

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

有效。

根据 @abelisto 的评论,这是最佳解决方案:

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

更优雅,因为它是 SQL-native,没有类型歧义,甚至支持数组,如果需要的话(下面我们假设 ${id} 作为数组传入) :

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

因为在pg-promise中,1,2,3的数组会自动格式化为array[1,2,3]