375 lines
8.6 KiB
SQL
375 lines
8.6 KiB
SQL
/*
|
|
This file is auto-generated from the Discourse core database schema. Instead of editing it directly,
|
|
please update the `schema.yml` configuration file and re-run the `generate_schema` script to update it.
|
|
*/
|
|
|
|
CREATE TABLE badges (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
badge_type_id INTEGER NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
multiple_grant BOOLEAN NOT NULL,
|
|
query TEXT,
|
|
long_description TEXT,
|
|
image_upload_id INTEGER,
|
|
bage_group TEXT
|
|
);
|
|
|
|
CREATE TABLE categories (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
color TEXT NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
slug TEXT NOT NULL,
|
|
description TEXT,
|
|
text_color TEXT NOT NULL,
|
|
read_restricted BOOLEAN NOT NULL,
|
|
position INTEGER,
|
|
parent_category_id INTEGER,
|
|
about_topic_title TEXT,
|
|
old_relative_url TEXT,
|
|
existing_id INTEGER,
|
|
permissions JSON_TEXT,
|
|
logo_upload_id TEXT,
|
|
tag_group_ids JSON_TEXT
|
|
);
|
|
|
|
CREATE TABLE category_custom_fields (
|
|
category_id INTEGER NOT NULL,
|
|
name TEXT NOT NULL,
|
|
value TEXT,
|
|
PRIMARY KEY (category_id, name)
|
|
);
|
|
|
|
CREATE TABLE config (
|
|
name TEXT NOT NULL PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE group_members (
|
|
group_id INTEGER,
|
|
user_id INTEGER,
|
|
owner BOOLEAN,
|
|
PRIMARY KEY (group_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE groups (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
full_name TEXT,
|
|
visibility_level INTEGER NOT NULL,
|
|
messageable_level INTEGER,
|
|
mentionable_level INTEGER,
|
|
members_visibility_level INTEGER NOT NULL,
|
|
description TEXT
|
|
);
|
|
|
|
CREATE TABLE likes (
|
|
post_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
PRIMARY KEY (user_id, post_id)
|
|
);
|
|
|
|
CREATE TABLE log_entries (
|
|
created_at DATETIME NOT NULL,
|
|
type TEXT NOT NULL,
|
|
message TEXT NOT NULL,
|
|
exception TEXT,
|
|
details TEXT
|
|
);
|
|
|
|
CREATE TABLE muted_users (
|
|
user_id INTEGER NOT NULL,
|
|
muted_user_id INTEGER NOT NULL,
|
|
PRIMARY KEY (user_id, muted_user_id)
|
|
);
|
|
|
|
CREATE TABLE permalink_normalizations (
|
|
normalization TEXT NOT NULL PRIMARY KEY
|
|
);
|
|
|
|
CREATE TABLE poll_options (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
poll_id INTEGER NOT NULL,
|
|
created_at DATETIME,
|
|
text TEXT NOT NULL,
|
|
position INTEGER
|
|
);
|
|
|
|
CREATE TABLE poll_votes (
|
|
poll_option_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
created_at DATETIME,
|
|
PRIMARY KEY (poll_option_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE polls (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
post_id INTEGER,
|
|
name TEXT NOT NULL,
|
|
close_at DATETIME,
|
|
type INTEGER NOT NULL,
|
|
status INTEGER NOT NULL,
|
|
results INTEGER NOT NULL,
|
|
visibility INTEGER NOT NULL,
|
|
min INTEGER,
|
|
max INTEGER,
|
|
step INTEGER,
|
|
anonymous_voters INTEGER,
|
|
created_at DATETIME NOT NULL,
|
|
chart_type INTEGER NOT NULL,
|
|
groups TEXT,
|
|
title TEXT
|
|
);
|
|
|
|
CREATE TABLE post_custom_fields (
|
|
post_id INTEGER NOT NULL,
|
|
name TEXT NOT NULL,
|
|
value TEXT,
|
|
PRIMARY KEY (post_id, name)
|
|
);
|
|
|
|
CREATE TABLE posts (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
user_id INTEGER,
|
|
topic_id INTEGER NOT NULL,
|
|
post_number INTEGER NOT NULL,
|
|
raw TEXT NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
like_count INTEGER NOT NULL,
|
|
reply_to_post_id TEXT,
|
|
original_raw TEXT,
|
|
upload_ids JSON_TEXT,
|
|
old_relative_url TEXT,
|
|
accepted_answer BOOLEAN,
|
|
small_action TEXT,
|
|
whisper BOOLEAN,
|
|
placeholders JSON_TEXT
|
|
);
|
|
|
|
CREATE INDEX posts_by_topic_post_number ON posts (topic_id, post_number);
|
|
|
|
CREATE TABLE schema_migrations (
|
|
path TEXT NOT NULL PRIMARY KEY,
|
|
created_at DATETIME
|
|
);
|
|
|
|
CREATE TABLE site_settings (
|
|
name TEXT NOT NULL,
|
|
value TEXT,
|
|
action TEXT
|
|
);
|
|
|
|
CREATE TABLE tag_groups (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE tag_users (
|
|
tag_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
notification_level INTEGER NOT NULL,
|
|
PRIMARY KEY (tag_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE tags (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
tag_group_id INTEGER
|
|
);
|
|
|
|
CREATE TABLE topic_tags (
|
|
topic_id INTEGER NOT NULL,
|
|
tag_id INTEGER NOT NULL,
|
|
PRIMARY KEY (topic_id, tag_id)
|
|
);
|
|
|
|
CREATE TABLE topic_users (
|
|
user_id INTEGER NOT NULL,
|
|
topic_id INTEGER NOT NULL,
|
|
last_read_post_number INTEGER,
|
|
last_visited_at DATETIME,
|
|
first_visited_at DATETIME,
|
|
notification_level INTEGER NOT NULL,
|
|
notifications_changed_at DATETIME,
|
|
notifications_reason_id INTEGER,
|
|
total_msecs_viewed INTEGER NOT NULL,
|
|
PRIMARY KEY (user_id, topic_id)
|
|
);
|
|
|
|
CREATE TABLE topics (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
views INTEGER NOT NULL,
|
|
user_id INTEGER,
|
|
category_id INTEGER,
|
|
visible BOOLEAN NOT NULL,
|
|
closed BOOLEAN NOT NULL,
|
|
archived BOOLEAN NOT NULL,
|
|
pinned_at DATETIME,
|
|
subtype TEXT,
|
|
pinned_globally BOOLEAN NOT NULL,
|
|
pinned_until DATETIME,
|
|
old_relative_url TEXT,
|
|
private_message TEXT
|
|
);
|
|
|
|
CREATE TABLE uploads (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL,
|
|
filename TEXT NOT NULL,
|
|
relative_path TEXT,
|
|
type TEXT,
|
|
data BLOB
|
|
);
|
|
|
|
CREATE TABLE user_badges (
|
|
badge_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
granted_at DATETIME NOT NULL
|
|
);
|
|
|
|
CREATE TABLE user_field_values (
|
|
user_id INTEGER NOT NULL,
|
|
field_id INTEGER NOT NULL,
|
|
is_multiselect_field BOOLEAN NOT NULL,
|
|
value TEXT
|
|
);
|
|
|
|
CREATE UNIQUE INDEX user_field_values_multiselect ON user_field_values (user_id, field_id, value) WHERE is_multiselect_field = TRUE;
|
|
CREATE UNIQUE INDEX user_field_values_not_multiselect ON user_field_values (user_id, field_id) WHERE is_multiselect_field = FALSE;
|
|
|
|
CREATE TABLE user_fields (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
field_type TEXT NOT NULL,
|
|
editable BOOLEAN NOT NULL,
|
|
description TEXT NOT NULL,
|
|
required BOOLEAN NOT NULL,
|
|
show_on_profile BOOLEAN NOT NULL,
|
|
position INTEGER,
|
|
show_on_user_card BOOLEAN NOT NULL,
|
|
searchable BOOLEAN NOT NULL,
|
|
options JSON_TEXT
|
|
);
|
|
|
|
CREATE TABLE users (
|
|
id INTEGER NOT NULL PRIMARY KEY,
|
|
username TEXT NOT NULL,
|
|
created_at DATETIME,
|
|
name TEXT,
|
|
last_seen_at DATETIME,
|
|
admin BOOLEAN NOT NULL,
|
|
trust_level INTEGER,
|
|
approved BOOLEAN NOT NULL,
|
|
approved_at DATETIME,
|
|
date_of_birth DATE,
|
|
moderator BOOLEAN,
|
|
registration_ip_address TEXT,
|
|
staged BOOLEAN,
|
|
email TEXT,
|
|
avatar_path TEXT,
|
|
avatar_url TEXT,
|
|
avatar_upload_id TEXT,
|
|
bio TEXT,
|
|
password TEXT,
|
|
suspension TEXT,
|
|
location TEXT,
|
|
website TEXT,
|
|
old_relative_url TEXT,
|
|
sso_record TEXT,
|
|
anonymized BOOLEAN,
|
|
original_username TEXT,
|
|
timezone TEXT,
|
|
email_level INTEGER,
|
|
email_messages_level INTEGER,
|
|
email_digests BOOLEAN
|
|
);
|
|
|
|
|
|
/*
|
|
Core table columns implicitly excluded from the generated schema above via the `include` configuration option
|
|
in `schema.yml`. This serves as an inventory of these columns, allowing new core additions to be tracked and,
|
|
if necessary, synchronized with the intermediate database schema.
|
|
|
|
Table: groups
|
|
--------------
|
|
created_at datetime false
|
|
automatic boolean false
|
|
user_count integer false
|
|
automatic_membership_email_domains text true
|
|
primary_group boolean false
|
|
title string true
|
|
grant_trust_level integer true
|
|
incoming_email string true
|
|
has_messages boolean false
|
|
flair_bg_color string true
|
|
flair_color string true
|
|
bio_raw text true
|
|
bio_cooked text true
|
|
allow_membership_requests boolean false
|
|
default_notification_level integer false
|
|
public_exit boolean false
|
|
public_admission boolean false
|
|
membership_request_template text true
|
|
smtp_server string true
|
|
smtp_port integer true
|
|
smtp_ssl boolean true
|
|
imap_server string true
|
|
imap_port integer true
|
|
imap_ssl boolean true
|
|
imap_mailbox_name string false
|
|
imap_uid_validity integer false
|
|
imap_last_uid integer false
|
|
email_username string true
|
|
email_password string true
|
|
publish_read_state boolean false
|
|
imap_last_error text true
|
|
imap_old_emails integer true
|
|
imap_new_emails integer true
|
|
flair_icon string true
|
|
flair_upload_id integer true
|
|
allow_unknown_sender_topic_replies boolean false
|
|
smtp_enabled boolean true
|
|
smtp_updated_at datetime true
|
|
smtp_updated_by_id integer true
|
|
imap_enabled boolean true
|
|
imap_updated_at datetime true
|
|
imap_updated_by_id integer true
|
|
email_from_alias string true
|
|
|
|
Table: site_settings
|
|
---------------------
|
|
id integer false
|
|
data_type integer false
|
|
created_at datetime false
|
|
|
|
Table: tag_groups
|
|
------------------
|
|
created_at datetime false
|
|
parent_tag_id integer true
|
|
one_per_topic boolean true
|
|
|
|
Table: tags
|
|
------------
|
|
created_at datetime false
|
|
pm_topic_count integer false
|
|
target_tag_id integer true
|
|
description string true
|
|
public_topic_count integer false
|
|
staff_topic_count integer false
|
|
|
|
Table: user_badges
|
|
-------------------
|
|
id integer false
|
|
granted_by_id integer false
|
|
post_id integer true
|
|
notification_id integer true
|
|
seq integer false
|
|
featured_rank integer true
|
|
created_at datetime false
|
|
is_favorite boolean true
|
|
*/ |