Postgresql Postgres-附加到jsonb字符串

Postgresql Postgres-附加到jsonb字符串,postgresql,jsonb,Postgresql,Jsonb,在Postgres中,我有一个jsonb列foo,它存储字符串数组 ["a","b","c"] 我需要一个查询,将另一个字符串附加到指定索引处的当前位置 e.g. Append "!" at index 1 run query: ["a","b","c"] -> ["a","b!","c"] run again: ["a","b","c"] -> ["a","b!!","c"] run again: ["a","b","c"] -> ["a","b!!!","c"] 我在

在Postgres中,我有一个jsonb列foo,它存储字符串数组

["a","b","c"]
我需要一个查询,将另一个字符串附加到指定索引处的当前位置

e.g. Append "!" at index 1

run query: ["a","b","c"] -> ["a","b!","c"]
run again: ["a","b","c"] -> ["a","b!!","c"]
run again: ["a","b","c"] -> ["a","b!!!","c"]
我在Postgres v11.2中实现了如下

更新我的表格 SET foo=jsonb_setfoo,'{1}',CONCAT',foo->>1',!','::jsonb 其中id='12345'; 注意索引1和字符串“!”为了简单起见,这里只是硬编码,但它们应该是变量

这很管用,但我觉得很不雅观。如您所见,我正在使用->>运算符选择给定索引处的字符串作为文本,并将其作为输入添加到CONCAT以附加“!”,并将其重新构建到正确的语法中,以转换回jsonb字符串。这里要做的工作比看起来需要的要多得多,只需在给定路径处附加到字符串即可


有没有更简单的方法?可能是一个内置函数或运算符,还是一种比使用CONCAT更简单的追加方式?我尝试以各种方式使用| |运算符,但似乎无法使语法和类型发挥任何作用

我认为没有比jsonb|u集更好的方法了

concat可替换为| |,如下所示:

jsonb_set(foo, '{1}', ('"' || (foo->>1) || '!"')::jsonb)
谢谢-这就是我要找的| |语法!这已经是一个很大的进步。