postgresql 如何使用对象数组更新现有表?

new9mtju  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(127)

当用户点击另一个用户时,chats表中会创建一个新条目,其中包含发送者和接收者id,但聊天消息为空。
当用户发送消息时,根据他将消息发送给谁,聊天表中的项目将用所发送的消息来更新。

the message object looks like this [{message: "abc", sender: "person", 
reciever:"person2"}] // there will be multiple object inside the arr

现在我的table是这样的:

chats (sender_id, reciever_id, messages jsonb[])

这是我发送的查询

UPDATE chats SET 
messages = '[
  { message: 'hi', sender: 'test', reciever: null },
  { message: 'hello', sender: 'test', reciever: null }
]' WHERE 
sender_id = 47 AND 
reciever_id = 43

这导致了错误,并且没有更新表。错误没有告诉我太多,但是我认为这是由于我的对象不是json格式(键上的字符串)
那么我可以使用什么数据类型来允许我使用MY格式更新消息列呢?

eimct9ow

eimct9ow1#

json必须使用双引号。
您的数据也不需要jsonb数组,所以我删除了它

CREATE TABLE chats (sender_id int, reciever_id int, messages jsonb)
CREATE TABLE
INSERT INTO chats VALUES (47,43, NULL)
INSERT 0 1
UPDATE chats SET 
messages = '[
  { "message": "hi", "sender": "test", "reciever": null },
  { "message": "hello", "sender": "test", "reciever": null }
]' WHERE 
sender_id = 47 AND 
reciever_id = 43
UPDATE 1
SELECT * FROM chats

| 发件人标识|接收方标识|讯息|
| - ------|- ------|- ------|
| 四十七|四十三|[{"发件人":"测试"、"消息":"嗨"、"接收者":null},{"发件人":"测试"、"消息":"你好"、"接收者":空}]|

SELECT 1

fiddle

相关问题