首页 > 解决方案 > 为什么 jsonb_path_query 缺少某些行的值?

问题描述

我有这个jsonb我正在尝试展平并迁移到conversations表格tags

{
  id: '1',
  type: 'conversation',
  tags: [
   {
    id: '1',
    type: 'tag',
    name: 'foo'
   }, {
    id: '2',
    type: 'tag',
    name: 'bar'
   },
   {
    id: '3',
    type: 'tag',
    name: 'baz'
   }
  ]
}

但以下查询返回意外结果:

SELECT 
    jsonb_path_query(payload, '$.id') #>> '{}' conversation_id,
    jsonb_path_query(payload, '$.tags[*].name') tag_name
FROM conversations;
conversation_id | tag_name
1                 foo
                  bar
                  baz

我想要以下内容

conversation_id | tag_name
1                 foo
1                 bar
1                 baz

我可能遗漏了一些明显的东西,但我不清楚:

标签: postgresql

解决方案


这就是自 v10 以来选择列表中的多个集合返回函数的工作方式。见不启动“在 PostgreSQL 10 之前,放置多个集合返回函数”

您的查询可以转换为更简单的:

SELECT 
    payload #>> '{id}' conversation_id,
    jsonb_path_query(payload, '$.tags[*].name') tag_name
FROM conversations;

推荐阅读