枚举数组的参数化?
Parameterization of an array of enums?
我有一个 table,其中一个字段是枚举数组。例如,假设它是这样的:
CREATE TYPE foobar AS ENUM (
'FOO',
'BAR'
);
CREATE TABLE my_table (
id SERIAL PRIMARY KEY,
foobarray foobar[] DEFAULT ARRAY['FOO']::foobar[]
);
当我尝试使用 node-postgres
到 insert/update 行时,不清楚如何参数化数组并将其类型转换为枚举数组。
当我尝试时:
const foobarray = ["BAR"];
await pool.query("UPDATE my_table SET foobarray=::foobar[] WHERE id=", [id, foobarray]);
我得到:
error: invalid input value for enum foobarray: "{"
有什么想法可以让它发挥作用吗?
我解决了我的问题...
其实我是在拉取值,在更新之前,如下:
SELECT foobarray FROM my_table WHERE id=;
这导致结果中出现以下数组:
["{", "}", "FOO"]
我没有意识到这一点,并试图在更新之前根据结果修改数组,这导致 "{"
和 "}"
显然不是有效的 ENUM 值被传递。
我能够通过保持原始 UPDATE
查询相同但将 SELECT
查询修改为:
来解决这个问题
SELECT foobarray::text[] FROM my_table WHERE id=;
这导致以下数组在结果中:
["FOO"]
调整它并立即更新没有问题。
我有一个 table,其中一个字段是枚举数组。例如,假设它是这样的:
CREATE TYPE foobar AS ENUM (
'FOO',
'BAR'
);
CREATE TABLE my_table (
id SERIAL PRIMARY KEY,
foobarray foobar[] DEFAULT ARRAY['FOO']::foobar[]
);
当我尝试使用 node-postgres
到 insert/update 行时,不清楚如何参数化数组并将其类型转换为枚举数组。
当我尝试时:
const foobarray = ["BAR"];
await pool.query("UPDATE my_table SET foobarray=::foobar[] WHERE id=", [id, foobarray]);
我得到:
error: invalid input value for enum foobarray: "{"
有什么想法可以让它发挥作用吗?
我解决了我的问题...
其实我是在拉取值,在更新之前,如下:
SELECT foobarray FROM my_table WHERE id=;
这导致结果中出现以下数组:
["{", "}", "FOO"]
我没有意识到这一点,并试图在更新之前根据结果修改数组,这导致 "{"
和 "}"
显然不是有效的 ENUM 值被传递。
我能够通过保持原始 UPDATE
查询相同但将 SELECT
查询修改为:
SELECT foobarray::text[] FROM my_table WHERE id=;
这导致以下数组在结果中:
["FOO"]
调整它并立即更新没有问题。