Created
February 10, 2016 05:50
-
-
Save jimmycuadra/7d8d4c18d8f27f28d0d1 to your computer and use it in GitHub Desktop.
Synapse's full SQL schema as of c110eb9 (v0.12.1-rc1)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE schema_version( | |
Lock CHAR(1) NOT NULL DEFAULT 'X' UNIQUE, -- Makes sure this table only has one row. | |
version INTEGER NOT NULL, | |
upgraded BOOL NOT NULL, -- Whether we reached this version from an upgrade or an initial schema. | |
CHECK (Lock='X') | |
); | |
CREATE TABLE applied_schema_deltas( | |
version INTEGER NOT NULL, | |
file TEXT NOT NULL, | |
UNIQUE(version, file) | |
); | |
CREATE TABLE application_services( id BIGINT PRIMARY KEY, url TEXT, token TEXT, hs_token TEXT, sender TEXT, UNIQUE(token) ); | |
CREATE TABLE application_services_regex( id BIGINT PRIMARY KEY, as_id BIGINT NOT NULL, namespace INTEGER, regex TEXT, FOREIGN KEY(as_id) REFERENCES application_services(id) ); | |
CREATE TABLE application_services_state( as_id TEXT PRIMARY KEY, state VARCHAR(5), last_txn INTEGER ); | |
CREATE TABLE application_services_txns( as_id TEXT NOT NULL, txn_id INTEGER NOT NULL, event_ids TEXT NOT NULL, UNIQUE(as_id, txn_id) ); | |
CREATE INDEX application_services_txns_id ON application_services_txns ( as_id ); | |
CREATE TABLE event_forward_extremities( event_id TEXT NOT NULL, room_id TEXT NOT NULL, UNIQUE (event_id, room_id) ); | |
CREATE INDEX ev_extrem_room ON event_forward_extremities(room_id); | |
CREATE INDEX ev_extrem_id ON event_forward_extremities(event_id); | |
CREATE TABLE event_backward_extremities( event_id TEXT NOT NULL, room_id TEXT NOT NULL, UNIQUE (event_id, room_id) ); | |
CREATE INDEX ev_b_extrem_room ON event_backward_extremities(room_id); | |
CREATE INDEX ev_b_extrem_id ON event_backward_extremities(event_id); | |
CREATE TABLE event_edges( event_id TEXT NOT NULL, prev_event_id TEXT NOT NULL, room_id TEXT NOT NULL, is_state BOOL NOT NULL, UNIQUE (event_id, prev_event_id, room_id, is_state) ); | |
CREATE INDEX ev_edges_id ON event_edges(event_id); | |
CREATE INDEX ev_edges_prev_id ON event_edges(prev_event_id); | |
CREATE TABLE room_depth( room_id TEXT NOT NULL, min_depth INTEGER NOT NULL, UNIQUE (room_id) ); | |
CREATE INDEX room_depth_room ON room_depth(room_id); | |
CREATE TABLE event_destinations( event_id TEXT NOT NULL, destination TEXT NOT NULL, delivered_ts BIGINT DEFAULT 0, UNIQUE (event_id, destination) ); | |
CREATE INDEX event_destinations_id ON event_destinations(event_id); | |
CREATE TABLE state_forward_extremities( event_id TEXT NOT NULL, room_id TEXT NOT NULL, type TEXT NOT NULL, state_key TEXT NOT NULL, UNIQUE (event_id, room_id) ); | |
CREATE INDEX st_extrem_keys ON state_forward_extremities( room_id, type, state_key ); | |
CREATE INDEX st_extrem_id ON state_forward_extremities(event_id); | |
CREATE TABLE event_auth( event_id TEXT NOT NULL, auth_id TEXT NOT NULL, room_id TEXT NOT NULL, UNIQUE (event_id, auth_id, room_id) ); | |
CREATE INDEX evauth_edges_id ON event_auth(event_id); | |
CREATE INDEX evauth_edges_auth_id ON event_auth(auth_id); | |
CREATE TABLE event_content_hashes ( event_id TEXT, algorithm TEXT, hash bytea, UNIQUE (event_id, algorithm) ); | |
CREATE INDEX event_content_hashes_id ON event_content_hashes(event_id); | |
CREATE TABLE event_reference_hashes ( event_id TEXT, algorithm TEXT, hash bytea, UNIQUE (event_id, algorithm) ); | |
CREATE INDEX event_reference_hashes_id ON event_reference_hashes(event_id); | |
CREATE TABLE event_signatures ( event_id TEXT, signature_name TEXT, key_id TEXT, signature bytea, UNIQUE (event_id, signature_name, key_id) ); | |
CREATE INDEX event_signatures_id ON event_signatures(event_id); | |
CREATE TABLE event_edge_hashes( event_id TEXT, prev_event_id TEXT, algorithm TEXT, hash bytea, UNIQUE (event_id, prev_event_id, algorithm) ); | |
CREATE INDEX event_edge_hashes_id ON event_edge_hashes(event_id); | |
CREATE TABLE events( stream_ordering INTEGER PRIMARY KEY, topological_ordering BIGINT NOT NULL, event_id TEXT NOT NULL, type TEXT NOT NULL, room_id TEXT NOT NULL, content TEXT NOT NULL, unrecognized_keys TEXT, processed BOOL NOT NULL, outlier BOOL NOT NULL, depth BIGINT DEFAULT 0 NOT NULL, origin_server_ts BIGINT, UNIQUE (event_id) ); | |
CREATE INDEX events_stream_ordering ON events (stream_ordering); | |
CREATE INDEX events_topological_ordering ON events (topological_ordering); | |
CREATE INDEX events_order ON events (topological_ordering, stream_ordering); | |
CREATE INDEX events_room_id ON events (room_id); | |
CREATE INDEX events_order_room ON events ( room_id, topological_ordering, stream_ordering ); | |
CREATE TABLE event_json( event_id TEXT NOT NULL, room_id TEXT NOT NULL, internal_metadata TEXT NOT NULL, json TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE INDEX event_json_room_id ON event_json(room_id); | |
CREATE TABLE state_events( event_id TEXT NOT NULL, room_id TEXT NOT NULL, type TEXT NOT NULL, state_key TEXT NOT NULL, prev_state TEXT, UNIQUE (event_id) ); | |
CREATE INDEX state_events_room_id ON state_events (room_id); | |
CREATE INDEX state_events_type ON state_events (type); | |
CREATE INDEX state_events_state_key ON state_events (state_key); | |
CREATE TABLE current_state_events( event_id TEXT NOT NULL, room_id TEXT NOT NULL, type TEXT NOT NULL, state_key TEXT NOT NULL, UNIQUE (event_id), UNIQUE (room_id, type, state_key) ); | |
CREATE INDEX current_state_events_room_id ON current_state_events (room_id); | |
CREATE INDEX current_state_events_type ON current_state_events (type); | |
CREATE INDEX current_state_events_state_key ON current_state_events (state_key); | |
CREATE TABLE room_memberships( event_id TEXT NOT NULL, user_id TEXT NOT NULL, sender TEXT NOT NULL, room_id TEXT NOT NULL, membership TEXT NOT NULL, forgotten INTEGER DEFAULT 0, UNIQUE (event_id) ); | |
CREATE INDEX room_memberships_room_id ON room_memberships (room_id); | |
CREATE INDEX room_memberships_user_id ON room_memberships (user_id); | |
CREATE TABLE feedback( event_id TEXT NOT NULL, feedback_type TEXT, target_event_id TEXT, sender TEXT, room_id TEXT, UNIQUE (event_id) ); | |
CREATE TABLE topics( event_id TEXT NOT NULL, room_id TEXT NOT NULL, topic TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE INDEX topics_room_id ON topics(room_id); | |
CREATE TABLE room_names( event_id TEXT NOT NULL, room_id TEXT NOT NULL, name TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE INDEX room_names_room_id ON room_names(room_id); | |
CREATE TABLE rooms( room_id TEXT PRIMARY KEY NOT NULL, is_public BOOL, creator TEXT ); | |
CREATE TABLE room_hosts( room_id TEXT NOT NULL, host TEXT NOT NULL, UNIQUE (room_id, host) ); | |
CREATE INDEX room_hosts_room_id ON room_hosts (room_id); | |
CREATE TABLE server_tls_certificates( server_name TEXT, fingerprint TEXT, from_server TEXT, ts_added_ms BIGINT, tls_certificate bytea, UNIQUE (server_name, fingerprint) ); | |
CREATE TABLE server_signature_keys( server_name TEXT, key_id TEXT, from_server TEXT, ts_added_ms BIGINT, verify_key bytea, UNIQUE (server_name, key_id) ); | |
CREATE TABLE local_media_repository ( media_id TEXT, media_type TEXT, media_length INTEGER, created_ts BIGINT, upload_name TEXT, user_id TEXT, UNIQUE (media_id) ); | |
CREATE TABLE local_media_repository_thumbnails ( media_id TEXT, thumbnail_width INTEGER, thumbnail_height INTEGER, thumbnail_type TEXT, thumbnail_method TEXT, thumbnail_length INTEGER, UNIQUE ( media_id, thumbnail_width, thumbnail_height, thumbnail_type ) ); | |
CREATE INDEX local_media_repository_thumbnails_media_id ON local_media_repository_thumbnails (media_id); | |
CREATE TABLE remote_media_cache ( media_origin TEXT, media_id TEXT, media_type TEXT, created_ts BIGINT, upload_name TEXT, media_length INTEGER, filesystem_id TEXT, UNIQUE (media_origin, media_id) ); | |
CREATE TABLE remote_media_cache_thumbnails ( media_origin TEXT, media_id TEXT, thumbnail_width INTEGER, thumbnail_height INTEGER, thumbnail_method TEXT, thumbnail_type TEXT, thumbnail_length INTEGER, filesystem_id TEXT, UNIQUE ( media_origin, media_id, thumbnail_width, thumbnail_height, thumbnail_type ) ); | |
CREATE INDEX remote_media_cache_thumbnails_media_id ON remote_media_cache_thumbnails (media_id); | |
CREATE TABLE presence( user_id TEXT NOT NULL, state VARCHAR(20), status_msg TEXT, mtime BIGINT, UNIQUE (user_id) ); | |
CREATE TABLE presence_allow_inbound( observed_user_id TEXT NOT NULL, observer_user_id TEXT NOT NULL, UNIQUE (observed_user_id, observer_user_id) ); | |
CREATE TABLE presence_list( user_id TEXT NOT NULL, observed_user_id TEXT NOT NULL, accepted BOOLEAN NOT NULL, UNIQUE (user_id, observed_user_id) ); | |
CREATE INDEX presence_list_user_id ON presence_list (user_id); | |
CREATE TABLE profiles( user_id TEXT NOT NULL, displayname TEXT, avatar_url TEXT, UNIQUE(user_id) ); | |
CREATE TABLE rejections( event_id TEXT NOT NULL, reason TEXT NOT NULL, last_check TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE TABLE push_rules ( id BIGINT PRIMARY KEY, user_name TEXT NOT NULL, rule_id TEXT NOT NULL, priority_class SMALLINT NOT NULL, priority INTEGER NOT NULL DEFAULT 0, conditions TEXT NOT NULL, actions TEXT NOT NULL, UNIQUE(user_name, rule_id) ); | |
CREATE INDEX push_rules_user_name on push_rules (user_name); | |
CREATE TABLE user_filters( user_id TEXT, filter_id BIGINT, filter_json bytea ); | |
CREATE INDEX user_filters_by_user_id_filter_id ON user_filters( user_id, filter_id ); | |
CREATE TABLE push_rules_enable ( id BIGINT PRIMARY KEY, user_name TEXT NOT NULL, rule_id TEXT NOT NULL, enabled SMALLINT, UNIQUE(user_name, rule_id) ); | |
CREATE INDEX push_rules_enable_user_name on push_rules_enable (user_name); | |
CREATE TABLE redactions ( event_id TEXT NOT NULL, redacts TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE INDEX redactions_event_id ON redactions (event_id); | |
CREATE INDEX redactions_redacts ON redactions (redacts); | |
CREATE TABLE room_aliases( room_alias TEXT NOT NULL, room_id TEXT NOT NULL, UNIQUE (room_alias) ); | |
CREATE INDEX room_aliases_id ON room_aliases(room_id); | |
CREATE TABLE room_alias_servers( room_alias TEXT NOT NULL, server TEXT NOT NULL ); | |
CREATE INDEX room_alias_servers_alias ON room_alias_servers(room_alias); | |
CREATE TABLE state_groups( id BIGINT PRIMARY KEY, room_id TEXT NOT NULL, event_id TEXT NOT NULL ); | |
CREATE TABLE state_groups_state( state_group BIGINT NOT NULL, room_id TEXT NOT NULL, type TEXT NOT NULL, state_key TEXT NOT NULL, event_id TEXT NOT NULL ); | |
CREATE TABLE event_to_state_groups( event_id TEXT NOT NULL, state_group BIGINT NOT NULL, UNIQUE (event_id) ); | |
CREATE INDEX state_groups_id ON state_groups(id); | |
CREATE INDEX state_groups_state_id ON state_groups_state(state_group); | |
CREATE INDEX event_to_state_groups_id ON event_to_state_groups(event_id); | |
CREATE TABLE received_transactions( transaction_id TEXT, origin TEXT, ts BIGINT, response_code INTEGER, response_json bytea, has_been_referenced smallint default 0, UNIQUE (transaction_id, origin) ); | |
CREATE INDEX transactions_have_ref ON received_transactions(origin, has_been_referenced); | |
CREATE TABLE sent_transactions( id BIGINT PRIMARY KEY, transaction_id TEXT, destination TEXT, response_code INTEGER DEFAULT 0, response_json TEXT, ts BIGINT ); | |
CREATE INDEX sent_transaction_txn_id ON sent_transactions(transaction_id); | |
CREATE TABLE transaction_id_to_pdu( transaction_id INTEGER, destination TEXT, pdu_id TEXT, pdu_origin TEXT, UNIQUE (transaction_id, destination) ); | |
CREATE INDEX transaction_id_to_pdu_dest ON transaction_id_to_pdu(destination); | |
CREATE TABLE destinations( destination TEXT PRIMARY KEY, retry_last_ts BIGINT, retry_interval INTEGER ); | |
CREATE TABLE users( name TEXT, password_hash TEXT, creation_ts BIGINT, admin SMALLINT DEFAULT 0 NOT NULL, UNIQUE(name) ); | |
CREATE TABLE access_tokens( id BIGINT PRIMARY KEY, user_id TEXT NOT NULL, device_id TEXT, token TEXT NOT NULL, last_used BIGINT, UNIQUE(token) ); | |
CREATE TABLE user_ips ( user_id TEXT NOT NULL, access_token TEXT NOT NULL, device_id TEXT, ip TEXT NOT NULL, user_agent TEXT NOT NULL, last_seen BIGINT NOT NULL ); | |
CREATE INDEX user_ips_user_ip ON user_ips(user_id, access_token, ip); | |
CREATE TABLE "server_keys_json" ( server_name TEXT NOT NULL, key_id TEXT NOT NULL, from_server TEXT NOT NULL, ts_added_ms BIGINT NOT NULL, ts_valid_until_ms BIGINT NOT NULL, key_json bytea NOT NULL, CONSTRAINT server_keys_json_uniqueness UNIQUE (server_name, key_id, from_server) ); | |
CREATE INDEX events_order_topo_stream_room ON events( topological_ordering, stream_ordering, room_id ); | |
CREATE TABLE "pushers" ( | |
id BIGINT PRIMARY KEY, | |
user_name TEXT NOT NULL, | |
access_token BIGINT DEFAULT NULL, | |
profile_tag VARCHAR(32) NOT NULL, | |
kind VARCHAR(8) NOT NULL, | |
app_id VARCHAR(64) NOT NULL, | |
app_display_name VARCHAR(64) NOT NULL, | |
device_display_name VARCHAR(128) NOT NULL, | |
pushkey TEXT NOT NULL, | |
ts BIGINT NOT NULL, | |
lang VARCHAR(8), | |
data TEXT, | |
last_token TEXT, | |
last_success BIGINT, | |
failing_since BIGINT, | |
UNIQUE (app_id, pushkey, user_name) | |
); | |
CREATE TABLE e2e_device_keys_json ( user_id TEXT NOT NULL, device_id TEXT NOT NULL, ts_added_ms BIGINT NOT NULL, key_json TEXT NOT NULL, CONSTRAINT e2e_device_keys_json_uniqueness UNIQUE (user_id, device_id) ); | |
CREATE TABLE e2e_one_time_keys_json ( user_id TEXT NOT NULL, device_id TEXT NOT NULL, algorithm TEXT NOT NULL, key_id TEXT NOT NULL, ts_added_ms BIGINT NOT NULL, key_json TEXT NOT NULL, CONSTRAINT e2e_one_time_keys_json_uniqueness UNIQUE (user_id, device_id, algorithm, key_id) ); | |
CREATE TABLE receipts_graph( room_id TEXT NOT NULL, receipt_type TEXT NOT NULL, user_id TEXT NOT NULL, event_ids TEXT NOT NULL, data TEXT NOT NULL, CONSTRAINT receipts_graph_uniqueness UNIQUE (room_id, receipt_type, user_id) ); | |
CREATE TABLE receipts_linearized ( stream_id BIGINT NOT NULL, room_id TEXT NOT NULL, receipt_type TEXT NOT NULL, user_id TEXT NOT NULL, event_id TEXT NOT NULL, data TEXT NOT NULL, CONSTRAINT receipts_linearized_uniqueness UNIQUE (room_id, receipt_type, user_id) ); | |
CREATE INDEX receipts_linearized_id ON receipts_linearized( stream_id ); | |
CREATE INDEX receipts_linearized_room_stream ON receipts_linearized( room_id, stream_id ); | |
CREATE TABLE "user_threepids" ( user_id TEXT NOT NULL, medium TEXT NOT NULL, address TEXT NOT NULL, validated_at BIGINT NOT NULL, added_at BIGINT NOT NULL, CONSTRAINT medium_address UNIQUE (medium, address) ); | |
CREATE INDEX user_threepids_user_id ON user_threepids(user_id); | |
CREATE TABLE refresh_tokens( id INTEGER PRIMARY KEY, token TEXT NOT NULL, user_id TEXT NOT NULL, UNIQUE (token) ); | |
CREATE TABLE stats_reporting( reported_stream_token INTEGER, reported_time BIGINT ); | |
CREATE TABLE background_updates( update_name TEXT NOT NULL, progress_json TEXT NOT NULL, CONSTRAINT background_updates_uniqueness UNIQUE (update_name) ); | |
CREATE VIRTUAL TABLE event_search USING fts4 ( event_id, room_id, sender, key, value ); | |
CREATE TABLE 'event_search_content'(docid INTEGER PRIMARY KEY, 'c0event_id', 'c1room_id', 'c2sender', 'c3key', 'c4value'); | |
CREATE TABLE 'event_search_segments'(blockid INTEGER PRIMARY KEY, block BLOB); | |
CREATE TABLE 'event_search_segdir'(level INTEGER,idx INTEGER,start_block INTEGER,leaves_end_block INTEGER,end_block INTEGER,root BLOB,PRIMARY KEY(level, idx)); | |
CREATE TABLE 'event_search_docsize'(docid INTEGER PRIMARY KEY, size BLOB); | |
CREATE TABLE 'event_search_stat'(id INTEGER PRIMARY KEY, value BLOB); | |
CREATE TABLE guest_access( event_id TEXT NOT NULL, room_id TEXT NOT NULL, guest_access TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE TABLE history_visibility( event_id TEXT NOT NULL, room_id TEXT NOT NULL, history_visibility TEXT NOT NULL, UNIQUE (event_id) ); | |
CREATE TABLE room_tags( user_id TEXT NOT NULL, room_id TEXT NOT NULL, tag TEXT NOT NULL, content TEXT NOT NULL, CONSTRAINT room_tag_uniqueness UNIQUE (user_id, room_id, tag) ); | |
CREATE TABLE room_tags_revisions ( user_id TEXT NOT NULL, room_id TEXT NOT NULL, stream_id BIGINT NOT NULL, CONSTRAINT room_tag_revisions_uniqueness UNIQUE (user_id, room_id) ); | |
CREATE TABLE "account_data_max_stream_id"( Lock CHAR(1) NOT NULL DEFAULT 'X' UNIQUE, stream_id BIGINT NOT NULL, CHECK (Lock='X') ); | |
CREATE TABLE account_data( user_id TEXT NOT NULL, account_data_type TEXT NOT NULL, stream_id BIGINT NOT NULL, content TEXT NOT NULL, CONSTRAINT account_data_uniqueness UNIQUE (user_id, account_data_type) ); | |
CREATE TABLE room_account_data( user_id TEXT NOT NULL, room_id TEXT NOT NULL, account_data_type TEXT NOT NULL, stream_id BIGINT NOT NULL, content TEXT NOT NULL, CONSTRAINT room_account_data_uniqueness UNIQUE (user_id, room_id, account_data_type) ); | |
CREATE INDEX account_data_stream_id on account_data(user_id, stream_id); | |
CREATE INDEX room_account_data_stream_id on room_account_data(user_id, stream_id); | |
CREATE INDEX events_ts ON events(origin_server_ts, stream_ordering); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment