我正试图找到一种从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 perhttps://jsonpath.com/,但似乎Postgres没有实现它。
在SQL查询命令的执行速度和紧凑性方面,有没有一种方法可以有效地提取jsonb字段?
是的,您的查询将为foo
的所有行读取完整的data
列。
即使您规范化数据模型并将JSON属性转换为常规列,它也会逐行读取表,但如果您只访问表中的前几列,则查询会变得更便宜。
您正在寻找的是列存储,但PostgreSQL没有内置。