如何从 jsonb postgresql 获取按键值排序的所有键

How to get all keys ordered by key's value from jsonb postgresql

如何从 json 中获取所有键,按它自己的键的值排序 例如:key 是一个像 uuid 这样的数字,value 是日期

我已经这样做了,但没有订购:

CREATE TABLE IF NOT EXISTS products
(
    id text UNIQUE NOT NULL
        CONSTRAINT crm_id_pkey PRIMARY KEY,
    materials jsonb
);
select 
  jsonb_object_keys(materials) as key,
from 
  products
WHERE 
 id = '5'

所以我需要键的结果 table,通过比较它们自己的日期(值)排序,例如:

select 
  jsonb_object_keys(materials) as key,
from 
  products
WHERE 
 id = '5'
ORDERED BY KEY.GETVALUE()

BUT ORDERED BY key.getValue() 函数在 postgres 中不存在,如果可能我该如何进行排序?

更新: 我发现另一个解决方案不是更好,但它也有效:

select jsonb_object_keys(materials) as keys,
       materials -> jsonb_object_keys(materials) as date
from client_material
WHERE crm_id = '5'
order by date DESC;

示例数据:

insert into products values
('5', '{"k1": "2019-05-01", "k2": "2019-04-01"}');

在横向连接中使用 jsonb_object_keys(materials),这样您就可以在 order by 子句中使用结果键:

select key
from products
cross join jsonb_object_keys(materials) as key
where id = '5'
order by (materials->>key)::date;

 key 
-----
 k2
 k1
(2 rows)

Working example in rextester.