[英]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.