我有一个postgresql表profile
,其中包含列(username
,friends
)。username
是一个字符串,friends
是一个json类型,当前值为["Mary", "Bob]
。我想在数组末尾追加一个项,使其为["Mary", "Bob", "Alice"]
我目前已经试过:
UPDATE profile SET friends = friends || '["Alice"]'::jsonb WHERE username = 'David';
这将产生以下错误:
[ERROR] 23:56:23 error: operator does not exist: json || jsonb
我尝试将第一个表达式更改为包含json
而不是jsonb
,但随后出现错误:
[ERROR] 00:06:25 error: operator does not exist: json || json
其他的答案似乎暗示了||运算符实际上是一个事物,例如:
Appending (pushing) and removing from a JSON array in PostgreSQL 9.5+
如何将一个项目追加到json数组的末尾?
1条答案
按热度按时间4nkexdtk1#
数据类型
json
比jsonb
的限制要多得多。使用jsonb
而不是json
,您找到的解决方案就能简单地工作。在使用
json
时,可能的解决方法是转换为jsonb
,然后再转换回来:您也可以为
jsonb '["Alice"]'
使用显式类型,但这是可选的。虽然表达式是明确的,但无类型的字符串文字将自动强制为jsonb
。如果您提供一个有类型的值来代替'["Alice"]'
,则可能需要显式转换。如果
friends
可以是NULL
,那么您将需要定义应该发生什么。目前,什么都没有发生。或者,确切地说,一个不改变NULL
值的更新。同样,如果只有简单的字符串数组,可以考虑普通的Postgres array type
text[]
。