【问题标题】:Parameterization of an array of enums?枚举数组的参数化?
【发布时间】:2020-05-19 12:44:29
【问题描述】:

我有一个表,其中一个字段是枚举数组。例如,假设它是这样的:

CREATE TYPE foobar AS ENUM (
  'FOO',
  'BAR'
);

CREATE TABLE my_table (
  id SERIAL PRIMARY KEY,
  foobarray foobar[] DEFAULT ARRAY['FOO']::foobar[]
);

当我尝试使用 node-postgres 插入/更新一行时,不清楚如何参数化数组并将其类型转换为枚举数组。

当我尝试时:

const foobarray = ["BAR"];
await pool.query("UPDATE my_table SET foobarray=$2::foobar[] WHERE id=$1", [id, foobarray]);

我明白了:

error: invalid input value for enum foobarray: "{"

任何想法如何让它工作?

【问题讨论】:

    标签: node-postgres


    【解决方案1】:

    我发现了我的问题...

    我其实是在拉取值,在更新之前,如下:

    SELECT foobarray FROM my_table WHERE id=$1;
    

    这导致结果中出现以下数组:

    ["{", "}", "FOO"]
    

    我没有意识到这一点,并试图在更新之前从结果中修改数组,这导致 "{""}" 显然不是有效的 ENUM 值被传递。

    我能够通过保持原来的UPDATE 查询相同但将SELECT 查询修改为:

    SELECT foobarray::text[] FROM my_table WHERE id=$1;
    

    这会导致结果中出现以下数组:

    ["FOO"]
    

    现在调整和更新不会有任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      相关资源
      最近更新 更多