枚举数组的参数化?

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"]

调整它并立即更新没有问题。