00-latest-revision.sql 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. -- v0 -> v57 (compatible with v45+): Latest revision
  2. CREATE TABLE "user" (
  3. mxid TEXT PRIMARY KEY,
  4. username TEXT UNIQUE,
  5. agent SMALLINT,
  6. device SMALLINT,
  7. management_room TEXT,
  8. space_room TEXT,
  9. phone_last_seen BIGINT,
  10. phone_last_pinged BIGINT,
  11. timezone TEXT
  12. );
  13. CREATE TABLE portal (
  14. jid TEXT,
  15. receiver TEXT,
  16. mxid TEXT UNIQUE,
  17. name TEXT NOT NULL,
  18. name_set BOOLEAN NOT NULL DEFAULT false,
  19. topic TEXT NOT NULL,
  20. topic_set BOOLEAN NOT NULL DEFAULT false,
  21. avatar TEXT NOT NULL,
  22. avatar_url TEXT,
  23. avatar_set BOOLEAN NOT NULL DEFAULT false,
  24. encrypted BOOLEAN NOT NULL DEFAULT false,
  25. last_sync BIGINT NOT NULL DEFAULT 0,
  26. is_parent BOOLEAN NOT NULL DEFAULT false,
  27. parent_group TEXT,
  28. in_space BOOLEAN NOT NULL DEFAULT false,
  29. first_event_id TEXT,
  30. next_batch_id TEXT,
  31. relay_user_id TEXT,
  32. expiration_time BIGINT NOT NULL DEFAULT 0 CHECK (expiration_time >= 0 AND expiration_time < 4294967296),
  33. PRIMARY KEY (jid, receiver)
  34. );
  35. CREATE INDEX portal_parent_group_idx ON portal(parent_group);
  36. CREATE TABLE puppet (
  37. username TEXT PRIMARY KEY,
  38. displayname TEXT,
  39. name_quality SMALLINT,
  40. avatar TEXT,
  41. avatar_url TEXT,
  42. name_set BOOLEAN NOT NULL DEFAULT false,
  43. avatar_set BOOLEAN NOT NULL DEFAULT false,
  44. contact_info_set BOOLEAN NOT NULL DEFAULT false,
  45. last_sync BIGINT NOT NULL DEFAULT 0,
  46. custom_mxid TEXT,
  47. access_token TEXT,
  48. next_batch TEXT,
  49. enable_presence BOOLEAN NOT NULL DEFAULT true,
  50. enable_receipts BOOLEAN NOT NULL DEFAULT true
  51. );
  52. -- only: postgres
  53. CREATE TYPE error_type AS ENUM ('', 'decryption_failed', 'media_not_found');
  54. CREATE TABLE message (
  55. chat_jid TEXT,
  56. chat_receiver TEXT,
  57. jid TEXT,
  58. mxid TEXT UNIQUE,
  59. sender TEXT,
  60. sender_mxid TEXT NOT NULL DEFAULT '',
  61. timestamp BIGINT,
  62. sent BOOLEAN,
  63. error error_type,
  64. type TEXT,
  65. broadcast_list_jid TEXT,
  66. PRIMARY KEY (chat_jid, chat_receiver, jid),
  67. FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
  68. );
  69. CREATE INDEX message_timestamp_idx ON message (chat_jid, chat_receiver, timestamp);
  70. CREATE TABLE poll_option_id (
  71. msg_mxid TEXT,
  72. opt_id TEXT,
  73. opt_hash bytea CHECK ( length(opt_hash) = 32 ),
  74. PRIMARY KEY (msg_mxid, opt_id),
  75. CONSTRAINT poll_option_unique_hash UNIQUE (msg_mxid, opt_hash),
  76. CONSTRAINT message_mxid_fkey FOREIGN KEY (msg_mxid) REFERENCES message(mxid) ON DELETE CASCADE ON UPDATE CASCADE
  77. );
  78. CREATE TABLE reaction (
  79. chat_jid TEXT,
  80. chat_receiver TEXT,
  81. target_jid TEXT,
  82. sender TEXT,
  83. mxid TEXT NOT NULL,
  84. jid TEXT NOT NULL,
  85. PRIMARY KEY (chat_jid, chat_receiver, target_jid, sender),
  86. FOREIGN KEY (chat_jid, chat_receiver, target_jid) REFERENCES message(chat_jid, chat_receiver, jid)
  87. ON DELETE CASCADE ON UPDATE CASCADE
  88. );
  89. CREATE TABLE disappearing_message (
  90. room_id TEXT,
  91. event_id TEXT,
  92. expire_in BIGINT NOT NULL,
  93. expire_at BIGINT,
  94. PRIMARY KEY (room_id, event_id)
  95. );
  96. CREATE TABLE user_portal (
  97. user_mxid TEXT,
  98. portal_jid TEXT,
  99. portal_receiver TEXT,
  100. last_read_ts BIGINT NOT NULL DEFAULT 0,
  101. in_space BOOLEAN NOT NULL DEFAULT false,
  102. PRIMARY KEY (user_mxid, portal_jid, portal_receiver),
  103. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  104. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  105. );
  106. CREATE TABLE backfill_queue (
  107. queue_id INTEGER PRIMARY KEY
  108. -- only: postgres
  109. GENERATED ALWAYS AS IDENTITY
  110. ,
  111. user_mxid TEXT,
  112. type INTEGER NOT NULL,
  113. priority INTEGER NOT NULL,
  114. portal_jid TEXT,
  115. portal_receiver TEXT,
  116. time_start TIMESTAMP,
  117. dispatch_time TIMESTAMP,
  118. completed_at TIMESTAMP,
  119. batch_delay INTEGER,
  120. max_batch_events INTEGER NOT NULL,
  121. max_total_events INTEGER,
  122. FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE ON UPDATE CASCADE,
  123. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
  124. );
  125. CREATE TABLE backfill_state (
  126. user_mxid TEXT,
  127. portal_jid TEXT,
  128. portal_receiver TEXT,
  129. processing_batch BOOLEAN,
  130. backfill_complete BOOLEAN,
  131. first_expected_ts BIGINT,
  132. PRIMARY KEY (user_mxid, portal_jid, portal_receiver),
  133. FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE ON UPDATE CASCADE,
  134. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal (jid, receiver) ON DELETE CASCADE
  135. );
  136. CREATE TABLE media_backfill_requests (
  137. user_mxid TEXT,
  138. portal_jid TEXT,
  139. portal_receiver TEXT,
  140. event_id TEXT,
  141. media_key bytea,
  142. status INTEGER,
  143. error TEXT,
  144. PRIMARY KEY (user_mxid, portal_jid, portal_receiver, event_id),
  145. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  146. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  147. );
  148. CREATE TABLE history_sync_conversation (
  149. user_mxid TEXT,
  150. conversation_id TEXT,
  151. portal_jid TEXT,
  152. portal_receiver TEXT,
  153. last_message_timestamp TIMESTAMP,
  154. archived BOOLEAN,
  155. pinned INTEGER,
  156. mute_end_time TIMESTAMP,
  157. disappearing_mode INTEGER,
  158. end_of_history_transfer_type INTEGER,
  159. ephemeral_Expiration INTEGER,
  160. marked_as_unread BOOLEAN,
  161. unread_count INTEGER,
  162. PRIMARY KEY (user_mxid, conversation_id),
  163. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  164. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  165. );
  166. CREATE TABLE history_sync_message (
  167. user_mxid TEXT,
  168. conversation_id TEXT,
  169. message_id TEXT,
  170. timestamp TIMESTAMP,
  171. data bytea,
  172. inserted_time TIMESTAMP,
  173. PRIMARY KEY (user_mxid, conversation_id, message_id),
  174. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  175. FOREIGN KEY (user_mxid, conversation_id) REFERENCES history_sync_conversation(user_mxid, conversation_id) ON DELETE CASCADE
  176. );