【问题标题】:Array of type enum coming back as string from Postgres从 Postgres 以字符串形式返回的枚举类型数组
【发布时间】:2016-01-09 05:31:21
【问题描述】:

给定一个自定义枚举: CREATE TYPE vehicle AS ENUM ('car', 'truck', 'bicycle');

还有这样一张桌子:

CREATE TABLE vehicle_events (
  timestamp timestamptz NOT NULL DEFAULT current_timestamp,
  labels vehicle[] NOT NULL,
  mentions int4[] NOT NULL DEFAULT '{}'
);

当从我们的节点应用程序中这样查询时:

SELECT * FROM vehicle_events;

这会返回一个像这样的 json 结构:

[{"timestamp": "January, 06 2016 23:04:56", "labels": "{'car'}", "mentions": [1,2,3,4]}]

我的问题确实是,为什么标签数组会作为字符串返回(另请注意,基本类型的提及数组不是)?这是因为它是ENUM 的数组吗?如果是这样,我怎样才能将其强制为常规数组?为什么 postgres 会以这种方式返回它?

sqlfiddle 链接:http://sqlfiddle.com/#!15/637ce/1

【问题讨论】:

  • "[1,2,3,4]" 将是一个字符串,而 [1,2,3,4] 不是。是什么让你认为它是一个字符串?您自己的代码显示相反。
  • 标签数组作为字符串返回,而不是提及数组:“{'car'}”
  • 可能是 node-postgres 中的另一个错误。只需通过 pg-types 为枚举添加您自己的转换器 - 这很容易。

标签: node.js postgresql node-postgres


【解决方案1】:

这就是 postgres 数组如果不被解释为数组时的样子。如果您在查询中使用 to_json(),则数组将正确返回。

点赞:SELECT to_json(labels) as labels FROM vehicle_events;

【讨论】:

  • 您是否知道是否有其他方法可以做到这一点?无需显式转换为 json?
猜你喜欢
  • 2010-11-08
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2014-07-23
  • 2016-10-19
相关资源
最近更新 更多