如何实现空messages列的JSON数组拼接更新,避免覆盖原有数据?
解决方案
可以使用COALESCE函数处理空值场景,将NULL的messages列转换为空JSON数组后再进行拼接,这样不管列原本是空还是已有消息,都能正确追加新内容,无需在代码层做判断:
UPDATE chats SET messages = COALESCE(messages, '[]'::json) || $1 WHERE sender_id = $2 AND reciever_id = $3;
说明:
COALESCE(messages, '[]'::json):如果messages为NULL(空列),则返回空的JSON数组[];如果已有值,则返回原有的JSON数组。||操作符:PostgreSQL中支持用它来拼接JSON数组,将新的消息数组($1)追加到原有数组后面。- 注意:
$1必须是JSON数组格式(比如[{"message":"新消息","sender":"xxx","reciever":"xxx"}]),不能是单个JSON对象,否则拼接会导致格式错误。
内容的提问来源于stack exchange,提问作者Muathcs
相关产品推荐
相关产品推荐

