我刚刚开始在postgres上使用jsonb,在网上很难找到例子,因为这是一个相对较新的概念.我试图使用jsonb_每个_文本打印出一个键和值表,但在单个列中得到一个csv.

我将下面的json另存为jsonb,并使用它来测试我的查询.

{
  "lookup_id": "730fca0c-2984-4d5c-8fab-2a9aa2144534",
  "service_type": "XXX",
  "metadata": "sampledata2",
  "matrix": [
    {
        "payment_selection": "type",
        "offer_currencies": [
            {
              "currency_code": "EUR",
              "value": 1220.42
            }
        ]
    }
  ]
}

我可以通过

SELECT element -> 'offer_currencies' -> 0
FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
WHERE element ->> 'payment_selection' = 'type'

它给出了一个"{"value:1220.42,"currency_code:"EUR"}"的结果,所以如果我运行下面的查询,我会得到(我必须更改为"for")

select * from jsonb_each_text('{"value": 1220.42, "currency_code": "EUR"}')

Key            | Value
---------------|----------
"value"        | "1220.42"
"currency_code"| "EUR"

因此,利用上述理论,我创建了这个查询

SELECT jsonb_each_text(data)
FROM (SELECT element -> 'offer_currencies' -> 0 AS data
  FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
  WHERE element ->> 'payment_selection' = 'type') AS dummy;

但这是一列

record
---------------------
"(value,1220.42)"
"(currency_code,EUR)"

推荐答案

这里的主要问题是 Select 整行作为列(PostgreSQL允许这样做).你可以用SELECT (jsonb_each_text(data)).* ...来解决这个问题.

But:不要设置返回函数,这通常会导致错误(或意外结果).相反,使用f.ex.LATERAL联接/子查询:

select first_currency.*
from   test t
     , jsonb_array_elements(t.json -> 'matrix') element
     , jsonb_each_text(element -> 'offer_currencies' -> 0) first_currency
where  element ->> 'payment_selection' = 'type'

Note:FROM子句中的函数调用是隐式LATERAL连接(这里是CROSS JOINs).

Postgresql相关问答推荐

PostgreSQL权限如何工作?需要从表格中 Select 收件箱

Select 与输入数组完全相交的所有行?

如何通过 DirectFunctionCall 发送 NULL 参数?

为什么我使用 VBA 只能从 postgres 获得 10 行?

使用 select 在带有特殊字符的字符串中查找数据

如何将 grafana 与 Google Cloud SQL 集成

PostgreSQL 错误:42P01:relation "[Table]" does not exist

postgresql 更新错误ERROR: invalid input syntax for type boolean:

如何从 postgresql Select 查询中的 age() 函数中仅获取年份

从 sql 查询 postgres 9.4 创建嵌套 json

PostgreSQL ORDER BY 问题 - 自然排序

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

在 Postgresql 中获取星期几

Postgresql - 在 Big Data 库中使用数组的性能

从 Postgres 数据库中删除所有函数

PostgreSQL 不区分大小写的 SELECT 数组

获取 PostgreSQL 中当前正在运行的查询的参数

Postgres 数据库文件保存在 ubuntu 中的什么位置?

我应该在 Django DATABASE ENGINE 中使用哪个 Postgres 值?

如何在 postgresql 中获取整个表的哈希?