将整数附加到数组(使用 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]
。
我正在使用 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]
。