在消息傳遞系統中,我想記錄一條新消息。 由於技術原因我的系統中有兩個表格。一個引用對話,另一個引用鏈接到這些對話的消息。多條INSERT條件和SELECT返回一個請求
conversation
conversation_id
---------------
3
4
8
12
(*)conversation_id是一個序列號。
message
message_id | conversation_id | timestamp | sender_id | receiver_id | message
------------+-----------------+---------------------+-----------+-------------+-------------------------------
12 | 3 | 2015-05-13 15:46:36 | 1 | 2 | Hello Bob! How are you doing?
13 | 3 | 2015-05-13 15:55:10 | 2 | 1 | I'm fine, and you?
當系統記錄了新的消息我想如果不是已經做到了自動創建相應的談話。 我希望聲明可以返回完整的對話(意味着所有與剛剛添加的對象相關的消息)。
因此,系統會插入對話(如果尚未創建),然後插入消息並最終返回整個對話。所以我只是想提供這個元組postgreSQL (時間戳,sender_id,receiver_id,消息),讓它處理對話部分(創建或選擇)。
我想找回完整的對話就像如果我做:
SELECT * FROM message WHERE conversation_id="xxxx"
是否有可能做的所有這些操作都在一個單獨的SQL語句?
我發現我們可以使用與INSERT和SELECT操作相關的CTE,但我不知道如何表達我的具體請求。
必須通過CTE嗎?你打開PL/pgsql,規則還是觸發器? –
我對任何解決方案都開放。 :-)但是,更簡單,更好......當然。 – Nitseg