postgresql 如何控制jsonb_object_agg中字段的顺序

pxiryf3j  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(367)

我正在尝试构建一个jsonb对象,它的键按字母顺序排列。然而,jsonb_object_agg(k, v)似乎忽略了输入的顺序,并按键长度排序输入,然后按字母顺序排序。
例如

select jsonb_object_agg(k, v order by k) from (
    values ('b', 'b_something'), ('ab', 'ab_something')
) as t (k,v)

给予

{
  "b": "b_something",
  "ab": "ab_something"
}

但我需要的是

{
  "ab": "ab_something"
  "b": "b_something",
}

有没有办法做到这一点?

Context我正在扁平化一个json列,其中的内容遵循统一但笨拙的模式。多亏了this useful answer,我已经成功地做到了这一点,但密钥的顺序不是我需要它们的方式。

iq0todco

iq0todco1#

jsonb以解析的形式存储数据,这使得访问其部分变得高效。因此,原始字符串的格式不会保留,属性的顺序也不会保留,您也不能拥有重复的属性。你所要求的是不可能的。
您可以使用json数据类型,它本质上是一个带有语法检查的字符串,可以保留原始顺序。
要在聚合期间建立顺序,请使用json_agg(... ORDER BY ...)

相关问题