繁体   English   中英

从 Postgres jsonb 中提取字段

[英]Extract fields from Postgres jsonb

我试图找到一种从 Postgres jsonb 列中提取特定字段的有效方法。

CREATE TABLE foo (
  id integer,
  data jsonb
)

“数据”包含一行:

{
  "firstname": "bob",
  "lastname": "smith,
  "tags": ["tag0","tag1"]
}

我想从数据列中提取大量字段。 这个 select 语句有效,但是对于大量字段来说很麻烦,产生非常长的 SQL 语句,而且我不知道它是否重复遍历每列的 jsonb:

SELECT data->>'firstname', data->'tags' FROM foo

我试过这个:

SELECT jsonb_path_query(data, '$.[firstname,tags]') FROM foo

但它给出了一条错误消息: syntax error, unexpected '['实际上,这种语法是正确的 jsonpath 每个https://jsonpath.com/ ,但似乎 Postgres 没有实现它。

在 SQL 查询命令的执行速度和紧凑性方面,有没有办法有效地提取 jsonb 字段?

是的,您的查询将读取foo的所有行的完整data列。

即使您规范化数据 model 并将您的 JSON 属性转换为常规列,它也会逐行读取表,但是如果您只访问表中的前几列,您的查询会变得更便宜。

您正在寻找的是column store ,但 PostgreSQL 没有内置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM