schema.rb 184 KB
Newer Older
Andrew8xx8's avatar
Andrew8xx8 committed
1 2 3 4 5 6 7 8 9 10
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
11
# It's strongly recommended that you check this file into your version control system.
Andrew8xx8's avatar
Andrew8xx8 committed
12

13
ActiveRecord::Schema.define(version: 20190220150130) do
Felipe Artur's avatar
Felipe Artur committed
14

15 16
  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"
17
  enable_extension "pg_trgm"
18

Valery Sizov's avatar
Valery Sizov committed
19
  create_table "abuse_reports", force: :cascade do |t|
20 21 22
    t.integer "reporter_id"
    t.integer "user_id"
    t.text "message"
23 24
    t.datetime "created_at"
    t.datetime "updated_at"
25
    t.text "message_html"
26
    t.integer "cached_markdown_version"
27 28
  end

Valery Sizov's avatar
Valery Sizov committed
29
  create_table "appearances", force: :cascade do |t|
30 31
    t.string "title", null: false
    t.text "description", null: false
32 33
    t.string "logo"
    t.integer "updated_by"
34
    t.string "header_logo"
35 36
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
37
    t.text "description_html"
38
    t.integer "cached_markdown_version"
39 40
    t.text "new_project_guidelines"
    t.text "new_project_guidelines_html"
41 42 43 44
    t.text "header_message"
    t.text "header_message_html"
    t.text "footer_message"
    t.text "footer_message_html"
45 46
    t.text "message_background_color"
    t.text "message_font_color"
47
    t.string "favicon"
Valery Sizov's avatar
Valery Sizov committed
48 49
  end

50 51 52 53 54 55
  create_table "application_setting_terms", force: :cascade do |t|
    t.integer "cached_markdown_version"
    t.text "terms", null: false
    t.text "terms_html"
  end

Valery Sizov's avatar
Valery Sizov committed
56
  create_table "application_settings", force: :cascade do |t|
57 58 59 60
    t.integer "default_projects_limit"
    t.boolean "signup_enabled"
    t.boolean "gravatar_enabled"
    t.text "sign_in_text"
61 62
    t.datetime "created_at"
    t.datetime "updated_at"
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
    t.string "home_page_url"
    t.integer "default_branch_protection", default: 2
    t.text "help_text"
    t.text "restricted_visibility_levels"
    t.boolean "version_check_enabled", default: true
    t.integer "max_attachment_size", default: 10, null: false
    t.integer "default_project_visibility"
    t.integer "default_snippet_visibility"
    t.text "domain_whitelist"
    t.boolean "user_oauth_applications", default: true
    t.string "after_sign_out_path"
    t.integer "session_expire_delay", default: 10080, null: false
    t.text "import_sources"
    t.text "help_page_text"
    t.string "admin_notification_email"
    t.boolean "shared_runners_enabled", default: true, null: false
    t.integer "max_artifacts_size", default: 100, null: false
    t.string "runners_registration_token"
    t.integer "max_pages_size", default: 100, null: false
    t.boolean "require_two_factor_authentication", default: false
    t.integer "two_factor_grace_period", default: 48
    t.boolean "metrics_enabled", default: false
    t.string "metrics_host", default: "localhost"
    t.integer "metrics_pool_size", default: 16
    t.integer "metrics_timeout", default: 10
    t.integer "metrics_method_call_threshold", default: 10
    t.boolean "recaptcha_enabled", default: false
    t.string "recaptcha_site_key"
    t.string "recaptcha_private_key"
    t.integer "metrics_port", default: 8089
    t.boolean "akismet_enabled", default: false
    t.string "akismet_api_key"
    t.integer "metrics_sample_interval", default: 15
    t.boolean "sentry_enabled", default: false
    t.string "sentry_dsn"
    t.boolean "email_author_in_body", default: false
    t.integer "default_group_visibility"
    t.boolean "repository_checks_enabled", default: false
    t.text "shared_runners_text"
    t.integer "metrics_packet_size", default: 1
    t.text "disabled_oauth_sign_in_sources"
    t.string "health_check_access_token"
    t.boolean "send_user_confirmation_email", default: false
    t.integer "container_registry_token_expire_delay", default: 5
    t.text "after_sign_up_text"
    t.boolean "user_default_external", default: false, null: false
    t.boolean "elasticsearch_indexing", default: false, null: false
    t.boolean "elasticsearch_search", default: false, null: false
111
    t.string "repository_storages", default: "default"
112 113 114 115 116 117 118 119
    t.string "enabled_git_access_protocol"
    t.boolean "domain_blacklist_enabled", default: false
    t.text "domain_blacklist"
    t.boolean "usage_ping_enabled", default: true, null: false
    t.text "sign_in_text_html"
    t.text "help_page_text_html"
    t.text "shared_runners_text_html"
    t.text "after_sign_up_text_html"
120
    t.integer "rsa_key_restriction", default: 0, null: false
121
    t.integer "dsa_key_restriction", default: -1, null: false
122 123
    t.integer "ecdsa_key_restriction", default: 0, null: false
    t.integer "ed25519_key_restriction", default: 0, null: false
124 125 126 127 128
    t.boolean "housekeeping_enabled", default: true, null: false
    t.boolean "housekeeping_bitmaps_enabled", default: true, null: false
    t.integer "housekeeping_incremental_repack_period", default: 10, null: false
    t.integer "housekeeping_full_repack_period", default: 50, null: false
    t.integer "housekeeping_gc_period", default: 200, null: false
129
    t.boolean "html_emails_enabled", default: true
130 131
    t.string "plantuml_url"
    t.boolean "plantuml_enabled"
132
    t.integer "shared_runners_minutes", default: 0, null: false
133
    t.bigint "repository_size_limit", default: 0
134
    t.integer "terminal_max_session_time", default: 0, null: false
135 136 137
    t.integer "unique_ips_limit_per_user"
    t.integer "unique_ips_limit_time_window"
    t.boolean "unique_ips_limit_enabled", default: false, null: false
138 139 140 141 142 143
    t.string "default_artifacts_expire_in", default: "0", null: false
    t.string "elasticsearch_url", default: "http://localhost:9200"
    t.boolean "elasticsearch_aws", default: false, null: false
    t.string "elasticsearch_aws_region", default: "us-east-1"
    t.string "elasticsearch_aws_access_key"
    t.string "elasticsearch_aws_secret_access_key"
144
    t.integer "geo_status_timeout", default: 10
145
    t.string "uuid"
146
    t.decimal "polling_interval_multiplier", default: "1.0", null: false
147
    t.boolean "elasticsearch_experimental_indexer"
148
    t.integer "cached_markdown_version"
149 150
    t.boolean "clientside_sentry_enabled", default: false, null: false
    t.string "clientside_sentry_dsn"
151
    t.boolean "check_namespace_plan", default: false, null: false
152
    t.integer "mirror_max_delay", default: 300, null: false
153 154
    t.integer "mirror_max_capacity", default: 100, null: false
    t.integer "mirror_capacity_threshold", default: 50, null: false
155
    t.boolean "prometheus_metrics_enabled", default: true, null: false
156
    t.boolean "authorized_keys_enabled", default: true, null: false
157 158
    t.boolean "help_page_hide_commercial_content", default: false
    t.string "help_page_support_url"
Valery Sizov's avatar
Valery Sizov committed
159 160 161 162
    t.boolean "slack_app_enabled", default: false
    t.string "slack_app_id"
    t.string "slack_app_secret"
    t.string "slack_app_verification_token"
163
    t.integer "performance_bar_allowed_group_id"
164
    t.boolean "allow_group_owners_to_manage_ldap", default: true, null: false
165
    t.boolean "hashed_storage_enabled", default: false, null: false
166
    t.boolean "project_export_enabled", default: true, null: false
167
    t.boolean "auto_devops_enabled", default: true, null: false
168 169 170 171 172 173 174 175 176
    t.boolean "throttle_unauthenticated_enabled", default: false, null: false
    t.integer "throttle_unauthenticated_requests_per_period", default: 3600, null: false
    t.integer "throttle_unauthenticated_period_in_seconds", default: 3600, null: false
    t.boolean "throttle_authenticated_api_enabled", default: false, null: false
    t.integer "throttle_authenticated_api_requests_per_period", default: 7200, null: false
    t.integer "throttle_authenticated_api_period_in_seconds", default: 3600, null: false
    t.boolean "throttle_authenticated_web_enabled", default: false, null: false
    t.integer "throttle_authenticated_web_requests_per_period", default: 7200, null: false
    t.integer "throttle_authenticated_web_period_in_seconds", default: 3600, null: false
177 178 179
    t.integer "gitaly_timeout_default", default: 55, null: false
    t.integer "gitaly_timeout_medium", default: 30, null: false
    t.integer "gitaly_timeout_fast", default: 10, null: false
180
    t.boolean "mirror_available", default: true, null: false
181
    t.integer "default_project_creation", default: 2, null: false
182 183
    t.boolean "password_authentication_enabled_for_web"
    t.boolean "password_authentication_enabled_for_git", default: true, null: false
184
    t.string "auto_devops_domain"
185 186 187
    t.boolean "external_authorization_service_enabled", default: false, null: false
    t.string "external_authorization_service_url"
    t.string "external_authorization_service_default_label"
188
    t.boolean "pages_domain_verification_enabled", default: true, null: false
189
    t.string "user_default_internal_regex"
190
    t.boolean "allow_local_requests_from_hooks_and_services", default: false, null: false
191
    t.float "external_authorization_service_timeout", default: 0.5
192 193 194 195 196
    t.text "external_auth_client_cert"
    t.text "encrypted_external_auth_client_key"
    t.string "encrypted_external_auth_client_key_iv"
    t.string "encrypted_external_auth_client_key_pass"
    t.string "encrypted_external_auth_client_key_pass_iv"
197
    t.string "email_additional_text"
198
    t.boolean "enforce_terms", default: false
199
    t.integer "file_template_project_id"
200
    t.boolean "pseudonymizer_enabled", default: false, null: false
201
    t.boolean "hide_third_party_offers", default: false, null: false
Imre Farkas's avatar
Imre Farkas committed
202 203 204 205
    t.boolean "snowplow_enabled", default: false, null: false
    t.string "snowplow_collector_uri"
    t.string "snowplow_site_id"
    t.string "snowplow_cookie_domain"
Luke Bennett's avatar
Luke Bennett committed
206
    t.boolean "instance_statistics_visibility_private", default: false, null: false
207
    t.boolean "web_ide_clientside_preview_enabled", default: false, null: false
208
    t.boolean "user_show_add_ssh_key_message", default: true, null: false
Luke Bennett's avatar
Luke Bennett committed
209
    t.integer "custom_project_templates_group_id"
210
    t.integer "usage_stats_set_by_user_id"
211
    t.integer "receive_max_input_size"
212
    t.integer "diff_max_patch_bytes", default: 102400, null: false
213
    t.integer "archive_builds_in_seconds"
214
    t.string "commit_email_hostname"
215
    t.boolean "protected_ci_variables", default: false, null: false
216
    t.string "runners_registration_token_encrypted"
Jan Provaznik's avatar
Jan Provaznik committed
217
    t.integer "local_markdown_version", default: 0, null: false
218
    t.integer "first_day_of_week", default: 0, null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
219 220 221
    t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id", using: :btree
    t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id", using: :btree
    t.index ["usage_stats_set_by_user_id"], name: "index_application_settings_on_usage_stats_set_by_user_id", using: :btree
Valery Sizov's avatar
Valery Sizov committed
222 223
  end

224 225 226 227 228 229 230
  create_table "approval_merge_request_rule_sources", id: :bigserial, force: :cascade do |t|
    t.bigint "approval_merge_request_rule_id", null: false
    t.bigint "approval_project_rule_id", null: false
    t.index ["approval_merge_request_rule_id"], name: "index_approval_merge_request_rule_sources_1", unique: true, using: :btree
    t.index ["approval_project_rule_id"], name: "index_approval_merge_request_rule_sources_2", using: :btree
  end

231 232 233 234 235 236 237
  create_table "approval_merge_request_rules", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "merge_request_id", null: false
    t.integer "approvals_required", limit: 2, default: 0, null: false
    t.boolean "code_owner", default: false, null: false
    t.string "name", null: false
238
    t.index ["merge_request_id", "code_owner", "name"], name: "approval_rule_name_index_for_code_owners", unique: true, where: "(code_owner = true)", using: :btree
Mark Chao's avatar
Mark Chao committed
239
    t.index ["merge_request_id", "code_owner"], name: "index_approval_merge_request_rules_1", using: :btree
240 241
  end

242
  create_table "approval_merge_request_rules_approved_approvers", id: :bigserial, force: :cascade do |t|
243
    t.bigint "approval_merge_request_rule_id", null: false
244 245 246
    t.integer "user_id", null: false
    t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_approved_approvers_1", unique: true, using: :btree
    t.index ["user_id"], name: "index_approval_merge_request_rules_approved_approvers_2", using: :btree
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
  end

  create_table "approval_merge_request_rules_groups", id: :bigserial, force: :cascade do |t|
    t.bigint "approval_merge_request_rule_id", null: false
    t.integer "group_id", null: false
    t.index ["approval_merge_request_rule_id", "group_id"], name: "index_approval_merge_request_rules_groups_1", unique: true, using: :btree
    t.index ["group_id"], name: "index_approval_merge_request_rules_groups_2", using: :btree
  end

  create_table "approval_merge_request_rules_users", id: :bigserial, force: :cascade do |t|
    t.bigint "approval_merge_request_rule_id", null: false
    t.integer "user_id", null: false
    t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_users_1", unique: true, using: :btree
    t.index ["user_id"], name: "index_approval_merge_request_rules_users_2", using: :btree
  end

  create_table "approval_project_rules", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "project_id", null: false
    t.integer "approvals_required", limit: 2, default: 0, null: false
    t.string "name", null: false
    t.index ["project_id"], name: "index_approval_project_rules_on_project_id", using: :btree
  end

  create_table "approval_project_rules_groups", id: :bigserial, force: :cascade do |t|
    t.bigint "approval_project_rule_id", null: false
    t.integer "group_id", null: false
    t.index ["approval_project_rule_id", "group_id"], name: "index_approval_project_rules_groups_1", unique: true, using: :btree
    t.index ["group_id"], name: "index_approval_project_rules_groups_2", using: :btree
  end

  create_table "approval_project_rules_users", id: :bigserial, force: :cascade do |t|
    t.bigint "approval_project_rule_id", null: false
    t.integer "user_id", null: false
    t.index ["approval_project_rule_id", "user_id"], name: "index_approval_project_rules_users_1", unique: true, using: :btree
    t.index ["user_id"], name: "index_approval_project_rules_users_2", using: :btree
  end

Valery Sizov's avatar
Valery Sizov committed
286
  create_table "approvals", force: :cascade do |t|
287 288
    t.integer "merge_request_id", null: false
    t.integer "user_id", null: false
Valery Sizov's avatar
Valery Sizov committed
289 290
    t.datetime "created_at"
    t.datetime "updated_at"
291
    t.index ["merge_request_id"], name: "index_approvals_on_merge_request_id", using: :btree
292 293
  end

Valery Sizov's avatar
Valery Sizov committed
294
  create_table "approver_groups", force: :cascade do |t|
295 296 297
    t.integer "target_id", null: false
    t.string "target_type", null: false
    t.integer "group_id", null: false
Valery Sizov's avatar
Valery Sizov committed
298 299
    t.datetime "created_at"
    t.datetime "updated_at"
300 301
    t.index ["group_id"], name: "index_approver_groups_on_group_id", using: :btree
    t.index ["target_id", "target_type"], name: "index_approver_groups_on_target_id_and_target_type", using: :btree
Valery Sizov's avatar
Valery Sizov committed
302 303
  end

Valery Sizov's avatar
Valery Sizov committed
304
  create_table "approvers", force: :cascade do |t|
305 306 307
    t.integer "target_id", null: false
    t.string "target_type"
    t.integer "user_id", null: false
Valery Sizov's avatar
Valery Sizov committed
308 309
    t.datetime "created_at"
    t.datetime "updated_at"
310 311
    t.index ["target_id", "target_type"], name: "index_approvers_on_target_id_and_target_type", using: :btree
    t.index ["user_id"], name: "index_approvers_on_user_id", using: :btree
Valery Sizov's avatar
Valery Sizov committed
312 313 314
  end

  create_table "audit_events", force: :cascade do |t|
315 316 317 318 319
    t.integer "author_id", null: false
    t.string "type", null: false
    t.integer "entity_id", null: false
    t.string "entity_type", null: false
    t.text "details"
Marin Jankovski's avatar
Marin Jankovski committed
320 321
    t.datetime "created_at"
    t.datetime "updated_at"
322
    t.index ["entity_id", "entity_type"], name: "index_audit_events_on_entity_id_and_entity_type", using: :btree
Marin Jankovski's avatar
Marin Jankovski committed
323 324
  end

325
  create_table "award_emoji", force: :cascade do |t|
326 327 328 329
    t.string "name"
    t.integer "user_id"
    t.integer "awardable_id"
    t.string "awardable_type"
330 331
    t.datetime "created_at"
    t.datetime "updated_at"
332 333
    t.index ["awardable_type", "awardable_id"], name: "index_award_emoji_on_awardable_type_and_awardable_id", using: :btree
    t.index ["user_id", "name"], name: "index_award_emoji_on_user_id_and_name", using: :btree
334 335
  end

336 337 338 339 340 341 342 343
  create_table "badges", force: :cascade do |t|
    t.string "link_url", null: false
    t.string "image_url", null: false
    t.integer "project_id"
    t.integer "group_id"
    t.string "type", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
344 345
    t.index ["group_id"], name: "index_badges_on_group_id", using: :btree
    t.index ["project_id"], name: "index_badges_on_project_id", using: :btree
346 347
  end

348 349 350
  create_table "board_assignees", force: :cascade do |t|
    t.integer "board_id", null: false
    t.integer "assignee_id", null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
351
    t.index ["assignee_id"], name: "index_board_assignees_on_assignee_id", using: :btree
352
    t.index ["board_id", "assignee_id"], name: "index_board_assignees_on_board_id_and_assignee_id", unique: true, using: :btree
353 354
  end

355 356 357 358 359 360
  create_table "board_group_recent_visits", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "user_id"
    t.integer "board_id"
    t.integer "group_id"
361 362 363 364
    t.index ["board_id"], name: "index_board_group_recent_visits_on_board_id", using: :btree
    t.index ["group_id"], name: "index_board_group_recent_visits_on_group_id", using: :btree
    t.index ["user_id", "group_id", "board_id"], name: "index_board_group_recent_visits_on_user_group_and_board", unique: true, using: :btree
    t.index ["user_id"], name: "index_board_group_recent_visits_on_user_id", using: :btree
365 366
  end

367
  create_table "board_labels", force: :cascade do |t|
368
    t.integer "board_id", null: false
Oswaldo Ferreira's avatar
Oswaldo Ferreira committed
369
    t.integer "label_id", null: false
370
    t.index ["board_id", "label_id"], name: "index_board_labels_on_board_id_and_label_id", unique: true, using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
371
    t.index ["label_id"], name: "index_board_labels_on_label_id", using: :btree
Oswaldo Ferreira's avatar
Oswaldo Ferreira committed
372 373
  end

374 375 376 377 378 379
  create_table "board_project_recent_visits", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "user_id"
    t.integer "project_id"
    t.integer "board_id"
380 381 382 383
    t.index ["board_id"], name: "index_board_project_recent_visits_on_board_id", using: :btree
    t.index ["project_id"], name: "index_board_project_recent_visits_on_project_id", using: :btree
    t.index ["user_id", "project_id", "board_id"], name: "index_board_project_recent_visits_on_user_project_and_board", unique: true, using: :btree
    t.index ["user_id"], name: "index_board_project_recent_visits_on_user_id", using: :btree
384 385
  end

386
  create_table "boards", force: :cascade do |t|
387
    t.integer "project_id"
388 389
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
390
    t.string "name", default: "Development", null: false
391
    t.integer "milestone_id"
Felipe Artur's avatar
Felipe Artur committed
392
    t.integer "group_id"
393
    t.integer "weight"
394 395 396
    t.index ["group_id"], name: "index_boards_on_group_id", using: :btree
    t.index ["milestone_id"], name: "index_boards_on_milestone_id", using: :btree
    t.index ["project_id"], name: "index_boards_on_project_id", using: :btree
397 398
  end

Valery Sizov's avatar
Valery Sizov committed
399
  create_table "broadcast_messages", force: :cascade do |t|
400
    t.text "message", null: false
401 402 403 404
    t.datetime "starts_at", null: false
    t.datetime "ends_at", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
405 406
    t.string "color"
    t.string "font"
407
    t.text "message_html", null: false
408
    t.integer "cached_markdown_version"
409
    t.index ["starts_at", "ends_at", "id"], name: "index_broadcast_messages_on_starts_at_and_ends_at_and_id", using: :btree
410
  end
411

412 413 414
  create_table "chat_names", force: :cascade do |t|
    t.integer "user_id", null: false
    t.integer "service_id", null: false
415
    t.string "team_id", null: false
416
    t.string "team_domain"
417
    t.string "chat_id", null: false
418
    t.string "chat_name"
419
    t.datetime "last_used_at"
420 421
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
422 423
    t.index ["service_id", "team_id", "chat_id"], name: "index_chat_names_on_service_id_and_team_id_and_chat_id", unique: true, using: :btree
    t.index ["user_id", "service_id"], name: "index_chat_names_on_user_id_and_service_id", unique: true, using: :btree
424 425
  end

426
  create_table "chat_teams", force: :cascade do |t|
427
    t.integer "namespace_id", null: false
428 429 430 431
    t.string "team_id"
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
432
    t.index ["namespace_id"], name: "index_chat_teams_on_namespace_id", unique: true, using: :btree
433 434
  end

435 436 437 438 439
  create_table "ci_build_trace_chunks", id: :bigserial, force: :cascade do |t|
    t.integer "build_id", null: false
    t.integer "chunk_index", null: false
    t.integer "data_store", null: false
    t.binary "raw_data"
440
    t.index ["build_id", "chunk_index"], name: "index_ci_build_trace_chunks_on_build_id_and_chunk_index", unique: true, using: :btree
441 442
  end

443 444 445
  create_table "ci_build_trace_section_names", force: :cascade do |t|
    t.integer "project_id", null: false
    t.string "name", null: false
446
    t.index ["project_id", "name"], name: "index_ci_build_trace_section_names_on_project_id_and_name", unique: true, using: :btree
447 448 449
  end

  create_table "ci_build_trace_sections", force: :cascade do |t|
450
    t.integer "project_id", null: false
451 452
    t.datetime "date_start", null: false
    t.datetime "date_end", null: false
453 454
    t.bigint "byte_start", null: false
    t.bigint "byte_end", null: false
455 456
    t.integer "build_id", null: false
    t.integer "section_name_id", null: false
457 458 459
    t.index ["build_id", "section_name_id"], name: "index_ci_build_trace_sections_on_build_id_and_section_name_id", unique: true, using: :btree
    t.index ["project_id"], name: "index_ci_build_trace_sections_on_project_id", using: :btree
    t.index ["section_name_id"], name: "index_ci_build_trace_sections_on_section_name_id", using: :btree
460 461
  end

Valery Sizov's avatar
Valery Sizov committed
462
  create_table "ci_builds", force: :cascade do |t|
463
    t.string "status"
464
    t.datetime "finished_at"
465
    t.text "trace"
466 467 468
    t.datetime "created_at"
    t.datetime "updated_at"
    t.datetime "started_at"
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
    t.integer "runner_id"
    t.float "coverage"
    t.integer "commit_id"
    t.text "commands"
    t.string "name"
    t.text "options"
    t.boolean "allow_failure", default: false, null: false
    t.string "stage"
    t.integer "trigger_request_id"
    t.integer "stage_idx"
    t.boolean "tag"
    t.string "ref"
    t.integer "user_id"
    t.string "type"
    t.string "target_url"
    t.string "description"
    t.text "artifacts_file"
486
    t.integer "project_id"
487 488
    t.text "artifacts_metadata"
    t.integer "erased_by_id"
489
    t.datetime "erased_at"
490
    t.datetime "artifacts_expire_at"
491
    t.string "environment"
492
    t.bigint "artifacts_size"
493 494
    t.string "when"
    t.text "yaml_variables"
495
    t.datetime "queued_at"
496
    t.string "token"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
497
    t.integer "lock_version"
498
    t.string "coverage_regex"
499
    t.integer "auto_canceled_by_id"
500
    t.boolean "retried"
501
    t.integer "stage_id"
Rémy Coutable's avatar
Rémy Coutable committed
502 503
    t.integer "artifacts_file_store"
    t.integer "artifacts_metadata_store"
504
    t.boolean "protected"
505
    t.integer "failure_reason"
Shinya Maeda's avatar
Shinya Maeda committed
506
    t.datetime_with_timezone "scheduled_at"
507
    t.string "token_encrypted"
508 509
    t.index ["artifacts_expire_at"], name: "index_ci_builds_on_artifacts_expire_at", where: "(artifacts_file <> ''::text)", using: :btree
    t.index ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id", using: :btree
Andreas Brandl's avatar
Andreas Brandl committed
510
    t.index ["commit_id", "artifacts_expire_at", "id"], name: "index_ci_builds_on_commit_id_and_artifacts_expireatandidpartial", where: "(((type)::text = 'Ci::Build'::text) AND ((retried = false) OR (retried IS NULL)) AND ((name)::text = ANY (ARRAY[('sast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('sast:container'::character varying)::text, ('container_scanning'::character varying)::text, ('dast'::character varying)::text])))", using: :btree
511 512 513 514 515 516
    t.index ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree
    t.index ["commit_id", "status", "type"], name: "index_ci_builds_on_commit_id_and_status_and_type", using: :btree
    t.index ["commit_id", "type", "name", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_name_and_ref", using: :btree
    t.index ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref", using: :btree
    t.index ["name"], name: "index_ci_builds_on_name_for_security_products_values", where: "((name)::text = ANY (ARRAY[('container_scanning'::character varying)::text, ('dast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('license_management'::character varying)::text, ('sast'::character varying)::text]))", using: :btree
    t.index ["project_id", "id"], name: "index_ci_builds_on_project_id_and_id", using: :btree
517
    t.index ["project_id", "status"], name: "index_ci_builds_project_id_and_status_for_live_jobs_partial2", where: "(((type)::text = 'Ci::Build'::text) AND ((status)::text = ANY (ARRAY[('running'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text])))", using: :btree
518 519 520 521 522 523 524
    t.index ["protected"], name: "index_ci_builds_on_protected", using: :btree
    t.index ["runner_id"], name: "index_ci_builds_on_runner_id", using: :btree
    t.index ["scheduled_at"], name: "partial_index_ci_builds_on_scheduled_at_with_scheduled_jobs", where: "((scheduled_at IS NOT NULL) AND ((type)::text = 'Ci::Build'::text) AND ((status)::text = 'scheduled'::text))", using: :btree
    t.index ["stage_id", "stage_idx"], name: "tmp_build_stage_position_index", where: "(stage_idx IS NOT NULL)", using: :btree
    t.index ["stage_id"], name: "index_ci_builds_on_stage_id", using: :btree
    t.index ["status", "type", "runner_id"], name: "index_ci_builds_on_status_and_type_and_runner_id", using: :btree
    t.index ["token"], name: "index_ci_builds_on_token", unique: true, using: :btree
525
    t.index ["token_encrypted"], name: "index_ci_builds_on_token_encrypted", unique: true, where: "(token_encrypted IS NOT NULL)", using: :btree
526 527
    t.index ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree
    t.index ["user_id"], name: "index_ci_builds_on_user_id", using: :btree
528 529
  end

530 531 532 533 534
  create_table "ci_builds_metadata", force: :cascade do |t|
    t.integer "build_id", null: false
    t.integer "project_id", null: false
    t.integer "timeout"
    t.integer "timeout_source", default: 1, null: false
535 536
    t.jsonb "config_options"
    t.jsonb "config_variables"
537 538
    t.index ["build_id"], name: "index_ci_builds_metadata_on_build_id", unique: true, using: :btree
    t.index ["project_id"], name: "index_ci_builds_metadata_on_project_id", using: :btree
539 540
  end

541
  create_table "ci_builds_runner_session", id: :bigserial, force: :cascade do |t|
542 543 544 545
    t.integer "build_id", null: false
    t.string "url", null: false
    t.string "certificate"
    t.string "authorization"
546
    t.index ["build_id"], name: "index_ci_builds_runner_session_on_build_id", unique: true, using: :btree
547 548
  end

Shinya Maeda's avatar
fix  
Shinya Maeda committed
549
  create_table "ci_group_variables", force: :cascade do |t|
550 551 552 553 554
    t.string "key", null: false
    t.text "value"
    t.text "encrypted_value"
    t.string "encrypted_value_salt"
    t.string "encrypted_value_iv"
Shinya Maeda's avatar
fix  
Shinya Maeda committed
555 556
    t.integer "group_id", null: false
    t.boolean "protected", default: false, null: false
557 558
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
Matija Čupić's avatar
Matija Čupić committed
559
    t.boolean "masked", default: false, null: false
560
    t.index ["group_id", "key"], name: "index_ci_group_variables_on_group_id_and_key", unique: true, using: :btree
561 562
  end

563 564
  create_table "ci_job_artifacts", force: :cascade do |t|
    t.integer "project_id", null: false
565
    t.integer "job_id", null: false
566
    t.integer "file_type", null: false
567
    t.bigint "size"
568 569
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
570
    t.datetime_with_timezone "expire_at"
571
    t.string "file"
572
    t.integer "file_store"
573
    t.binary "file_sha256"
574
    t.integer "file_format", limit: 2
575
    t.integer "file_location", limit: 2
576 577 578 579
    t.index ["expire_at", "job_id"], name: "index_ci_job_artifacts_on_expire_at_and_job_id", using: :btree
    t.index ["file_store"], name: "index_ci_job_artifacts_on_file_store", using: :btree
    t.index ["job_id", "file_type"], name: "index_ci_job_artifacts_on_job_id_and_file_type", unique: true, using: :btree
    t.index ["project_id"], name: "index_ci_job_artifacts_on_project_id", using: :btree
580 581
  end

582 583 584 585
  create_table "ci_pipeline_chat_data", id: :bigserial, force: :cascade do |t|
    t.integer "pipeline_id", null: false
    t.integer "chat_name_id", null: false
    t.text "response_url", null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
586
    t.index ["chat_name_id"], name: "index_ci_pipeline_chat_data_on_chat_name_id", using: :btree
587
    t.index ["pipeline_id"], name: "index_ci_pipeline_chat_data_on_pipeline_id", unique: true, using: :btree
588 589
  end

Shinya Maeda's avatar
fix  
Shinya Maeda committed
590
  create_table "ci_pipeline_schedule_variables", force: :cascade do |t|
Shinya Maeda's avatar
Shinya Maeda committed
591 592 593 594 595
    t.string "key", null: false
    t.text "value"
    t.text "encrypted_value"
    t.string "encrypted_value_salt"
    t.string "encrypted_value_iv"
Shinya Maeda's avatar
fix  
Shinya Maeda committed
596
    t.integer "pipeline_schedule_id", null: false
597 598
    t.datetime_with_timezone "created_at"
    t.datetime_with_timezone "updated_at"
599
    t.index ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
600 601
  end

602 603 604 605 606 607 608 609 610 611 612
  create_table "ci_pipeline_schedules", force: :cascade do |t|
    t.string "description"
    t.string "ref"
    t.string "cron"
    t.string "cron_timezone"
    t.datetime "next_run_at"
    t.integer "project_id"
    t.integer "owner_id"
    t.boolean "active", default: true
    t.datetime "created_at"
    t.datetime "updated_at"
613
    t.index ["next_run_at", "active"], name: "index_ci_pipeline_schedules_on_next_run_at_and_active", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
614
    t.index ["owner_id"], name: "index_ci_pipeline_schedules_on_owner_id", using: :btree
615
    t.index ["project_id"], name: "index_ci_pipeline_schedules_on_project_id", using: :btree
616 617
  end

618 619 620 621 622 623 624
  create_table "ci_pipeline_variables", force: :cascade do |t|
    t.string "key", null: false
    t.text "value"
    t.text "encrypted_value"
    t.string "encrypted_value_salt"
    t.string "encrypted_value_iv"
    t.integer "pipeline_id", null: false
625
    t.index ["pipeline_id", "key"], name: "index_ci_pipeline_variables_on_pipeline_id_and_key", unique: true, using: :btree
626 627
  end

628
  create_table "ci_pipelines", force: :cascade do |t|
629 630 631
    t.string "ref"
    t.string "sha"
    t.string "before_sha"
632 633
    t.datetime "created_at"
    t.datetime "updated_at"
634 635
    t.boolean "tag", default: false
    t.text "yaml_errors"
636
    t.datetime "committed_at"
637
    t.integer "project_id"
638
    t.string "status"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
639 640
    t.datetime "started_at"
    t.datetime "finished_at"
641 642
    t.integer "duration"
    t.integer "user_id"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
643
    t.integer "lock_version"
644
    t.integer "auto_canceled_by_id"
645
    t.integer "pipeline_schedule_id"
646
    t.integer "source"
647
    t.integer "config_source"
648
    t.boolean "protected"
649
    t.integer "failure_reason"
Micaël Bergeron's avatar
Micaël Bergeron committed
650
    t.integer "iid"
Shinya Maeda's avatar
Shinya Maeda committed
651
    t.integer "merge_request_id"
652 653
    t.binary "source_sha"
    t.binary "target_sha"
654
    t.index ["auto_canceled_by_id"], name: "index_ci_pipelines_on_auto_canceled_by_id", using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
655
    t.index ["merge_request_id"], name: "index_ci_pipelines_on_merge_request_id", where: "(merge_request_id IS NOT NULL)", using: :btree
656 657
    t.index ["pipeline_schedule_id"], name: "index_ci_pipelines_on_pipeline_schedule_id", using: :btree
    t.index ["project_id", "iid"], name: "index_ci_pipelines_on_project_id_and_iid", unique: true, where: "(iid IS NOT NULL)", using: :btree
Andreas Brandl's avatar
Andreas Brandl committed
658
    t.index ["project_id", "ref", "id"], name: "index_ci_pipelines_on_project_idandrefandiddesc", order: { id: :desc }, using: :btree
659 660 661 662 663 664 665
    t.index ["project_id", "ref", "status", "id"], name: "index_ci_pipelines_on_project_id_and_ref_and_status_and_id", using: :btree
    t.index ["project_id", "sha"], name: "index_ci_pipelines_on_project_id_and_sha", using: :btree
    t.index ["project_id", "source"], name: "index_ci_pipelines_on_project_id_and_source", using: :btree
    t.index ["project_id", "status", "config_source"], name: "index_ci_pipelines_on_project_id_and_status_and_config_source", using: :btree
    t.index ["project_id"], name: "index_ci_pipelines_on_project_id", using: :btree
    t.index ["status"], name: "index_ci_pipelines_on_status", using: :btree
    t.index ["user_id"], name: "index_ci_pipelines_on_user_id", using: :btree
666 667
  end

668
  create_table "ci_runner_namespaces", force: :cascade do |t|
669
    t.integer "runner_id"
670
    t.integer "namespace_id"
671 672
    t.index ["namespace_id"], name: "index_ci_runner_namespaces_on_namespace_id", using: :btree
    t.index ["runner_id", "namespace_id"], name: "index_ci_runner_namespaces_on_runner_id_and_namespace_id", unique: true, using: :btree
673 674
  end

Valery Sizov's avatar
Valery Sizov committed
675
  create_table "ci_runner_projects", force: :cascade do |t|
676
    t.integer "runner_id", null: false
677 678
    t.datetime "created_at"
    t.datetime "updated_at"
679
    t.integer "project_id"
680 681
    t.index ["project_id"], name: "index_ci_runner_projects_on_project_id", using: :btree
    t.index ["runner_id"], name: "index_ci_runner_projects_on_runner_id", using: :btree
682 683
  end

Valery Sizov's avatar
Valery Sizov committed
684
  create_table "ci_runners", force: :cascade do |t|
685
    t.string "token"
686 687
    t.datetime "created_at"
    t.datetime "updated_at"
688
    t.string "description"
689
    t.datetime "contacted_at"
690 691 692 693 694 695 696 697 698
    t.boolean "active", default: true, null: false
    t.boolean "is_shared", default: false
    t.string "name"
    t.string "version"
    t.string "revision"
    t.string "platform"
    t.string "architecture"
    t.boolean "run_untagged", default: true, null: false
    t.boolean "locked", default: false, null: false
699
    t.integer "access_level", default: 0, null: false
700
    t.string "ip_address"
701
    t.integer "maximum_timeout"
702
    t.integer "runner_type", limit: 2, null: false
703
    t.string "token_encrypted"
704 705 706 707 708
    t.index ["contacted_at"], name: "index_ci_runners_on_contacted_at", using: :btree
    t.index ["is_shared"], name: "index_ci_runners_on_is_shared", using: :btree
    t.index ["locked"], name: "index_ci_runners_on_locked", using: :btree
    t.index ["runner_type"], name: "index_ci_runners_on_runner_type", using: :btree
    t.index ["token"], name: "index_ci_runners_on_token", using: :btree
709 710
  end

Kamil Trzcinski's avatar
Kamil Trzcinski committed
711 712 713 714 715 716
  create_table "ci_sources_pipelines", force: :cascade do |t|
    t.integer "project_id"
    t.integer "pipeline_id"
    t.integer "source_project_id"
    t.integer "source_job_id"
    t.integer "source_pipeline_id"
717 718 719 720 721
    t.index ["pipeline_id"], name: "index_ci_sources_pipelines_on_pipeline_id", using: :btree
    t.index ["project_id"], name: "index_ci_sources_pipelines_on_project_id", using: :btree
    t.index ["source_job_id"], name: "index_ci_sources_pipelines_on_source_job_id", using: :btree
    t.index ["source_pipeline_id"], name: "index_ci_sources_pipelines_on_source_pipeline_id", using: :btree
    t.index ["source_project_id"], name: "index_ci_sources_pipelines_on_source_project_id", using: :btree
Kamil Trzcinski's avatar
Kamil Trzcinski committed
722 723
  end

724 725 726 727 728
  create_table "ci_stages", force: :cascade do |t|
    t.integer "project_id"
    t.integer "pipeline_id"
    t.datetime "created_at"
    t.datetime "updated_at"
729
    t.string "name"
730
    t.integer "status"
731
    t.integer "lock_version"
732
    t.integer "position"
733 734 735 736
    t.index ["pipeline_id", "name"], name: "index_ci_stages_on_pipeline_id_and_name", unique: true, using: :btree
    t.index ["pipeline_id", "position"], name: "index_ci_stages_on_pipeline_id_and_position", using: :btree
    t.index ["pipeline_id"], name: "index_ci_stages_on_pipeline_id", using: :btree
    t.index ["project_id"], name: "index_ci_stages_on_project_id", using: :btree
737 738
  end

Valery Sizov's avatar
Valery Sizov committed
739
  create_table "ci_trigger_requests", force: :cascade do |t|
740 741
    t.integer "trigger_id", null: false
    t.text "variables"
742 743
    t.datetime "created_at"
    t.datetime "updated_at"
744
    t.integer "commit_id"
745
    t.index ["commit_id"], name: "index_ci_trigger_requests_on_commit_id", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
746
    t.index ["trigger_id"], name: "index_ci_trigger_requests_on_trigger_id", using: :btree
747 748
  end

Valery Sizov's avatar
Valery Sizov committed
749
  create_table "ci_triggers", force: :cascade do |t|
750
    t.string "token"
751 752
    t.datetime "created_at"
    t.datetime "updated_at"
753
    t.integer "project_id"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
754 755
    t.integer "owner_id"
    t.string "description"
Shinya Maeda's avatar
Shinya Maeda committed
756
    t.string "ref"
Kamil Trzciński's avatar
Kamil Trzciński committed
757
    t.index ["owner_id"], name: "index_ci_triggers_on_owner_id", using: :btree
758
    t.index ["project_id"], name: "index_ci_triggers_on_project_id", using: :btree
759 760
  end

Valery Sizov's avatar
Valery Sizov committed
761
  create_table "ci_variables", force: :cascade do |t|
762
    t.string "key", null: false
763 764 765 766
    t.text "value"
    t.text "encrypted_value"
    t.string "encrypted_value_salt"
    t.string "encrypted_value_iv"
767
    t.integer "project_id", null: false
768
    t.boolean "protected", default: false, null: false
769
    t.string "environment_scope", default: "*", null: false
Matija Čupić's avatar
Matija Čupić committed
770
    t.boolean "masked", default: false, null: false
771
    t.index ["project_id", "key", "environment_scope"], name: "index_ci_variables_on_project_id_and_key_and_environment_scope", unique: true, using: :btree
772 773
  end

774 775 776
  create_table "cluster_groups", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "group_id", null: false
777 778
    t.index ["cluster_id", "group_id"], name: "index_cluster_groups_on_cluster_id_and_group_id", unique: true, using: :btree
    t.index ["group_id"], name: "index_cluster_groups_on_group_id", using: :btree
779 780
  end

Shinya Maeda's avatar
Shinya Maeda committed
781 782
  create_table "cluster_platforms_kubernetes", force: :cascade do |t|
    t.integer "cluster_id", null: false
783 784
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
785
    t.text "api_url"
Shinya Maeda's avatar
Shinya Maeda committed
786 787 788 789 790 791 792
    t.text "ca_cert"
    t.string "namespace"
    t.string "username"
    t.text "encrypted_password"
    t.string "encrypted_password_iv"
    t.text "encrypted_token"
    t.string "encrypted_token_iv"
793
    t.integer "authorization_type", limit: 2
794
    t.index ["cluster_id"], name: "index_cluster_platforms_kubernetes_on_cluster_id", unique: true, using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
795 796 797 798 799
  end

  create_table "cluster_projects", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "cluster_id", null: false
800 801
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
802 803
    t.index ["cluster_id"], name: "index_cluster_projects_on_cluster_id", using: :btree
    t.index ["project_id"], name: "index_cluster_projects_on_project_id", using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
804 805 806 807 808
  end

  create_table "cluster_providers_gcp", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "status"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
809
    t.integer "num_nodes", null: false
810 811
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Shinya Maeda's avatar
Shinya Maeda committed
812 813 814 815 816 817 818 819
    t.text "status_reason"
    t.string "gcp_project_id", null: false
    t.string "zone", null: false
    t.string "machine_type"
    t.string "operation_id"
    t.string "endpoint"
    t.text "encrypted_access_token"
    t.string "encrypted_access_token_iv"
820
    t.boolean "legacy_abac", default: false, null: false
821
    t.index ["cluster_id"], name: "index_cluster_providers_gcp_on_cluster_id", unique: true, using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
822 823 824
  end

  create_table "clusters", force: :cascade do |t|
825
    t.integer "user_id"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
826 827
    t.integer "provider_type"
    t.integer "platform_type"
828 829
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
830 831
    t.boolean "enabled", default: true
    t.string "name", null: false
832
    t.string "environment_scope", default: "*", null: false
833
    t.integer "cluster_type", limit: 2, default: 3, null: false
834
    t.string "domain"
835 836
    t.index ["enabled"], name: "index_clusters_on_enabled", using: :btree
    t.index ["user_id"], name: "index_clusters_on_user_id", using: :btree
Shinya Maeda's avatar
Shinya Maeda committed
837 838
  end

839 840 841 842 843 844 845 846
  create_table "clusters_applications_cert_managers", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "status", null: false
    t.string "version", null: false
    t.string "email", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.text "status_reason"
847
    t.index ["cluster_id"], name: "index_clusters_applications_cert_managers_on_cluster_id", unique: true, using: :btree
848 849
  end

850 851
  create_table "clusters_applications_helm", force: :cascade do |t|
    t.integer "cluster_id", null: false
852 853
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
854 855 856
    t.integer "status", null: false
    t.string "version", null: false
    t.text "status_reason"
857 858 859
    t.text "encrypted_ca_key"
    t.text "encrypted_ca_key_iv"
    t.text "ca_cert"
Kamil Trzciński's avatar
Kamil Trzciński committed
860
    t.index ["cluster_id"], name: "index_clusters_applications_helm_on_cluster_id", unique: true, using: :btree
861
  end
862

Kamil Trzcinski's avatar
Kamil Trzcinski committed
863 864
  create_table "clusters_applications_ingress", force: :cascade do |t|
    t.integer "cluster_id", null: false
865 866
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
867 868 869 870 871
    t.integer "status", null: false
    t.integer "ingress_type", null: false
    t.string "version", null: false
    t.string "cluster_ip"
    t.text "status_reason"
872
    t.string "external_ip"
Kamil Trzciński's avatar
Kamil Trzciński committed
873
    t.index ["cluster_id"], name: "index_clusters_applications_ingress_on_cluster_id", unique: true, using: :btree
Kamil Trzcinski's avatar
Kamil Trzcinski committed
874 875
  end

876
  create_table "clusters_applications_jupyter", force: :cascade do |t|
877
    t.integer "cluster_id", null: false
878
    t.integer "oauth_application_id"
879 880 881 882 883
    t.integer "status", null: false
    t.string "version", null: false
    t.string "hostname"
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
884
    t.text "status_reason"
Kamil Trzciński's avatar
Kamil Trzciński committed
885 886
    t.index ["cluster_id"], name: "index_clusters_applications_jupyter_on_cluster_id", unique: true, using: :btree
    t.index ["oauth_application_id"], name: "index_clusters_applications_jupyter_on_oauth_application_id", using: :btree
887 888
  end

Chris Baumbauer's avatar
Chris Baumbauer committed
889 890 891 892 893 894
  create_table "clusters_applications_knative", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "status", null: false
    t.string "version", null: false
895
    t.string "hostname"
Chris Baumbauer's avatar
Chris Baumbauer committed
896
    t.text "status_reason"
897
    t.string "external_ip"
898
    t.index ["cluster_id"], name: "index_clusters_applications_knative_on_cluster_id", unique: true, using: :btree
Chris Baumbauer's avatar
Chris Baumbauer committed
899 900
  end

901 902 903 904 905 906 907
  create_table "clusters_applications_prometheus", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "status", null: false
    t.string "version", null: false
    t.text "status_reason"
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
908
    t.datetime_with_timezone "last_update_started_at"
909 910
    t.string "encrypted_alert_manager_token"
    t.string "encrypted_alert_manager_token_iv"
Kamil Trzciński's avatar
Kamil Trzciński committed
911
    t.index ["cluster_id"], name: "index_clusters_applications_prometheus_on_cluster_id", unique: true, using: :btree
912 913
  end

914 915 916 917 918 919 920 921
  create_table "clusters_applications_runners", force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "runner_id"
    t.integer "status", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.string "version", null: false
    t.text "status_reason"
922
    t.boolean "privileged", default: true, null: false
923 924
    t.index ["cluster_id"], name: "index_clusters_applications_runners_on_cluster_id", unique: true, using: :btree
    t.index ["runner_id"], name: "index_clusters_applications_runners_on_runner_id", using: :btree
925 926
  end

927 928 929 930 931 932 933 934 935 936
  create_table "clusters_kubernetes_namespaces", id: :bigserial, force: :cascade do |t|
    t.integer "cluster_id", null: false
    t.integer "project_id"
    t.integer "cluster_project_id"
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.text "encrypted_service_account_token"
    t.string "encrypted_service_account_token_iv"
    t.string "namespace", null: false
    t.string "service_account_name"
937 938 939 940
    t.index ["cluster_id", "namespace"], name: "kubernetes_namespaces_cluster_and_namespace", unique: true, using: :btree
    t.index ["cluster_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_id", using: :btree
    t.index ["cluster_project_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_project_id", using: :btree
    t.index ["project_id"], name: "index_clusters_kubernetes_namespaces_on_project_id", using: :btree
941 942
  end

943 944 945 946 947
  create_table "container_repositories", force: :cascade do |t|
    t.integer "project_id", null: false
    t.string "name", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
948 949
    t.index ["project_id", "name"], name: "index_container_repositories_on_project_id_and_name", unique: true, using: :btree
    t.index ["project_id"], name: "index_container_repositories_on_project_id", using: :btree
950 951
  end

952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974
  create_table "conversational_development_index_metrics", force: :cascade do |t|
    t.float "leader_issues", null: false
    t.float "instance_issues", null: false
    t.float "leader_notes", null: false
    t.float "instance_notes", null: false
    t.float "leader_milestones", null: false
    t.float "instance_milestones", null: false
    t.float "leader_boards", null: false
    t.float "instance_boards", null: false
    t.float "leader_merge_requests", null: false
    t.float "instance_merge_requests", null: false
    t.float "leader_ci_pipelines", null: false
    t.float "instance_ci_pipelines", null: false
    t.float "leader_environments", null: false
    t.float "instance_environments", null: false
    t.float "leader_deployments", null: false
    t.float "instance_deployments", null: false
    t.float "leader_projects_prometheus_active", null: false
    t.float "instance_projects_prometheus_active", null: false
    t.float "leader_service_desk_issues", null: false
    t.float "instance_service_desk_issues", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
975 976 977 978 979 980 981 982 983 984
    t.float "percentage_boards", default: 0.0, null: false
    t.float "percentage_ci_pipelines", default: 0.0, null: false
    t.float "percentage_deployments", default: 0.0, null: false
    t.float "percentage_environments", default: 0.0, null: false
    t.float "percentage_issues", default: 0.0, null: false
    t.float "percentage_merge_requests", default: 0.0, null: false
    t.float "percentage_milestones", default: 0.0, null: false
    t.float "percentage_notes", default: 0.0, null: false
    t.float "percentage_projects_prometheus_active", default: 0.0, null: false
    t.float "percentage_service_desk_issues", default: 0.0, null: false
985 986
  end

Valery Sizov's avatar
Valery Sizov committed
987
  create_table "deploy_keys_projects", force: :cascade do |t|
988 989
    t.integer "deploy_key_id", null: false
    t.integer "project_id", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
990 991
    t.datetime "created_at"
    t.datetime "updated_at"
992
    t.boolean "can_push", default: false, null: false
993
    t.index ["project_id"], name: "index_deploy_keys_projects_on_project_id", using: :btree
994
  end
995

996 997
  create_table "deploy_tokens", force: :cascade do |t|
    t.boolean "revoked", default: false
998 999
    t.boolean "read_repository", default: false, null: false
    t.boolean "read_registry", default: false, null: false
1000
    t.datetime_with_timezone "expires_at", null: false
1001
    t.datetime_with_timezone "created_at", null: false
1002 1003
    t.string "name", null: false
    t.string "token", null: false
1004 1005
    t.index ["token", "expires_at", "id"], name: "index_deploy_tokens_on_token_and_expires_at_and_id", where: "(revoked IS FALSE)", using: :btree
    t.index ["token"], name: "index_deploy_tokens_on_token", unique: true, using: :btree
1006 1007
  end

1008
  create_table "deployments", force: :cascade do |t|
1009 1010 1011 1012 1013 1014 1015 1016 1017
    t.integer "iid", null: false
    t.integer "project_id", null: false
    t.integer "environment_id", null: false
    t.string "ref", null: false
    t.boolean "tag", null: false
    t.string "sha", null: false
    t.integer "user_id"
    t.integer "deployable_id"
    t.string "deployable_type"
1018 1019
    t.datetime "created_at"
    t.datetime "updated_at"
1020
    t.string "on_stop"
1021
    t.integer "status", limit: 2, null: false
1022
    t.datetime_with_timezone "finished_at"
1023 1024 1025 1026 1027 1028 1029 1030 1031
    t.index ["created_at"], name: "index_deployments_on_created_at", using: :btree
    t.index ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id", using: :btree
    t.index ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id", using: :btree
    t.index ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id", using: :btree
    t.index ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status", using: :btree
    t.index ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))", using: :btree
    t.index ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree
    t.index ["project_id", "status", "created_at"], name: "index_deployments_on_project_id_and_status_and_created_at", using: :btree
    t.index ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree
1032 1033
  end

1034 1035 1036 1037 1038 1039 1040 1041 1042
  create_table "draft_notes", id: :bigserial, force: :cascade do |t|
    t.integer "merge_request_id", null: false
    t.integer "author_id", null: false
    t.boolean "resolve_discussion", default: false, null: false
    t.string "discussion_id"
    t.text "note", null: false
    t.text "position"
    t.text "original_position"
    t.text "change_position"
1043 1044 1045
    t.index ["author_id"], name: "index_draft_notes_on_author_id", using: :btree
    t.index ["discussion_id"], name: "index_draft_notes_on_discussion_id", using: :btree
    t.index ["merge_request_id"], name: "index_draft_notes_on_merge_request_id", using: :btree
1046 1047
  end

Valery Sizov's avatar
Valery Sizov committed
1048
  create_table "emails", force: :cascade do |t|
1049 1050
    t.integer "user_id", null: false
    t.string "email", null: false
1051 1052
    t.datetime "created_at"
    t.datetime "updated_at"
1053
    t.string "confirmation_token"
1054 1055
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
1056 1057 1058
    t.index ["confirmation_token"], name: "index_emails_on_confirmation_token", unique: true, using: :btree
    t.index ["email"], name: "index_emails_on_email", unique: true, using: :btree
    t.index ["user_id"], name: "index_emails_on_user_id", using: :btree
1059 1060
  end

1061
  create_table "environments", force: :cascade do |t|
1062
    t.integer "project_id", null: false
1063
    t.string "name", null: false
1064 1065
    t.datetime "created_at"
    t.datetime "updated_at"
1066 1067
    t.string "external_url"
    t.string "environment_type"
1068
    t.string "state", default: "available", null: false
Nick Thomas's avatar
Nick Thomas committed
1069
    t.string "slug", null: false
1070 1071 1072
    t.index ["name"], name: "index_environments_on_name_varchar_pattern_ops", using: :btree, opclasses: {"name"=>"varchar_pattern_ops"}
    t.index ["project_id", "name"], name: "index_environments_on_project_id_and_name", unique: true, using: :btree
    t.index ["project_id", "slug"], name: "index_environments_on_project_id_and_slug", unique: true, using: :btree
1073 1074
  end

1075 1076 1077
  create_table "epic_issues", force: :cascade do |t|
    t.integer "epic_id", null: false
    t.integer "issue_id", null: false
1078
    t.integer "relative_position", default: 1073741823, null: false
1079 1080
    t.index ["epic_id"], name: "index_epic_issues_on_epic_id", using: :btree
    t.index ["issue_id"], name: "index_epic_issues_on_issue_id", unique: true, using: :btree
1081 1082
  end

Clement Ho's avatar
Clement Ho committed
1083 1084
  create_table "epic_metrics", force: :cascade do |t|
    t.integer "epic_id", null: false
1085 1086
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1087
    t.index ["epic_id"], name: "index_epic_metrics", using: :btree
Clement Ho's avatar
Clement Ho committed
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101
  end

  create_table "epics", force: :cascade do |t|
    t.integer "milestone_id"
    t.integer "group_id", null: false
    t.integer "author_id", null: false
    t.integer "assignee_id"
    t.integer "iid", null: false
    t.integer "cached_markdown_version"
    t.integer "updated_by_id"
    t.integer "last_edited_by_id"
    t.integer "lock_version"
    t.date "start_date"
    t.date "end_date"
1102 1103 1104
    t.datetime "last_edited_at"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Clement Ho's avatar
Clement Ho committed
1105 1106 1107 1108
    t.string "title", null: false
    t.string "title_html", null: false
    t.text "description"
    t.text "description_html"
1109 1110
    t.integer "start_date_sourcing_milestone_id"
    t.integer "due_date_sourcing_milestone_id"
Mark Chao's avatar
Mark Chao committed
1111 1112 1113 1114
    t.date "start_date_fixed"
    t.date "due_date_fixed"
    t.boolean "start_date_is_fixed"
    t.boolean "due_date_is_fixed"
1115 1116 1117
    t.integer "state", limit: 2, default: 1, null: false
    t.integer "closed_by_id"
    t.datetime "closed_at"
Jarka Košanová's avatar
Jarka Košanová committed
1118
    t.integer "parent_id"
1119 1120 1121 1122 1123 1124 1125
    t.index ["assignee_id"], name: "index_epics_on_assignee_id", using: :btree
    t.index ["author_id"], name: "index_epics_on_author_id", using: :btree
    t.index ["closed_by_id"], name: "index_epics_on_closed_by_id", using: :btree
    t.index ["end_date"], name: "index_epics_on_end_date", using: :btree
    t.index ["group_id"], name: "index_epics_on_group_id", using: :btree
    t.index ["iid"], name: "index_epics_on_iid", using: :btree
    t.index ["milestone_id"], name: "index_milestone", using: :btree
Jarka Košanová's avatar
Jarka Košanová committed
1126
    t.index ["parent_id"], name: "index_epics_on_parent_id", using: :btree
1127
    t.index ["start_date"], name: "index_epics_on_start_date", using: :btree
Clement Ho's avatar
Clement Ho committed
1128 1129
  end

Valery Sizov's avatar
Valery Sizov committed
1130
  create_table "events", force: :cascade do |t|
1131 1132 1133
    t.integer "project_id"
    t.integer "author_id", null: false
    t.integer "target_id"
1134 1135
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
1136 1137
    t.integer "action", limit: 2, null: false
    t.string "target_type"
1138 1139
    t.index ["action"], name: "index_events_on_action", using: :btree
    t.index ["author_id", "project_id"], name: "index_events_on_author_id_and_project_id", using: :btree
1140
    t.index ["project_id", "created_at"], name: "index_events_on_project_id_and_created_at", using: :btree
1141 1142
    t.index ["project_id", "id"], name: "index_events_on_project_id_and_id", using: :btree
    t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id", using: :btree
1143 1144
  end

1145 1146 1147 1148 1149 1150
  create_table "feature_gates", force: :cascade do |t|
    t.string "feature_key", null: false
    t.string "key", null: false
    t.string "value"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1151
    t.index ["feature_key", "key", "value"], name: "index_feature_gates_on_feature_key_and_key_and_value", unique: true, using: :btree
1152 1153 1154 1155 1156 1157
  end

  create_table "features", force: :cascade do |t|
    t.string "key", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1158
    t.index ["key"], name: "index_features_on_key", unique: true, using: :btree
1159 1160
  end

1161 1162 1163 1164
  create_table "fork_network_members", force: :cascade do |t|
    t.integer "fork_network_id", null: false
    t.integer "project_id", null: false
    t.integer "forked_from_project_id"
1165
    t.index ["fork_network_id"], name: "index_fork_network_members_on_fork_network_id", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1166
    t.index ["forked_from_project_id"], name: "index_fork_network_members_on_forked_from_project_id", using: :btree
1167
    t.index ["project_id"], name: "index_fork_network_members_on_project_id", unique: true, using: :btree
1168 1169
  end

1170 1171 1172
  create_table "fork_networks", force: :cascade do |t|
    t.integer "root_project_id"
    t.string "deleted_root_project_name"
1173
    t.index ["root_project_id"], name: "index_fork_networks_on_root_project_id", unique: true, using: :btree
1174 1175
  end

Valery Sizov's avatar
Valery Sizov committed
1176
  create_table "forked_project_links", force: :cascade do |t|
1177 1178
    t.integer "forked_to_project_id", null: false
    t.integer "forked_from_project_id", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
1179 1180
    t.datetime "created_at"
    t.datetime "updated_at"
1181
    t.index ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree
1182 1183
  end

1184 1185 1186 1187
  create_table "geo_cache_invalidation_events", id: :bigserial, force: :cascade do |t|
    t.string "key", null: false
  end

1188
  create_table "geo_event_log", id: :bigserial, force: :cascade do |t|
1189
    t.datetime "created_at", null: false
1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214
    t.bigint "repository_updated_event_id"
    t.bigint "repository_deleted_event_id"
    t.bigint "repository_renamed_event_id"
    t.bigint "repositories_changed_event_id"
    t.bigint "repository_created_event_id"
    t.bigint "hashed_storage_migrated_event_id"
    t.bigint "lfs_object_deleted_event_id"
    t.bigint "hashed_storage_attachments_event_id"
    t.bigint "upload_deleted_event_id"
    t.bigint "job_artifact_deleted_event_id"
    t.bigint "reset_checksum_event_id"
    t.bigint "cache_invalidation_event_id"
    t.index ["cache_invalidation_event_id"], name: "index_geo_event_log_on_cache_invalidation_event_id", where: "(cache_invalidation_event_id IS NOT NULL)", using: :btree
    t.index ["hashed_storage_attachments_event_id"], name: "index_geo_event_log_on_hashed_storage_attachments_event_id", where: "(hashed_storage_attachments_event_id IS NOT NULL)", using: :btree
    t.index ["hashed_storage_migrated_event_id"], name: "index_geo_event_log_on_hashed_storage_migrated_event_id", where: "(hashed_storage_migrated_event_id IS NOT NULL)", using: :btree
    t.index ["job_artifact_deleted_event_id"], name: "index_geo_event_log_on_job_artifact_deleted_event_id", where: "(job_artifact_deleted_event_id IS NOT NULL)", using: :btree
    t.index ["lfs_object_deleted_event_id"], name: "index_geo_event_log_on_lfs_object_deleted_event_id", where: "(lfs_object_deleted_event_id IS NOT NULL)", using: :btree
    t.index ["repositories_changed_event_id"], name: "index_geo_event_log_on_repositories_changed_event_id", where: "(repositories_changed_event_id IS NOT NULL)", using: :btree
    t.index ["repository_created_event_id"], name: "index_geo_event_log_on_repository_created_event_id", where: "(repository_created_event_id IS NOT NULL)", using: :btree
    t.index ["repository_deleted_event_id"], name: "index_geo_event_log_on_repository_deleted_event_id", where: "(repository_deleted_event_id IS NOT NULL)", using: :btree
    t.index ["repository_renamed_event_id"], name: "index_geo_event_log_on_repository_renamed_event_id", where: "(repository_renamed_event_id IS NOT NULL)", using: :btree
    t.index ["repository_updated_event_id"], name: "index_geo_event_log_on_repository_updated_event_id", where: "(repository_updated_event_id IS NOT NULL)", using: :btree
    t.index ["reset_checksum_event_id"], name: "index_geo_event_log_on_reset_checksum_event_id", where: "(reset_checksum_event_id IS NOT NULL)", using: :btree
    t.index ["upload_deleted_event_id"], name: "index_geo_event_log_on_upload_deleted_event_id", where: "(upload_deleted_event_id IS NOT NULL)", using: :btree
  end
1215

1216 1217 1218 1219
  create_table "geo_hashed_storage_attachments_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.text "old_attachments_path", null: false
    t.text "new_attachments_path", null: false
1220
    t.index ["project_id"], name: "index_geo_hashed_storage_attachments_events_on_project_id", using: :btree
1221 1222
  end

1223 1224 1225 1226 1227 1228 1229 1230 1231
  create_table "geo_hashed_storage_migrated_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.text "repository_storage_name", null: false
    t.text "old_disk_path", null: false
    t.text "new_disk_path", null: false
    t.text "old_wiki_disk_path", null: false
    t.text "new_wiki_disk_path", null: false
    t.integer "old_storage_version", limit: 2
    t.integer "new_storage_version", limit: 2, null: false
1232
    t.index ["project_id"], name: "index_geo_hashed_storage_migrated_events_on_project_id", using: :btree
1233 1234
  end

1235 1236 1237
  create_table "geo_job_artifact_deleted_events", id: :bigserial, force: :cascade do |t|
    t.integer "job_artifact_id", null: false
    t.string "file_path", null: false
1238
    t.index ["job_artifact_id"], name: "index_geo_job_artifact_deleted_events_on_job_artifact_id", using: :btree
1239 1240
  end

1241 1242 1243 1244
  create_table "geo_lfs_object_deleted_events", id: :bigserial, force: :cascade do |t|
    t.integer "lfs_object_id", null: false
    t.string "oid", null: false
    t.string "file_path", null: false
1245
    t.index ["lfs_object_id"], name: "index_geo_lfs_object_deleted_events_on_lfs_object_id", using: :btree
1246 1247
  end

1248
  create_table "geo_node_namespace_links", force: :cascade do |t|
1249
    t.integer "geo_node_id", null: false
1250
    t.integer "namespace_id", null: false
1251 1252
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1253 1254
    t.index ["geo_node_id", "namespace_id"], name: "index_geo_node_namespace_links_on_geo_node_id_and_namespace_id", unique: true, using: :btree
    t.index ["geo_node_id"], name: "index_geo_node_namespace_links_on_geo_node_id", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1255
    t.index ["namespace_id"], name: "index_geo_node_namespace_links_on_namespace_id", using: :btree
1256 1257
  end

1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269
  create_table "geo_node_statuses", force: :cascade do |t|
    t.integer "geo_node_id", null: false
    t.integer "db_replication_lag_seconds"
    t.integer "repositories_synced_count"
    t.integer "repositories_failed_count"
    t.integer "lfs_objects_count"
    t.integer "lfs_objects_synced_count"
    t.integer "lfs_objects_failed_count"
    t.integer "attachments_count"
    t.integer "attachments_synced_count"
    t.integer "attachments_failed_count"
    t.integer "last_event_id"
1270
    t.datetime "last_event_date"
1271
    t.integer "cursor_last_event_id"
1272 1273 1274 1275
    t.datetime "cursor_last_event_date"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.datetime "last_successful_status_check_at"
1276
    t.string "status_message"
1277 1278
    t.integer "replication_slots_count"
    t.integer "replication_slots_used_count"
1279
    t.bigint "replication_slots_max_retained_wal_bytes"
1280 1281
    t.integer "wikis_synced_count"
    t.integer "wikis_failed_count"
1282 1283 1284
    t.integer "job_artifacts_count"
    t.integer "job_artifacts_synced_count"
    t.integer "job_artifacts_failed_count"
1285 1286
    t.string "version"
    t.string "revision"
1287 1288 1289 1290
    t.integer "repositories_verified_count"
    t.integer "repositories_verification_failed_count"
    t.integer "wikis_verified_count"
    t.integer "wikis_verification_failed_count"
1291 1292 1293
    t.integer "lfs_objects_synced_missing_on_primary_count"
    t.integer "job_artifacts_synced_missing_on_primary_count"
    t.integer "attachments_synced_missing_on_primary_count"
1294 1295 1296 1297 1298 1299
    t.integer "repositories_checksummed_count"
    t.integer "repositories_checksum_failed_count"
    t.integer "repositories_checksum_mismatch_count"
    t.integer "wikis_checksummed_count"
    t.integer "wikis_checksum_failed_count"
    t.integer "wikis_checksum_mismatch_count"
1300
    t.binary "storage_configuration_digest"
1301 1302
    t.integer "repositories_retrying_verification_count"
    t.integer "wikis_retrying_verification_count"
1303
    t.integer "projects_count"
1304
    t.index ["geo_node_id"], name: "index_geo_node_statuses_on_geo_node_id", unique: true, using: :btree
1305 1306
  end

1307 1308
  create_table "geo_nodes", force: :cascade do |t|
    t.boolean "primary"
1309
    t.integer "oauth_application_id"
1310
    t.boolean "enabled", default: true, null: false
1311 1312 1313
    t.string "access_key"
    t.string "encrypted_secret_access_key"
    t.string "encrypted_secret_access_key_iv"
1314
    t.string "clone_url_prefix"
1315 1316
    t.integer "files_max_capacity", default: 10, null: false
    t.integer "repos_max_capacity", default: 25, null: false
1317
    t.string "url", null: false
1318 1319
    t.string "selective_sync_type"
    t.text "selective_sync_shards"
1320
    t.integer "verification_max_capacity", default: 100, null: false
1321
    t.integer "minimum_reverification_interval", default: 7, null: false
1322 1323 1324
    t.index ["access_key"], name: "index_geo_nodes_on_access_key", using: :btree
    t.index ["primary"], name: "index_geo_nodes_on_primary", using: :btree
    t.index ["url"], name: "index_geo_nodes_on_url", unique: true, using: :btree
1325 1326
  end

1327 1328
  create_table "geo_repositories_changed_events", id: :bigserial, force: :cascade do |t|
    t.integer "geo_node_id", null: false
1329
    t.index ["geo_node_id"], name: "index_geo_repositories_changed_events_on_geo_node_id", using: :btree
1330 1331
  end

1332 1333 1334 1335 1336 1337
  create_table "geo_repository_created_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.text "repository_storage_name", null: false
    t.text "repo_path", null: false
    t.text "wiki_path"
    t.text "project_name", null: false
1338
    t.index ["project_id"], name: "index_geo_repository_created_events_on_project_id", using: :btree
1339 1340
  end

Stan Hu's avatar
Stan Hu committed
1341 1342
  create_table "geo_repository_deleted_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
1343
    t.text "repository_storage_name", null: false
Stan Hu's avatar
Stan Hu committed
1344 1345 1346
    t.text "deleted_path", null: false
    t.text "deleted_wiki_path"
    t.text "deleted_project_name", null: false
1347
    t.index ["project_id"], name: "index_geo_repository_deleted_events_on_project_id", using: :btree
Stan Hu's avatar
Stan Hu committed
1348 1349
  end

1350 1351 1352
  create_table "geo_repository_renamed_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.text "repository_storage_name", null: false
1353 1354
    t.text "old_path_with_namespace", null: false
    t.text "new_path_with_namespace", null: false
1355 1356
    t.text "old_wiki_path_with_namespace", null: false
    t.text "new_wiki_path_with_namespace", null: false
1357 1358
    t.text "old_path", null: false
    t.text "new_path", null: false
1359
    t.index ["project_id"], name: "index_geo_repository_renamed_events_on_project_id", using: :btree
1360 1361
  end

1362
  create_table "geo_repository_updated_events", id: :bigserial, force: :cascade do |t|
1363 1364
    t.integer "branches_affected", null: false
    t.integer "tags_affected", null: false
1365
    t.integer "project_id", null: false
1366
    t.integer "source", limit: 2, null: false
1367 1368
    t.boolean "new_branch", default: false, null: false
    t.boolean "remove_branch", default: false, null: false
1369
    t.text "ref"
1370 1371
    t.index ["project_id"], name: "index_geo_repository_updated_events_on_project_id", using: :btree
    t.index ["source"], name: "index_geo_repository_updated_events_on_source", using: :btree
1372 1373
  end

1374 1375
  create_table "geo_reset_checksum_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
1376
    t.index ["project_id"], name: "index_geo_reset_checksum_events_on_project_id", using: :btree
1377 1378
  end

1379 1380 1381 1382 1383 1384
  create_table "geo_upload_deleted_events", id: :bigserial, force: :cascade do |t|
    t.integer "upload_id", null: false
    t.string "file_path", null: false
    t.integer "model_id", null: false
    t.string "model_type", null: false
    t.string "uploader", null: false
1385
    t.index ["upload_id"], name: "index_geo_upload_deleted_events_on_upload_id", using: :btree
1386 1387
  end

1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402
  create_table "gitlab_subscriptions", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.date "start_date"
    t.date "end_date"
    t.date "trial_ends_on"
    t.integer "namespace_id"
    t.integer "hosted_plan_id"
    t.integer "max_seats_used", default: 0
    t.integer "seats", default: 0
    t.boolean "trial", default: false
    t.index ["hosted_plan_id"], name: "index_gitlab_subscriptions_on_hosted_plan_id", using: :btree
    t.index ["namespace_id"], name: "index_gitlab_subscriptions_on_namespace_id", unique: true, using: :btree
  end

1403
  create_table "gpg_key_subkeys", force: :cascade do |t|
1404
    t.integer "gpg_key_id", null: false
1405 1406
    t.binary "keyid"
    t.binary "fingerprint"
1407 1408 1409
    t.index ["fingerprint"], name: "index_gpg_key_subkeys_on_fingerprint", unique: true, using: :btree
    t.index ["gpg_key_id"], name: "index_gpg_key_subkeys_on_gpg_key_id", using: :btree
    t.index ["keyid"], name: "index_gpg_key_subkeys_on_keyid", unique: true, using: :btree
1410 1411
  end

Alexis Reigel's avatar
Alexis Reigel committed
1412
  create_table "gpg_keys", force: :cascade do |t|
1413 1414
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
1415
    t.integer "user_id"
1416 1417
    t.binary "primary_keyid"
    t.binary "fingerprint"
1418
    t.text "key"
1419 1420 1421
    t.index ["fingerprint"], name: "index_gpg_keys_on_fingerprint", unique: true, using: :btree
    t.index ["primary_keyid"], name: "index_gpg_keys_on_primary_keyid", unique: true, using: :btree
    t.index ["user_id"], name: "index_gpg_keys_on_user_id", using: :btree
Alexis Reigel's avatar
Alexis Reigel committed
1422 1423
  end

1424
  create_table "gpg_signatures", force: :cascade do |t|
1425 1426
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
1427 1428
    t.integer "project_id"
    t.integer "gpg_key_id"
1429 1430
    t.binary "commit_sha"
    t.binary "gpg_key_primary_keyid"
1431 1432
    t.text "gpg_key_user_name"
    t.text "gpg_key_user_email"
1433
    t.integer "verification_status", limit: 2, default: 0, null: false
1434
    t.integer "gpg_key_subkey_id"
1435 1436 1437 1438 1439
    t.index ["commit_sha"], name: "index_gpg_signatures_on_commit_sha", unique: true, using: :btree
    t.index ["gpg_key_id"], name: "index_gpg_signatures_on_gpg_key_id", using: :btree
    t.index ["gpg_key_primary_keyid"], name: "index_gpg_signatures_on_gpg_key_primary_keyid", using: :btree
    t.index ["gpg_key_subkey_id"], name: "index_gpg_signatures_on_gpg_key_subkey_id", using: :btree
    t.index ["project_id"], name: "index_gpg_signatures_on_project_id", using: :btree
1440 1441
  end

1442
  create_table "group_custom_attributes", force: :cascade do |t|
1443 1444
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
1445 1446 1447
    t.integer "group_id", null: false
    t.string "key", null: false
    t.string "value", null: false
1448 1449
    t.index ["group_id", "key"], name: "index_group_custom_attributes_on_group_id_and_key", unique: true, using: :btree
    t.index ["key", "value"], name: "index_group_custom_attributes_on_key_and_value", using: :btree
1450 1451
  end

1452 1453 1454 1455 1456 1457 1458
  create_table "historical_data", force: :cascade do |t|
    t.date "date", null: false
    t.integer "active_user_count"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Valery Sizov's avatar
Valery Sizov committed
1459
  create_table "identities", force: :cascade do |t|
1460 1461 1462
    t.string "extern_uid"
    t.string "provider"
    t.integer "user_id"
1463 1464
    t.datetime "created_at"
    t.datetime "updated_at"
1465
    t.string "secondary_extern_uid"
1466
    t.integer "saml_provider_id"
1467 1468
    t.index ["saml_provider_id"], name: "index_identities_on_saml_provider_id", where: "(saml_provider_id IS NOT NULL)", using: :btree
    t.index ["user_id"], name: "index_identities_on_user_id", using: :btree
1469 1470
  end

1471 1472 1473 1474 1475
  create_table "import_export_uploads", force: :cascade do |t|
    t.datetime_with_timezone "updated_at", null: false
    t.integer "project_id"
    t.text "import_file"
    t.text "export_file"
1476 1477
    t.index ["project_id"], name: "index_import_export_uploads_on_project_id", using: :btree
    t.index ["updated_at"], name: "index_import_export_uploads_on_updated_at", using: :btree
1478 1479
  end

Valery Sizov's avatar
Valery Sizov committed
1480
  create_table "index_statuses", force: :cascade do |t|
1481
    t.integer "project_id", null: false
Valery Sizov's avatar
Valery Sizov committed
1482
    t.datetime "indexed_at"
1483 1484 1485 1486
    t.text "note"
    t.string "last_commit"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1487
    t.index ["project_id"], name: "index_index_statuses_on_project_id", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
1488 1489
  end

1490
  create_table "internal_ids", id: :bigserial, force: :cascade do |t|
1491
    t.integer "project_id"
1492 1493
    t.integer "usage", null: false
    t.integer "last_value", null: false
1494
    t.integer "namespace_id"
Kamil Trzciński's avatar
Kamil Trzciński committed
1495 1496
    t.index ["namespace_id"], name: "index_internal_ids_on_namespace_id", using: :btree
    t.index ["project_id"], name: "index_internal_ids_on_project_id", using: :btree
1497 1498
    t.index ["usage", "namespace_id"], name: "index_internal_ids_on_usage_and_namespace_id", unique: true, where: "(namespace_id IS NOT NULL)", using: :btree
    t.index ["usage", "project_id"], name: "index_internal_ids_on_usage_and_project_id", unique: true, where: "(project_id IS NOT NULL)", using: :btree
1499 1500
  end

1501
  create_table "issue_assignees", id: false, force: :cascade do |t|
1502 1503
    t.integer "user_id", null: false
    t.integer "issue_id", null: false
1504 1505
    t.index ["issue_id", "user_id"], name: "index_issue_assignees_on_issue_id_and_user_id", unique: true, using: :btree
    t.index ["user_id"], name: "index_issue_assignees_on_user_id", using: :btree
1506 1507
  end

1508 1509 1510 1511 1512
  create_table "issue_links", force: :cascade do |t|
    t.integer "source_id", null: false
    t.integer "target_id", null: false
    t.datetime "created_at"
    t.datetime "updated_at"
1513 1514 1515
    t.index ["source_id", "target_id"], name: "index_issue_links_on_source_id_and_target_id", unique: true, using: :btree
    t.index ["source_id"], name: "index_issue_links_on_source_id", using: :btree
    t.index ["target_id"], name: "index_issue_links_on_target_id", using: :btree
1516 1517
  end

1518
  create_table "issue_metrics", force: :cascade do |t|
1519
    t.integer "issue_id", null: false
1520
    t.datetime "first_mentioned_in_commit_at"
1521 1522
    t.datetime "first_associated_with_milestone_at"
    t.datetime "first_added_to_board_at"
1523 1524
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1525
    t.index ["issue_id"], name: "index_issue_metrics", using: :btree
1526 1527
  end

Valery Sizov's avatar
Valery Sizov committed
1528
  create_table "issues", force: :cascade do |t|
1529 1530 1531
    t.string "title"
    t.integer "author_id"
    t.integer "project_id"
1532 1533
    t.datetime "created_at"
    t.datetime "updated_at"
1534 1535 1536 1537 1538 1539
    t.text "description"
    t.integer "milestone_id"
    t.string "state"
    t.integer "iid"
    t.integer "updated_by_id"
    t.integer "weight"
1540
    t.boolean "confidential", default: false, null: false
1541 1542 1543 1544 1545
    t.date "due_date"
    t.integer "moved_to_id"
    t.integer "lock_version"
    t.text "title_html"
    t.text "description_html"
1546
    t.integer "time_estimate"
1547
    t.integer "relative_position"
1548
    t.string "service_desk_reply_to"
1549
    t.integer "cached_markdown_version"
1550 1551
    t.datetime "last_edited_at"
    t.integer "last_edited_by_id"
1552
    t.boolean "discussion_locked"
1553
    t.datetime_with_timezone "closed_at"
haseeb's avatar
haseeb committed
1554
    t.integer "closed_by_id"
1555
    t.index ["author_id"], name: "index_issues_on_author_id", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1556
    t.index ["closed_by_id"], name: "index_issues_on_closed_by_id", using: :btree
1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569
    t.index ["confidential"], name: "index_issues_on_confidential", using: :btree
    t.index ["description"], name: "index_issues_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
    t.index ["milestone_id"], name: "index_issues_on_milestone_id", using: :btree
    t.index ["moved_to_id"], name: "index_issues_on_moved_to_id", where: "(moved_to_id IS NOT NULL)", using: :btree
    t.index ["project_id", "created_at", "id", "state"], name: "index_issues_on_project_id_and_created_at_and_id_and_state", using: :btree
    t.index ["project_id", "due_date", "id", "state"], name: "idx_issues_on_project_id_and_due_date_and_id_and_state_partial", where: "(due_date IS NOT NULL)", using: :btree
    t.index ["project_id", "iid"], name: "index_issues_on_project_id_and_iid", unique: true, using: :btree
    t.index ["project_id", "updated_at", "id", "state"], name: "index_issues_on_project_id_and_updated_at_and_id_and_state", using: :btree
    t.index ["relative_position"], name: "index_issues_on_relative_position", using: :btree
    t.index ["state"], name: "index_issues_on_state", using: :btree
    t.index ["title"], name: "index_issues_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
    t.index ["updated_at"], name: "index_issues_on_updated_at", using: :btree
    t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
1570 1571
  end

Valery Sizov's avatar
Valery Sizov committed
1572
  create_table "keys", force: :cascade do |t|
1573
    t.integer "user_id"
1574 1575
    t.datetime "created_at"
    t.datetime "updated_at"
1576 1577 1578 1579 1580
    t.text "key"
    t.string "title"
    t.string "type"
    t.string "fingerprint"
    t.boolean "public", default: false, null: false
1581
    t.datetime "last_used_at"
1582 1583
    t.index ["fingerprint"], name: "index_keys_on_fingerprint", unique: true, using: :btree
    t.index ["user_id"], name: "index_keys_on_user_id", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
1584 1585
  end

Valery Sizov's avatar
Valery Sizov committed
1586
  create_table "label_links", force: :cascade do |t|
1587 1588 1589
    t.integer "label_id"
    t.integer "target_id"
    t.string "target_type"
1590 1591
    t.datetime "created_at"
    t.datetime "updated_at"
1592 1593
    t.index ["label_id"], name: "index_label_links_on_label_id", using: :btree
    t.index ["target_id", "target_type"], name: "index_label_links_on_target_id_and_target_type", using: :btree
1594 1595
  end

1596 1597 1598 1599 1600 1601
  create_table "label_priorities", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "label_id", null: false
    t.integer "priority", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
1602
    t.index ["label_id"], name: "index_label_priorities_on_label_id", using: :btree
1603 1604
    t.index ["priority"], name: "index_label_priorities_on_priority", using: :btree
    t.index ["project_id", "label_id"], name: "index_label_priorities_on_project_id_and_label_id", unique: true, using: :btree
1605 1606
  end

Valery Sizov's avatar
Valery Sizov committed
1607
  create_table "labels", force: :cascade do |t|
1608 1609 1610
    t.string "title"
    t.string "color"
    t.integer "project_id"
1611 1612
    t.datetime "created_at"
    t.datetime "updated_at"
1613 1614 1615
    t.boolean "template", default: false
    t.string "description"
    t.text "description_html"
1616 1617
    t.string "type"
    t.integer "group_id"
1618
    t.integer "cached_markdown_version"
1619 1620 1621 1622 1623
    t.index ["group_id", "project_id", "title"], name: "index_labels_on_group_id_and_project_id_and_title", unique: true, using: :btree
    t.index ["project_id"], name: "index_labels_on_project_id", using: :btree
    t.index ["template"], name: "index_labels_on_template", where: "template", using: :btree
    t.index ["title"], name: "index_labels_on_title", using: :btree
    t.index ["type", "project_id"], name: "index_labels_on_type_and_project_id", using: :btree
1624 1625
  end

Valery Sizov's avatar
Valery Sizov committed
1626
  create_table "ldap_group_links", force: :cascade do |t|
1627
    t.string "cn"
1628 1629
    t.integer "group_access", null: false
    t.integer "group_id", null: false
Valery Sizov's avatar
Valery Sizov committed
1630 1631
    t.datetime "created_at"
    t.datetime "updated_at"
1632
    t.string "provider"
1633
    t.string "filter"
Valery Sizov's avatar
Valery Sizov committed
1634 1635
  end

1636 1637 1638 1639
  create_table "lfs_file_locks", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "user_id", null: false
    t.datetime "created_at", null: false
1640
    t.string "path", limit: 511
1641 1642
    t.index ["project_id", "path"], name: "index_lfs_file_locks_on_project_id_and_path", unique: true, using: :btree
    t.index ["user_id"], name: "index_lfs_file_locks_on_user_id", using: :btree
1643 1644
  end

Valery Sizov's avatar
Valery Sizov committed
1645
  create_table "lfs_objects", force: :cascade do |t|
1646
    t.string "oid", null: false
1647
    t.bigint "size", null: false
Marin Jankovski's avatar
Marin Jankovski committed
1648 1649
    t.datetime "created_at"
    t.datetime "updated_at"
1650
    t.string "file"
1651
    t.integer "file_store"
1652 1653
    t.index ["file_store"], name: "index_lfs_objects_on_file_store", using: :btree
    t.index ["oid"], name: "index_lfs_objects_on_oid", unique: true, using: :btree
Marin Jankovski's avatar
Marin Jankovski committed
1654 1655
  end

Valery Sizov's avatar
Valery Sizov committed
1656
  create_table "lfs_objects_projects", force: :cascade do |t|
1657 1658
    t.integer "lfs_object_id", null: false
    t.integer "project_id", null: false
Marin Jankovski's avatar
Marin Jankovski committed
1659 1660
    t.datetime "created_at"
    t.datetime "updated_at"
1661
    t.index ["project_id"], name: "index_lfs_objects_projects_on_project_id", using: :btree
Marin Jankovski's avatar
Marin Jankovski committed
1662 1663
  end

Valery Sizov's avatar
Valery Sizov committed
1664
  create_table "licenses", force: :cascade do |t|
1665
    t.text "data", null: false
Valery Sizov's avatar
Valery Sizov committed
1666 1667 1668 1669
    t.datetime "created_at"
    t.datetime "updated_at"
  end

1670
  create_table "lists", force: :cascade do |t|
1671 1672 1673 1674 1675 1676
    t.integer "board_id", null: false
    t.integer "label_id"
    t.integer "list_type", default: 1, null: false
    t.integer "position"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1677
    t.integer "user_id"
1678
    t.integer "milestone_id"
1679 1680 1681 1682 1683
    t.index ["board_id", "label_id"], name: "index_lists_on_board_id_and_label_id", unique: true, using: :btree
    t.index ["label_id"], name: "index_lists_on_label_id", using: :btree
    t.index ["list_type"], name: "index_lists_on_list_type", using: :btree
    t.index ["milestone_id"], name: "index_lists_on_milestone_id", using: :btree
    t.index ["user_id"], name: "index_lists_on_user_id", using: :btree
1684 1685
  end

Valery Sizov's avatar
Valery Sizov committed
1686
  create_table "members", force: :cascade do |t|
1687 1688 1689 1690 1691 1692
    t.integer "access_level", null: false
    t.integer "source_id", null: false
    t.string "source_type", null: false
    t.integer "user_id"
    t.integer "notification_level", null: false
    t.string "type"
1693 1694
    t.datetime "created_at"
    t.datetime "updated_at"
1695 1696 1697
    t.integer "created_by_id"
    t.string "invite_email"
    t.string "invite_token"
Douwe Maan's avatar
Douwe Maan committed
1698
    t.datetime "invite_accepted_at"
1699
    t.datetime "requested_at"
1700 1701 1702
    t.date "expires_at"
    t.boolean "ldap", default: false, null: false
    t.boolean "override", default: false, null: false
1703 1704 1705 1706 1707
    t.index ["access_level"], name: "index_members_on_access_level", using: :btree
    t.index ["invite_token"], name: "index_members_on_invite_token", unique: true, using: :btree
    t.index ["requested_at"], name: "index_members_on_requested_at", using: :btree
    t.index ["source_id", "source_type"], name: "index_members_on_source_id_and_source_type", using: :btree
    t.index ["user_id"], name: "index_members_on_user_id", using: :btree
1708 1709
  end

1710
  create_table "merge_request_diff_commits", id: false, force: :cascade do |t|
1711 1712
    t.datetime "authored_date"
    t.datetime "committed_date"
1713 1714 1715 1716 1717 1718 1719 1720
    t.integer "merge_request_diff_id", null: false
    t.integer "relative_order", null: false
    t.binary "sha", null: false
    t.text "author_name"
    t.text "author_email"
    t.text "committer_name"
    t.text "committer_email"
    t.text "message"
1721 1722
    t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_commits_on_mr_diff_id_and_order", unique: true, using: :btree
    t.index ["sha"], name: "index_merge_request_diff_commits_on_sha", using: :btree
1723 1724
  end

1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735
  create_table "merge_request_diff_files", id: false, force: :cascade do |t|
    t.integer "merge_request_diff_id", null: false
    t.integer "relative_order", null: false
    t.boolean "new_file", null: false
    t.boolean "renamed_file", null: false
    t.boolean "deleted_file", null: false
    t.boolean "too_large", null: false
    t.string "a_mode", null: false
    t.string "b_mode", null: false
    t.text "new_path", null: false
    t.text "old_path", null: false
1736
    t.text "diff"
1737
    t.boolean "binary"
1738 1739
    t.integer "external_diff_offset"
    t.integer "external_diff_size"
1740
    t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_files_on_mr_diff_id_and_order", unique: true, using: :btree
1741 1742
  end

Valery Sizov's avatar
Valery Sizov committed
1743
  create_table "merge_request_diffs", force: :cascade do |t|
1744 1745
    t.string "state"
    t.integer "merge_request_id", null: false
1746 1747
    t.datetime "created_at"
    t.datetime "updated_at"
1748 1749 1750 1751
    t.string "base_commit_sha"
    t.string "real_size"
    t.string "head_commit_sha"
    t.string "start_commit_sha"
1752
    t.integer "commits_count"
1753 1754 1755
    t.string "external_diff"
    t.integer "external_diff_store"
    t.boolean "stored_externally"
1756
    t.index ["merge_request_id", "id"], name: "index_merge_request_diffs_on_merge_request_id_and_id", using: :btree
1757 1758
  end

1759
  create_table "merge_request_metrics", force: :cascade do |t|
1760
    t.integer "merge_request_id", null: false
1761 1762 1763 1764
    t.datetime "latest_build_started_at"
    t.datetime "latest_build_finished_at"
    t.datetime "first_deployed_to_production_at"
    t.datetime "merged_at"
1765 1766
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1767
    t.integer "pipeline_id"
1768 1769 1770
    t.integer "merged_by_id"
    t.integer "latest_closed_by_id"
    t.datetime_with_timezone "latest_closed_at"
1771
    t.index ["first_deployed_to_production_at"], name: "index_merge_request_metrics_on_first_deployed_to_production_at", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1772
    t.index ["latest_closed_by_id"], name: "index_merge_request_metrics_on_latest_closed_by_id", using: :btree
1773
    t.index ["merge_request_id"], name: "index_merge_request_metrics", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1774
    t.index ["merged_by_id"], name: "index_merge_request_metrics_on_merged_by_id", using: :btree
1775
    t.index ["pipeline_id"], name: "index_merge_request_metrics_on_pipeline_id", using: :btree
1776 1777
  end

Valery Sizov's avatar
Valery Sizov committed
1778
  create_table "merge_requests", force: :cascade do |t|
1779 1780
    t.string "target_branch", null: false
    t.string "source_branch", null: false
1781
    t.integer "source_project_id"
1782 1783 1784
    t.integer "author_id"
    t.integer "assignee_id"
    t.string "title"
1785 1786
    t.datetime "created_at"
    t.datetime "updated_at"
1787
    t.integer "milestone_id"
1788 1789
    t.string "state", default: "opened", null: false
    t.string "merge_status", default: "unchecked", null: false
1790 1791 1792 1793 1794 1795
    t.integer "target_project_id", null: false
    t.integer "iid"
    t.text "description"
    t.integer "updated_by_id"
    t.text "merge_error"
    t.text "merge_params"
1796
    t.boolean "merge_when_pipeline_succeeds", default: false, null: false
1797 1798 1799 1800 1801 1802 1803 1804
    t.integer "merge_user_id"
    t.string "merge_commit_sha"
    t.integer "approvals_before_merge"
    t.string "rebase_commit_sha"
    t.string "in_progress_merge_commit_sha"
    t.integer "lock_version"
    t.text "title_html"
    t.text "description_html"
1805
    t.integer "time_estimate"
1806
    t.boolean "squash", default: false, null: false
1807
    t.integer "cached_markdown_version"
1808 1809
    t.datetime "last_edited_at"
    t.integer "last_edited_by_id"
1810
    t.integer "head_pipeline_id"
1811
    t.string "merge_jid"
1812
    t.boolean "discussion_locked"
1813
    t.integer "latest_merge_request_diff_id"
1814
    t.boolean "allow_maintainer_to_push"
1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833
    t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
    t.index ["author_id"], name: "index_merge_requests_on_author_id", using: :btree
    t.index ["created_at"], name: "index_merge_requests_on_created_at", using: :btree
    t.index ["description"], name: "index_merge_requests_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
    t.index ["head_pipeline_id"], name: "index_merge_requests_on_head_pipeline_id", using: :btree
    t.index ["id", "merge_jid"], name: "index_merge_requests_on_id_and_merge_jid", where: "((merge_jid IS NOT NULL) AND ((state)::text = 'locked'::text))", using: :btree
    t.index ["latest_merge_request_diff_id"], name: "index_merge_requests_on_latest_merge_request_diff_id", using: :btree
    t.index ["merge_user_id"], name: "index_merge_requests_on_merge_user_id", where: "(merge_user_id IS NOT NULL)", using: :btree
    t.index ["milestone_id"], name: "index_merge_requests_on_milestone_id", using: :btree
    t.index ["source_branch"], name: "index_merge_requests_on_source_branch", using: :btree
    t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_and_branch_state_opened", where: "((state)::text = 'opened'::text)", using: :btree
    t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_id_and_source_branch", using: :btree
    t.index ["target_branch"], name: "index_merge_requests_on_target_branch", using: :btree
    t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid", unique: true, using: :btree
    t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid_opened", where: "((state)::text = 'opened'::text)", using: :btree
    t.index ["target_project_id", "merge_commit_sha", "id"], name: "index_merge_requests_on_tp_id_and_merge_commit_sha_and_id", using: :btree
    t.index ["title"], name: "index_merge_requests_on_title", using: :btree
    t.index ["title"], name: "index_merge_requests_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
    t.index ["updated_by_id"], name: "index_merge_requests_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
1834 1835
  end

1836
  create_table "merge_requests_closing_issues", force: :cascade do |t|
1837 1838 1839 1840
    t.integer "merge_request_id", null: false
    t.integer "issue_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1841 1842
    t.index ["issue_id"], name: "index_merge_requests_closing_issues_on_issue_id", using: :btree
    t.index ["merge_request_id"], name: "index_merge_requests_closing_issues_on_merge_request_id", using: :btree
1843 1844
  end

Valery Sizov's avatar
Valery Sizov committed
1845
  create_table "milestones", force: :cascade do |t|
1846
    t.string "title", null: false
Felipe Artur's avatar
Felipe Artur committed
1847
    t.integer "project_id"
1848 1849
    t.text "description"
    t.date "due_date"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
1850 1851
    t.datetime "created_at"
    t.datetime "updated_at"
1852 1853 1854 1855
    t.string "state"
    t.integer "iid"
    t.text "title_html"
    t.text "description_html"
1856
    t.date "start_date"
1857
    t.integer "cached_markdown_version"
Felipe Artur's avatar
Felipe Artur committed
1858
    t.integer "group_id"
1859 1860 1861 1862 1863 1864
    t.index ["description"], name: "index_milestones_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
    t.index ["due_date"], name: "index_milestones_on_due_date", using: :btree
    t.index ["group_id"], name: "index_milestones_on_group_id", using: :btree
    t.index ["project_id", "iid"], name: "index_milestones_on_project_id_and_iid", unique: true, using: :btree
    t.index ["title"], name: "index_milestones_on_title", using: :btree
    t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
Andrew8xx8's avatar
Andrew8xx8 committed
1865 1866
  end

1867 1868
  create_table "namespace_statistics", force: :cascade do |t|
    t.integer "namespace_id", null: false
1869 1870
    t.integer "shared_runners_seconds", default: 0, null: false
    t.datetime "shared_runners_seconds_last_reset"
1871
    t.index ["namespace_id"], name: "index_namespace_statistics_on_namespace_id", unique: true, using: :btree
1872 1873
  end

Valery Sizov's avatar
Valery Sizov committed
1874
  create_table "namespaces", force: :cascade do |t|
1875 1876 1877
    t.string "name", null: false
    t.string "path", null: false
    t.integer "owner_id"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
1878 1879
    t.datetime "created_at"
    t.datetime "updated_at"
1880 1881 1882 1883 1884 1885
    t.string "type"
    t.string "description", default: "", null: false
    t.string "avatar"
    t.boolean "membership_lock", default: false
    t.boolean "share_with_group_lock", default: false
    t.integer "visibility_level", default: 20, null: false
1886
    t.boolean "request_access_enabled", default: false, null: false
1887 1888
    t.string "ldap_sync_status", default: "ready", null: false
    t.string "ldap_sync_error"
1889 1890 1891
    t.datetime "ldap_sync_last_update_at"
    t.datetime "ldap_sync_last_successful_update_at"
    t.datetime "ldap_sync_last_sync_at"
Nick Thomas's avatar
Nick Thomas committed
1892
    t.text "description_html"
1893
    t.boolean "lfs_enabled"
1894
    t.integer "parent_id"
1895
    t.integer "shared_runners_minutes_limit"
1896
    t.bigint "repository_size_limit"
1897 1898
    t.boolean "require_two_factor_authentication", default: false, null: false
    t.integer "two_factor_grace_period", default: 48, null: false
1899
    t.integer "cached_markdown_version"
1900
    t.integer "plan_id"
1901
    t.integer "project_creation_level"
1902
    t.string "runners_token"
1903
    t.datetime_with_timezone "trial_ends_on"
Nick Thomas's avatar
Nick Thomas committed
1904
    t.integer "file_template_project_id"
1905
    t.string "saml_discovery_token"
1906
    t.string "runners_token_encrypted"
1907
    t.integer "custom_project_templates_group_id"
1908
    t.index ["created_at"], name: "index_namespaces_on_created_at", using: :btree
1909
    t.index ["custom_project_templates_group_id", "type"], name: "index_namespaces_on_custom_project_templates_group_id_and_type", where: "(custom_project_templates_group_id IS NOT NULL)", using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
1910
    t.index ["file_template_project_id"], name: "index_namespaces_on_file_template_project_id", using: :btree
1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923
    t.index ["ldap_sync_last_successful_update_at"], name: "index_namespaces_on_ldap_sync_last_successful_update_at", using: :btree
    t.index ["ldap_sync_last_update_at"], name: "index_namespaces_on_ldap_sync_last_update_at", using: :btree
    t.index ["name", "parent_id"], name: "index_namespaces_on_name_and_parent_id", unique: true, using: :btree
    t.index ["name"], name: "index_namespaces_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"}
    t.index ["owner_id"], name: "index_namespaces_on_owner_id", using: :btree
    t.index ["parent_id", "id"], name: "index_namespaces_on_parent_id_and_id", unique: true, using: :btree
    t.index ["path"], name: "index_namespaces_on_path", using: :btree
    t.index ["path"], name: "index_namespaces_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"}
    t.index ["plan_id"], name: "index_namespaces_on_plan_id", using: :btree
    t.index ["require_two_factor_authentication"], name: "index_namespaces_on_require_two_factor_authentication", using: :btree
    t.index ["runners_token"], name: "index_namespaces_on_runners_token", unique: true, using: :btree
    t.index ["trial_ends_on"], name: "index_namespaces_on_trial_ends_on", where: "(trial_ends_on IS NOT NULL)", using: :btree
    t.index ["type"], name: "index_namespaces_on_type", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
1924 1925
  end

1926 1927 1928 1929 1930 1931 1932 1933 1934 1935
  create_table "note_diff_files", force: :cascade do |t|
    t.integer "diff_note_id", null: false
    t.text "diff", null: false
    t.boolean "new_file", null: false
    t.boolean "renamed_file", null: false
    t.boolean "deleted_file", null: false
    t.string "a_mode", null: false
    t.string "b_mode", null: false
    t.text "new_path", null: false
    t.text "old_path", null: false
1936
    t.index ["diff_note_id"], name: "index_note_diff_files_on_diff_note_id", unique: true, using: :btree
1937 1938
  end

Valery Sizov's avatar
Valery Sizov committed
1939
  create_table "notes", force: :cascade do |t|
1940 1941 1942
    t.text "note"
    t.string "noteable_type"
    t.integer "author_id"
1943 1944
    t.datetime "created_at"
    t.datetime "updated_at"
1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955
    t.integer "project_id"
    t.string "attachment"
    t.string "line_code"
    t.string "commit_id"
    t.integer "noteable_id"
    t.boolean "system", default: false, null: false
    t.text "st_diff"
    t.integer "updated_by_id"
    t.string "type"
    t.text "position"
    t.text "original_position"
1956
    t.datetime "resolved_at"
1957 1958 1959
    t.integer "resolved_by_id"
    t.string "discussion_id"
    t.text "note_html"
1960
    t.integer "cached_markdown_version"
1961
    t.text "change_position"
1962
    t.boolean "resolved_by_push"
1963
    t.bigint "review_id"
1964 1965 1966 1967 1968 1969 1970 1971 1972
    t.index ["author_id"], name: "index_notes_on_author_id", using: :btree
    t.index ["commit_id"], name: "index_notes_on_commit_id", using: :btree
    t.index ["created_at"], name: "index_notes_on_created_at", using: :btree
    t.index ["discussion_id"], name: "index_notes_on_discussion_id", using: :btree
    t.index ["line_code"], name: "index_notes_on_line_code", using: :btree
    t.index ["note"], name: "index_notes_on_note_trigram", using: :gin, opclasses: {"note"=>"gin_trgm_ops"}
    t.index ["noteable_id", "noteable_type"], name: "index_notes_on_noteable_id_and_noteable_type", using: :btree
    t.index ["noteable_type"], name: "index_notes_on_noteable_type", using: :btree
    t.index ["project_id", "noteable_type"], name: "index_notes_on_project_id_and_noteable_type", using: :btree
1973
    t.index ["review_id"], name: "index_notes_on_review_id", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
1974 1975
  end

1976
  create_table "notification_settings", force: :cascade do |t|
1977 1978 1979 1980 1981 1982
    t.integer "user_id", null: false
    t.integer "source_id"
    t.string "source_type"
    t.integer "level", default: 0, null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994
    t.boolean "new_note"
    t.boolean "new_issue"
    t.boolean "reopen_issue"
    t.boolean "close_issue"
    t.boolean "reassign_issue"
    t.boolean "new_merge_request"
    t.boolean "reopen_merge_request"
    t.boolean "close_merge_request"
    t.boolean "reassign_merge_request"
    t.boolean "merge_merge_request"
    t.boolean "failed_pipeline"
    t.boolean "success_pipeline"
1995
    t.boolean "push_to_merge_request"
1996
    t.boolean "issue_due"
1997
    t.boolean "new_epic"
1998 1999 2000
    t.index ["source_id", "source_type"], name: "index_notification_settings_on_source_id_and_source_type", using: :btree
    t.index ["user_id", "source_id", "source_type"], name: "index_notifications_on_user_id_and_source_id_and_source_type", unique: true, using: :btree
    t.index ["user_id"], name: "index_notification_settings_on_user_id", using: :btree
2001 2002
  end

Valery Sizov's avatar
Valery Sizov committed
2003
  create_table "oauth_access_grants", force: :cascade do |t|
2004 2005 2006 2007 2008 2009
    t.integer "resource_owner_id", null: false
    t.integer "application_id", null: false
    t.string "token", null: false
    t.integer "expires_in", null: false
    t.text "redirect_uri", null: false
    t.datetime "created_at", null: false
Valery Sizov's avatar
Valery Sizov committed
2010
    t.datetime "revoked_at"
2011
    t.string "scopes"
2012
    t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
2013 2014
  end

Valery Sizov's avatar
Valery Sizov committed
2015
  create_table "oauth_access_tokens", force: :cascade do |t|
2016 2017 2018 2019 2020
    t.integer "resource_owner_id"
    t.integer "application_id"
    t.string "token", null: false
    t.string "refresh_token"
    t.integer "expires_in"
Valery Sizov's avatar
Valery Sizov committed
2021
    t.datetime "revoked_at"
2022 2023
    t.datetime "created_at", null: false
    t.string "scopes"
2024 2025 2026
    t.index ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true, using: :btree
    t.index ["resource_owner_id"], name: "index_oauth_access_tokens_on_resource_owner_id", using: :btree
    t.index ["token"], name: "index_oauth_access_tokens_on_token", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
2027 2028
  end

Valery Sizov's avatar
Valery Sizov committed
2029
  create_table "oauth_applications", force: :cascade do |t|
2030 2031 2032 2033 2034
    t.string "name", null: false
    t.string "uid", null: false
    t.string "secret", null: false
    t.text "redirect_uri", null: false
    t.string "scopes", default: "", null: false
Valery Sizov's avatar
Valery Sizov committed
2035 2036
    t.datetime "created_at"
    t.datetime "updated_at"
2037 2038
    t.integer "owner_id"
    t.string "owner_type"
2039
    t.boolean "trusted", default: false, null: false
2040 2041
    t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type", using: :btree
    t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
2042 2043
  end

2044 2045 2046
  create_table "oauth_openid_requests", force: :cascade do |t|
    t.integer "access_grant_id", null: false
    t.string "nonce", null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
2047
    t.index ["access_grant_id"], name: "index_oauth_openid_requests_on_access_grant_id", using: :btree
2048 2049
  end

2050 2051 2052 2053 2054 2055 2056 2057 2058
  create_table "operations_feature_flag_scopes", id: :bigserial, force: :cascade do |t|
    t.bigint "feature_flag_id", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.boolean "active", null: false
    t.string "environment_scope", default: "*", null: false
    t.index ["feature_flag_id", "environment_scope"], name: "index_feature_flag_scopes_on_flag_id_and_environment_scope", unique: true, using: :btree
  end

2059
  create_table "operations_feature_flags", id: :bigserial, force: :cascade do |t|
2060
    t.integer "project_id", null: false
2061
    t.boolean "active", null: false
2062 2063 2064 2065
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.string "name", null: false
    t.text "description"
2066
    t.index ["project_id", "name"], name: "index_operations_feature_flags_on_project_id_and_name", unique: true, using: :btree
2067 2068
  end

2069
  create_table "operations_feature_flags_clients", id: :bigserial, force: :cascade do |t|
2070 2071
    t.integer "project_id", null: false
    t.string "token", null: false
2072
    t.index ["project_id", "token"], name: "index_operations_feature_flags_clients_on_project_id_and_token", unique: true, using: :btree
2073 2074
  end

2075
  create_table "packages_maven_metadata", id: :bigserial, force: :cascade do |t|
2076
    t.bigint "package_id", null: false
2077 2078
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2079 2080
    t.string "app_group", null: false
    t.string "app_name", null: false
2081
    t.string "app_version"
2082
    t.string "path", limit: 512, null: false
2083
    t.index ["package_id", "path"], name: "index_packages_maven_metadata_on_package_id_and_path", using: :btree
2084 2085
  end

2086
  create_table "packages_package_files", id: :bigserial, force: :cascade do |t|
2087
    t.bigint "package_id", null: false
2088 2089
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2090
    t.bigint "size"
2091 2092 2093 2094
    t.integer "file_type"
    t.integer "file_store"
    t.binary "file_md5"
    t.binary "file_sha1"
2095
    t.string "file_name", null: false
2096
    t.text "file", null: false
2097
    t.index ["package_id", "file_name"], name: "index_packages_package_files_on_package_id_and_file_name", using: :btree
2098 2099
  end

2100
  create_table "packages_packages", id: :bigserial, force: :cascade do |t|
2101
    t.integer "project_id", null: false
2102 2103
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2104
    t.string "name", null: false
2105
    t.string "version"
2106
    t.integer "package_type", limit: 2, null: false
2107
    t.index ["project_id"], name: "index_packages_packages_on_project_id", using: :btree
2108 2109
  end

Kamil Trzcinski's avatar
Kamil Trzcinski committed
2110 2111
  create_table "pages_domains", force: :cascade do |t|
    t.integer "project_id"
2112 2113 2114 2115 2116
    t.text "certificate"
    t.text "encrypted_key"
    t.string "encrypted_key_iv"
    t.string "encrypted_key_salt"
    t.string "domain"
2117 2118 2119
    t.datetime_with_timezone "verified_at"
    t.string "verification_code", null: false
    t.datetime_with_timezone "enabled_until"
2120 2121 2122 2123 2124
    t.index ["domain"], name: "index_pages_domains_on_domain", unique: true, using: :btree
    t.index ["project_id", "enabled_until"], name: "index_pages_domains_on_project_id_and_enabled_until", using: :btree
    t.index ["project_id"], name: "index_pages_domains_on_project_id", using: :btree
    t.index ["verified_at", "enabled_until"], name: "index_pages_domains_on_verified_at_and_enabled_until", using: :btree
    t.index ["verified_at"], name: "index_pages_domains_on_verified_at", using: :btree
Kamil Trzcinski's avatar
Kamil Trzcinski committed
2125 2126
  end

Valery Sizov's avatar
Valery Sizov committed
2127
  create_table "path_locks", force: :cascade do |t|
2128 2129 2130
    t.string "path", null: false
    t.integer "project_id"
    t.integer "user_id"
Valery Sizov's avatar
Valery Sizov committed
2131 2132
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2133 2134 2135
    t.index ["path"], name: "index_path_locks_on_path", using: :btree
    t.index ["project_id"], name: "index_path_locks_on_project_id", using: :btree
    t.index ["user_id"], name: "index_path_locks_on_user_id", using: :btree
Valery Sizov's avatar
Valery Sizov committed
2136 2137
  end

2138
  create_table "personal_access_tokens", force: :cascade do |t|
2139 2140 2141
    t.integer "user_id", null: false
    t.string "name", null: false
    t.boolean "revoked", default: false
2142
    t.date "expires_at"
2143 2144
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2145
    t.string "scopes", default: "--- []\n", null: false
Simon Vocella's avatar
Simon Vocella committed
2146
    t.boolean "impersonation", default: false, null: false
2147
    t.string "token_digest"
2148 2149
    t.index ["token_digest"], name: "index_personal_access_tokens_on_token_digest", unique: true, using: :btree
    t.index ["user_id"], name: "index_personal_access_tokens_on_user_id", using: :btree
2150 2151
  end

2152
  create_table "plans", force: :cascade do |t|
2153 2154
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2155 2156
    t.string "name"
    t.string "title"
2157 2158
    t.integer "active_pipelines_limit"
    t.integer "pipeline_size_limit"
2159
    t.index ["name"], name: "index_plans_on_name", using: :btree
2160 2161
  end

2162 2163 2164
  create_table "pool_repositories", id: :bigserial, force: :cascade do |t|
    t.integer "shard_id", null: false
    t.string "disk_path"
2165 2166
    t.string "state"
    t.integer "source_project_id"
2167 2168
    t.index ["disk_path"], name: "index_pool_repositories_on_disk_path", unique: true, using: :btree
    t.index ["shard_id"], name: "index_pool_repositories_on_shard_id", using: :btree
2169
    t.index ["source_project_id"], name: "index_pool_repositories_on_source_project_id", unique: true, using: :btree
2170 2171
  end

2172 2173 2174 2175
  create_table "programming_languages", force: :cascade do |t|
    t.string "name", null: false
    t.string "color", null: false
    t.datetime_with_timezone "created_at", null: false
2176
    t.index ["name"], name: "index_programming_languages_on_name", unique: true, using: :btree
2177 2178
  end

2179 2180 2181 2182 2183
  create_table "project_alerting_settings", primary_key: "project_id", id: :integer, force: :cascade do |t|
    t.string "encrypted_token", null: false
    t.string "encrypted_token_iv", null: false
  end

2184
  create_table "project_authorizations", id: false, force: :cascade do |t|
2185 2186 2187
    t.integer "user_id", null: false
    t.integer "project_id", null: false
    t.integer "access_level", null: false
2188 2189
    t.index ["project_id"], name: "index_project_authorizations_on_project_id", using: :btree
    t.index ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true, using: :btree
2190 2191
  end

2192
  create_table "project_auto_devops", force: :cascade do |t|
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
2193
    t.integer "project_id", null: false
2194 2195
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2196 2197
    t.boolean "enabled"
    t.string "domain"
2198
    t.integer "deploy_strategy", default: 0, null: false
2199
    t.index ["project_id"], name: "index_project_auto_devops_on_project_id", unique: true, using: :btree
2200 2201
  end

2202 2203 2204
  create_table "project_ci_cd_settings", force: :cascade do |t|
    t.integer "project_id", null: false
    t.boolean "group_runners_enabled", default: true, null: false
2205
    t.index ["project_id"], name: "index_project_ci_cd_settings_on_project_id", unique: true, using: :btree
2206 2207
  end

2208
  create_table "project_custom_attributes", force: :cascade do |t|
2209 2210
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2211 2212 2213
    t.integer "project_id", null: false
    t.string "key", null: false
    t.string "value", null: false
2214 2215
    t.index ["key", "value"], name: "index_project_custom_attributes_on_key_and_value", using: :btree
    t.index ["project_id", "key"], name: "index_project_custom_attributes_on_project_id_and_key", unique: true, using: :btree
2216 2217
  end

2218 2219 2220 2221 2222 2223 2224
  create_table "project_daily_statistics", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "fetch_count", null: false
    t.date "date"
    t.index ["project_id", "date"], name: "index_project_daily_statistics_on_project_id_and_date", unique: true, order: { date: :desc }, using: :btree
  end

2225 2226 2227
  create_table "project_deploy_tokens", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "deploy_token_id", null: false
2228
    t.datetime_with_timezone "created_at", null: false
2229 2230
    t.index ["deploy_token_id"], name: "index_project_deploy_tokens_on_deploy_token_id", using: :btree
    t.index ["project_id", "deploy_token_id"], name: "index_project_deploy_tokens_on_project_id_and_deploy_token_id", unique: true, using: :btree
2231 2232
  end

2233
  create_table "project_error_tracking_settings", primary_key: "project_id", id: :integer, force: :cascade do |t|
2234 2235
    t.boolean "enabled", default: false, null: false
    t.string "api_url"
2236 2237
    t.string "encrypted_token"
    t.string "encrypted_token_iv"
2238 2239
    t.string "project_name"
    t.string "organization_name"
2240 2241
  end

2242 2243 2244 2245 2246 2247 2248 2249
  create_table "project_feature_usages", primary_key: "project_id", id: :integer, force: :cascade do |t|
    t.datetime "jira_dvcs_cloud_last_sync_at"
    t.datetime "jira_dvcs_server_last_sync_at"
    t.index ["jira_dvcs_cloud_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_cloud_last_sync_at_and_proj_id", where: "(jira_dvcs_cloud_last_sync_at IS NOT NULL)", using: :btree
    t.index ["jira_dvcs_server_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_server_last_sync_at_and_proj_id", where: "(jira_dvcs_server_last_sync_at IS NOT NULL)", using: :btree
    t.index ["project_id"], name: "index_project_feature_usages_on_project_id", using: :btree
  end

2250
  create_table "project_features", force: :cascade do |t|
2251
    t.integer "project_id", null: false
2252 2253 2254
    t.integer "merge_requests_access_level"
    t.integer "issues_access_level"
    t.integer "wiki_access_level"
2255
    t.integer "snippets_access_level", default: 20, null: false
2256
    t.integer "builds_access_level"
2257 2258
    t.datetime "created_at"
    t.datetime "updated_at"
2259
    t.integer "repository_access_level", default: 20, null: false
2260
    t.integer "pages_access_level", default: 20, null: false
2261
    t.index ["project_id"], name: "index_project_features_on_project_id", unique: true, using: :btree
2262 2263
  end

Valery Sizov's avatar
Valery Sizov committed
2264
  create_table "project_group_links", force: :cascade do |t|
2265 2266
    t.integer "project_id", null: false
    t.integer "group_id", null: false
Valery Sizov's avatar
Valery Sizov committed
2267 2268
    t.datetime "created_at"
    t.datetime "updated_at"
2269 2270
    t.integer "group_access", default: 30, null: false
    t.date "expires_at"
2271 2272
    t.index ["group_id"], name: "index_project_group_links_on_group_id", using: :btree
    t.index ["project_id"], name: "index_project_group_links_on_project_id", using: :btree
Valery Sizov's avatar
Valery Sizov committed
2273 2274 2275
  end

  create_table "project_import_data", force: :cascade do |t|
2276
    t.integer "project_id"
2277 2278 2279 2280
    t.text "data"
    t.text "encrypted_credentials"
    t.string "encrypted_credentials_iv"
    t.string "encrypted_credentials_salt"
2281
    t.index ["project_id"], name: "index_project_import_data_on_project_id", using: :btree
2282 2283
  end

2284
  create_table "project_mirror_data", force: :cascade do |t|
2285
    t.integer "project_id", null: false
2286 2287 2288
    t.integer "retry_count", default: 0, null: false
    t.datetime "last_update_started_at"
    t.datetime "last_update_scheduled_at"
2289
    t.datetime "next_execution_timestamp"
2290 2291
    t.string "status"
    t.string "jid"
2292
    t.text "last_error"
2293 2294
    t.datetime_with_timezone "last_update_at"
    t.datetime_with_timezone "last_successful_update_at"
2295 2296 2297 2298 2299
    t.index ["jid"], name: "index_project_mirror_data_on_jid", using: :btree
    t.index ["last_successful_update_at"], name: "index_project_mirror_data_on_last_successful_update_at", using: :btree
    t.index ["next_execution_timestamp", "retry_count"], name: "index_mirror_data_on_next_execution_and_retry_count", using: :btree
    t.index ["project_id"], name: "index_project_mirror_data_on_project_id", unique: true, using: :btree
    t.index ["status"], name: "index_project_mirror_data_on_status", using: :btree
2300 2301
  end

2302 2303 2304
  create_table "project_repositories", id: :bigserial, force: :cascade do |t|
    t.integer "shard_id", null: false
    t.string "disk_path", null: false
2305
    t.integer "project_id", null: false
2306
    t.index ["disk_path"], name: "index_project_repositories_on_disk_path", unique: true, using: :btree
2307
    t.index ["project_id"], name: "index_project_repositories_on_project_id", unique: true, using: :btree
2308 2309 2310
    t.index ["shard_id"], name: "index_project_repositories_on_shard_id", using: :btree
  end

2311 2312 2313 2314 2315 2316
  create_table "project_repository_states", force: :cascade do |t|
    t.integer "project_id", null: false
    t.binary "repository_verification_checksum"
    t.binary "wiki_verification_checksum"
    t.string "last_repository_verification_failure"
    t.string "last_wiki_verification_failure"
2317 2318 2319 2320
    t.datetime_with_timezone "repository_retry_at"
    t.datetime_with_timezone "wiki_retry_at"
    t.integer "repository_retry_count"
    t.integer "wiki_retry_count"
2321 2322
    t.datetime_with_timezone "last_repository_verification_ran_at"
    t.datetime_with_timezone "last_wiki_verification_ran_at"
2323 2324
    t.index ["last_repository_verification_failure"], name: "idx_repository_states_on_repository_failure_partial", where: "(last_repository_verification_failure IS NOT NULL)", using: :btree
    t.index ["last_wiki_verification_failure"], name: "idx_repository_states_on_wiki_failure_partial", where: "(last_wiki_verification_failure IS NOT NULL)", using: :btree
2325 2326
    t.index ["project_id", "last_repository_verification_ran_at"], name: "idx_repository_states_on_last_repository_verification_ran_at", where: "((repository_verification_checksum IS NOT NULL) AND (last_repository_verification_failure IS NULL))", using: :btree
    t.index ["project_id", "last_wiki_verification_ran_at"], name: "idx_repository_states_on_last_wiki_verification_ran_at", where: "((wiki_verification_checksum IS NOT NULL) AND (last_wiki_verification_failure IS NULL))", using: :btree
2327 2328
    t.index ["project_id"], name: "idx_repository_states_outdated_checksums", where: "(((repository_verification_checksum IS NULL) AND (last_repository_verification_failure IS NULL)) OR ((wiki_verification_checksum IS NULL) AND (last_wiki_verification_failure IS NULL)))", using: :btree
    t.index ["project_id"], name: "index_project_repository_states_on_project_id", unique: true, using: :btree
2329 2330
  end

2331 2332 2333
  create_table "project_statistics", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "namespace_id", null: false
2334 2335 2336 2337 2338 2339
    t.bigint "commit_count", default: 0, null: false
    t.bigint "storage_size", default: 0, null: false
    t.bigint "repository_size", default: 0, null: false
    t.bigint "lfs_objects_size", default: 0, null: false
    t.bigint "build_artifacts_size", default: 0, null: false
    t.bigint "shared_runners_seconds", default: 0, null: false
2340
    t.datetime "shared_runners_seconds_last_reset"
2341 2342
    t.index ["namespace_id"], name: "index_project_statistics_on_namespace_id", using: :btree
    t.index ["project_id"], name: "index_project_statistics_on_project_id", unique: true, using: :btree
2343 2344
  end

Simon Knox's avatar
Simon Knox committed
2345 2346 2347 2348 2349
  create_table "project_tracing_settings", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "project_id", null: false
    t.string "external_url", null: false
2350
    t.index ["project_id"], name: "index_project_tracing_settings_on_project_id", unique: true, using: :btree
Simon Knox's avatar
Simon Knox committed
2351 2352
  end

Valery Sizov's avatar
Valery Sizov committed
2353
  create_table "projects", force: :cascade do |t|
2354 2355 2356
    t.string "name"
    t.string "path"
    t.text "description"
2357 2358
    t.datetime "created_at"
    t.datetime "updated_at"
2359
    t.integer "creator_id"
2360
    t.integer "namespace_id", null: false
2361
    t.datetime "last_activity_at"
2362 2363 2364 2365
    t.string "import_url"
    t.integer "visibility_level", default: 0, null: false
    t.boolean "archived", default: false, null: false
    t.string "avatar"
Tiago Botelho's avatar
Tiago Botelho committed
2366
    t.string "import_status"
2367 2368
    t.text "merge_requests_template"
    t.integer "star_count", default: 0, null: false
2369
    t.boolean "merge_requests_rebase_enabled", default: false
2370 2371 2372 2373
    t.string "import_type"
    t.string "import_source"
    t.integer "approvals_before_merge", default: 0, null: false
    t.boolean "reset_approvals_on_push", default: true
2374
    t.boolean "merge_requests_ff_only_enabled", default: false
2375 2376
    t.text "issues_template"
    t.boolean "mirror", default: false, null: false
Tiago Botelho's avatar
Tiago Botelho committed
2377 2378
    t.datetime "mirror_last_update_at"
    t.datetime "mirror_last_successful_update_at"
2379
    t.integer "mirror_user_id"
Tiago Botelho's avatar
Tiago Botelho committed
2380
    t.text "import_error"
2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
    t.integer "ci_id"
    t.boolean "shared_runners_enabled", default: true, null: false
    t.string "runners_token"
    t.string "build_coverage_regex"
    t.boolean "build_allow_git_fetch", default: true, null: false
    t.integer "build_timeout", default: 3600, null: false
    t.boolean "mirror_trigger_builds", default: false, null: false
    t.boolean "pending_delete", default: false
    t.boolean "public_builds", default: true, null: false
    t.boolean "last_repository_check_failed"
2391
    t.datetime "last_repository_check_at"
2392
    t.boolean "container_registry_enabled"
2393
    t.boolean "only_allow_merge_if_pipeline_succeeds", default: false, null: false
2394 2395
    t.boolean "has_external_issue_tracker"
    t.string "repository_storage", default: "default", null: false
2396
    t.boolean "repository_read_only"
2397
    t.boolean "request_access_enabled", default: false, null: false
2398
    t.boolean "has_external_wiki"
2399
    t.string "ci_config_path"
2400 2401
    t.boolean "lfs_enabled"
    t.text "description_html"
2402
    t.boolean "only_allow_merge_if_all_discussions_are_resolved"
2403
    t.bigint "repository_size_limit"
2404
    t.boolean "printing_merge_request_link_enabled", default: true, null: false
2405
    t.integer "auto_cancel_pending_pipelines", default: 1, null: false
2406
    t.boolean "service_desk_enabled", default: true
Tiago Botelho's avatar
Tiago Botelho committed
2407
    t.string "import_jid"
2408
    t.integer "cached_markdown_version"
2409
    t.text "delete_error"
2410
    t.datetime "last_repository_updated_at"
Simon Knox's avatar
Simon Knox committed
2411
    t.boolean "disable_overriding_approvers_per_merge_request"
2412
    t.integer "storage_version", limit: 2
Sean McGivern's avatar
Sean McGivern committed
2413
    t.boolean "resolve_outdated_diff_discussions"
2414
    t.boolean "remote_mirror_available_overridden"
2415
    t.boolean "only_mirror_protected_branches"
2416
    t.boolean "pull_mirror_available_overridden"
2417
    t.integer "jobs_cache_index"
2418
    t.string "external_authorization_classification_label"
2419
    t.boolean "mirror_overwrites_diverged_branches"
Rob Watson's avatar
Rob Watson committed
2420
    t.boolean "pages_https_only", default: true
2421
    t.string "external_webhook_token"
2422
    t.boolean "packages_enabled"
2423
    t.boolean "merge_requests_author_approval"
2424
    t.bigint "pool_repository_id"
2425
    t.string "runners_token_encrypted"
2426
    t.string "bfg_object_map"
2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450
    t.index ["ci_id"], name: "index_projects_on_ci_id", using: :btree
    t.index ["created_at"], name: "index_projects_on_created_at", using: :btree
    t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree
    t.index ["description"], name: "index_projects_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
    t.index ["id", "repository_storage", "last_repository_updated_at"], name: "idx_projects_on_repository_storage_last_repository_updated_at", using: :btree
    t.index ["id"], name: "index_projects_on_id_partial_for_visibility", unique: true, where: "(visibility_level = ANY (ARRAY[10, 20]))", using: :btree
    t.index ["id"], name: "index_projects_on_mirror_and_mirror_trigger_builds_both_true", where: "((mirror IS TRUE) AND (mirror_trigger_builds IS TRUE))", using: :btree
    t.index ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree
    t.index ["last_repository_check_at"], name: "index_projects_on_last_repository_check_at", where: "(last_repository_check_at IS NOT NULL)", using: :btree
    t.index ["last_repository_check_failed"], name: "index_projects_on_last_repository_check_failed", using: :btree
    t.index ["last_repository_updated_at"], name: "index_projects_on_last_repository_updated_at", using: :btree
    t.index ["mirror_last_successful_update_at"], name: "index_projects_on_mirror_last_successful_update_at", using: :btree
    t.index ["name"], name: "index_projects_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"}
    t.index ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree
    t.index ["path"], name: "index_projects_on_path", using: :btree
    t.index ["path"], name: "index_projects_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"}
    t.index ["pending_delete"], name: "index_projects_on_pending_delete", using: :btree
    t.index ["pool_repository_id"], name: "index_projects_on_pool_repository_id", where: "(pool_repository_id IS NOT NULL)", using: :btree
    t.index ["repository_storage", "created_at"], name: "idx_project_repository_check_partial", where: "(last_repository_check_at IS NULL)", using: :btree
    t.index ["repository_storage"], name: "index_projects_on_repository_storage", using: :btree
    t.index ["runners_token"], name: "index_projects_on_runners_token", using: :btree
    t.index ["star_count"], name: "index_projects_on_star_count", using: :btree
    t.index ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree
  end
Andrew8xx8's avatar
Andrew8xx8 committed
2451

2452 2453 2454 2455 2456 2457 2458
  create_table "prometheus_alert_events", id: :bigserial, force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "prometheus_alert_id", null: false
    t.datetime_with_timezone "started_at", null: false
    t.datetime_with_timezone "ended_at"
    t.integer "status", limit: 2
    t.string "payload_key"
2459 2460
    t.index ["project_id", "status"], name: "index_prometheus_alert_events_on_project_id_and_status", using: :btree
    t.index ["prometheus_alert_id", "payload_key"], name: "index_prometheus_alert_event_scoped_payload_key", unique: true, using: :btree
2461 2462
  end

2463 2464 2465 2466 2467 2468 2469 2470
  create_table "prometheus_alerts", force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.float "threshold", null: false
    t.integer "operator", null: false
    t.integer "environment_id", null: false
    t.integer "project_id", null: false
    t.integer "prometheus_metric_id", null: false
2471 2472 2473
    t.index ["environment_id"], name: "index_prometheus_alerts_on_environment_id", using: :btree
    t.index ["project_id", "prometheus_metric_id"], name: "index_prometheus_alerts_on_project_id_and_prometheus_metric_id", unique: true, using: :btree
    t.index ["prometheus_metric_id"], name: "index_prometheus_alerts_on_prometheus_metric_id", using: :btree
2474 2475
  end

2476
  create_table "prometheus_metrics", force: :cascade do |t|
2477
    t.integer "project_id"
2478 2479
    t.string "title", null: false
    t.string "query", null: false
2480 2481 2482
    t.string "y_label"
    t.string "unit"
    t.string "legend"
2483
    t.integer "group", null: false
2484 2485
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2486 2487
    t.boolean "common", default: false, null: false
    t.string "identifier"
2488 2489 2490 2491
    t.index ["common"], name: "index_prometheus_metrics_on_common", using: :btree
    t.index ["group"], name: "index_prometheus_metrics_on_group", using: :btree
    t.index ["identifier"], name: "index_prometheus_metrics_on_identifier", unique: true, using: :btree
    t.index ["project_id"], name: "index_prometheus_metrics_on_project_id", using: :btree
2492 2493
  end

2494
  create_table "protected_branch_merge_access_levels", force: :cascade do |t|
2495
    t.integer "protected_branch_id", null: false
2496
    t.integer "access_level", default: 40
2497 2498 2499
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "user_id"
2500
    t.integer "group_id"
Kamil Trzciński's avatar
Kamil Trzciński committed
2501
    t.index ["group_id"], name: "index_protected_branch_merge_access_levels_on_group_id", using: :btree
2502 2503
    t.index ["protected_branch_id"], name: "index_protected_branch_merge_access", using: :btree
    t.index ["user_id"], name: "index_protected_branch_merge_access_levels_on_user_id", using: :btree
2504 2505 2506
  end

  create_table "protected_branch_push_access_levels", force: :cascade do |t|
2507
    t.integer "protected_branch_id", null: false
2508
    t.integer "access_level", default: 40
2509 2510 2511
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "user_id"
2512
    t.integer "group_id"
Kamil Trzciński's avatar
Kamil Trzciński committed
2513
    t.index ["group_id"], name: "index_protected_branch_push_access_levels_on_group_id", using: :btree
2514 2515
    t.index ["protected_branch_id"], name: "index_protected_branch_push_access", using: :btree
    t.index ["user_id"], name: "index_protected_branch_push_access_levels_on_user_id", using: :btree
2516 2517
  end

2518 2519 2520 2521 2522
  create_table "protected_branch_unprotect_access_levels", force: :cascade do |t|
    t.integer "protected_branch_id", null: false
    t.integer "access_level", default: 40
    t.integer "user_id"
    t.integer "group_id"
2523 2524 2525
    t.index ["group_id"], name: "index_protected_branch_unprotect_access_levels_on_group_id", using: :btree
    t.index ["protected_branch_id"], name: "index_protected_branch_unprotect_access", using: :btree
    t.index ["user_id"], name: "index_protected_branch_unprotect_access_levels_on_user_id", using: :btree
2526 2527
  end

Valery Sizov's avatar
Valery Sizov committed
2528
  create_table "protected_branches", force: :cascade do |t|
2529 2530
    t.integer "project_id", null: false
    t.string "name", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
2531 2532
    t.datetime "created_at"
    t.datetime "updated_at"
2533
    t.index ["project_id"], name: "index_protected_branches_on_project_id", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
2534 2535
  end

2536 2537 2538 2539 2540 2541 2542
  create_table "protected_environment_deploy_access_levels", force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "access_level", default: 40
    t.integer "protected_environment_id", null: false
    t.integer "user_id"
    t.integer "group_id"
2543 2544 2545
    t.index ["group_id"], name: "index_protected_environment_deploy_access_levels_on_group_id", using: :btree
    t.index ["protected_environment_id"], name: "index_protected_environment_deploy_access", using: :btree
    t.index ["user_id"], name: "index_protected_environment_deploy_access_levels_on_user_id", using: :btree
2546 2547 2548 2549 2550 2551 2552
  end

  create_table "protected_environments", force: :cascade do |t|
    t.integer "project_id", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.string "name", null: false
2553 2554
    t.index ["project_id", "name"], name: "index_protected_environments_on_project_id_and_name", unique: true, using: :btree
    t.index ["project_id"], name: "index_protected_environments_on_project_id", using: :btree
2555 2556
  end

2557
  create_table "protected_tag_create_access_levels", force: :cascade do |t|
2558 2559 2560 2561 2562 2563
    t.integer "protected_tag_id", null: false
    t.integer "access_level", default: 40
    t.integer "user_id"
    t.integer "group_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
Kamil Trzciński's avatar
Kamil Trzciński committed
2564
    t.index ["group_id"], name: "index_protected_tag_create_access_levels_on_group_id", using: :btree
2565 2566
    t.index ["protected_tag_id"], name: "index_protected_tag_create_access", using: :btree
    t.index ["user_id"], name: "index_protected_tag_create_access_levels_on_user_id", using: :btree
2567 2568 2569 2570 2571 2572 2573
  end

  create_table "protected_tags", force: :cascade do |t|
    t.integer "project_id", null: false
    t.string "name", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2574 2575
    t.index ["project_id", "name"], name: "index_protected_tags_on_project_id_and_name", unique: true, using: :btree
    t.index ["project_id"], name: "index_protected_tags_on_project_id", using: :btree
2576 2577
  end

2578
  create_table "push_event_payloads", id: false, force: :cascade do |t|
2579
    t.bigint "commit_count", null: false
2580 2581 2582 2583 2584 2585 2586
    t.integer "event_id", null: false
    t.integer "action", limit: 2, null: false
    t.integer "ref_type", limit: 2, null: false
    t.binary "commit_from"
    t.binary "commit_to"
    t.text "ref"
    t.string "commit_title", limit: 70
2587
    t.index ["event_id"], name: "index_push_event_payloads_on_event_id", unique: true, using: :btree
2588 2589
  end

2590
  create_table "push_rules", force: :cascade do |t|
2591 2592 2593 2594 2595
    t.string "force_push_regex"
    t.string "delete_branch_regex"
    t.string "commit_message_regex"
    t.boolean "deny_delete_tag"
    t.integer "project_id"
2596 2597
    t.datetime "created_at"
    t.datetime "updated_at"
2598 2599 2600 2601 2602 2603
    t.string "author_email_regex"
    t.boolean "member_check", default: false, null: false
    t.string "file_name_regex"
    t.boolean "is_sample", default: false
    t.integer "max_file_size", default: 0, null: false
    t.boolean "prevent_secrets", default: false, null: false
2604
    t.string "branch_name_regex"
2605
    t.boolean "reject_unsigned_commits"
2606
    t.boolean "commit_committer_check"
2607
    t.boolean "regexp_uses_re2", default: true
2608
    t.string "commit_message_negative_regex"
2609 2610
    t.index ["is_sample"], name: "index_push_rules_on_is_sample", where: "is_sample", using: :btree
    t.index ["project_id"], name: "index_push_rules_on_project_id", using: :btree
2611 2612
  end

2613 2614 2615 2616 2617 2618
  create_table "redirect_routes", force: :cascade do |t|
    t.integer "source_id", null: false
    t.string "source_type", null: false
    t.string "path", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2619 2620
    t.index ["path"], name: "index_redirect_routes_on_path", unique: true, using: :btree
    t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id", using: :btree
2621 2622
  end

2623 2624 2625 2626 2627 2628 2629 2630 2631 2632
  create_table "release_links", id: :bigserial, force: :cascade do |t|
    t.integer "release_id", null: false
    t.string "url", null: false
    t.string "name", null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.index ["release_id", "name"], name: "index_release_links_on_release_id_and_name", unique: true, using: :btree
    t.index ["release_id", "url"], name: "index_release_links_on_release_id_and_url", unique: true, using: :btree
  end

Valery Sizov's avatar
Valery Sizov committed
2633
  create_table "releases", force: :cascade do |t|
2634 2635 2636
    t.string "tag"
    t.text "description"
    t.integer "project_id"
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
2637 2638
    t.datetime "created_at"
    t.datetime "updated_at"
2639
    t.text "description_html"
2640
    t.integer "cached_markdown_version"
2641 2642 2643 2644
    t.integer "author_id"
    t.string "name"
    t.string "sha"
    t.index ["author_id"], name: "index_releases_on_author_id", using: :btree
2645 2646
    t.index ["project_id", "tag"], name: "index_releases_on_project_id_and_tag", using: :btree
    t.index ["project_id"], name: "index_releases_on_project_id", using: :btree
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
2647 2648
  end

2649
  create_table "remote_mirrors", force: :cascade do |t|
2650 2651 2652 2653
    t.integer "project_id"
    t.string "url"
    t.boolean "enabled", default: false
    t.string "update_status"
2654 2655
    t.datetime "last_update_at"
    t.datetime "last_successful_update_at"
2656 2657 2658 2659 2660 2661
    t.string "last_error"
    t.text "encrypted_credentials"
    t.string "encrypted_credentials_iv"
    t.string "encrypted_credentials_salt"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2662
    t.datetime "last_update_started_at"
2663
    t.boolean "only_protected_branches", default: false, null: false
2664
    t.string "remote_name"
2665
    t.boolean "error_notification_sent"
2666 2667
    t.index ["last_successful_update_at"], name: "index_remote_mirrors_on_last_successful_update_at", using: :btree
    t.index ["project_id"], name: "index_remote_mirrors_on_project_id", using: :btree
2668 2669
  end

2670 2671 2672 2673
  create_table "repository_languages", id: false, force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "programming_language_id", null: false
    t.float "share", null: false
2674
    t.index ["project_id", "programming_language_id"], name: "index_repository_languages_on_project_and_languages_id", unique: true, using: :btree
2675 2676
  end

2677 2678 2679 2680
  create_table "resource_label_events", id: :bigserial, force: :cascade do |t|
    t.integer "action", null: false
    t.integer "issue_id"
    t.integer "merge_request_id"
Jan Provaznik's avatar
Jan Provaznik committed
2681
    t.integer "epic_id"
2682 2683 2684
    t.integer "label_id"
    t.integer "user_id"
    t.datetime_with_timezone "created_at", null: false
2685 2686 2687
    t.integer "cached_markdown_version"
    t.text "reference"
    t.text "reference_html"
2688 2689 2690 2691 2692
    t.index ["epic_id"], name: "index_resource_label_events_on_epic_id", using: :btree
    t.index ["issue_id"], name: "index_resource_label_events_on_issue_id", using: :btree
    t.index ["label_id"], name: "index_resource_label_events_on_label_id", using: :btree
    t.index ["merge_request_id"], name: "index_resource_label_events_on_merge_request_id", using: :btree
    t.index ["user_id"], name: "index_resource_label_events_on_user_id", using: :btree
2693 2694
  end

2695 2696 2697 2698 2699 2700 2701 2702 2703 2704
  create_table "reviews", id: :bigserial, force: :cascade do |t|
    t.integer "author_id"
    t.integer "merge_request_id", null: false
    t.integer "project_id", null: false
    t.datetime_with_timezone "created_at", null: false
    t.index ["author_id"], name: "index_reviews_on_author_id", using: :btree
    t.index ["merge_request_id"], name: "index_reviews_on_merge_request_id", using: :btree
    t.index ["project_id"], name: "index_reviews_on_project_id", using: :btree
  end

2705 2706 2707 2708 2709 2710
  create_table "routes", force: :cascade do |t|
    t.integer "source_id", null: false
    t.string "source_type", null: false
    t.string "path", null: false
    t.datetime "created_at"
    t.datetime "updated_at"
2711
    t.string "name"
2712 2713 2714
    t.index ["path"], name: "index_routes_on_path", unique: true, using: :btree
    t.index ["path"], name: "index_routes_on_path_text_pattern_ops", using: :btree, opclasses: {"path"=>"varchar_pattern_ops"}
    t.index ["source_type", "source_id"], name: "index_routes_on_source_type_and_source_id", unique: true, using: :btree
2715 2716
  end

2717 2718 2719 2720 2721
  create_table "saml_providers", force: :cascade do |t|
    t.integer "group_id", null: false
    t.boolean "enabled", null: false
    t.string "certificate_fingerprint", null: false
    t.string "sso_url", null: false
2722
    t.boolean "enforced_sso", default: false, null: false
2723
    t.index ["group_id"], name: "index_saml_providers_on_group_id", using: :btree
2724 2725
  end

Valery Sizov's avatar
Valery Sizov committed
2726
  create_table "sent_notifications", force: :cascade do |t|
Douwe Maan's avatar
Douwe Maan committed
2727 2728
    t.integer "project_id"
    t.integer "noteable_id"
2729
    t.string "noteable_type"
Douwe Maan's avatar
Douwe Maan committed
2730
    t.integer "recipient_id"
2731 2732 2733 2734 2735
    t.string "commit_id"
    t.string "reply_key", null: false
    t.string "line_code"
    t.string "note_type"
    t.text "position"
2736
    t.string "in_reply_to_discussion_id"
2737
    t.index ["reply_key"], name: "index_sent_notifications_on_reply_key", unique: true, using: :btree
Douwe Maan's avatar
Douwe Maan committed
2738 2739
  end

Valery Sizov's avatar
Valery Sizov committed
2740
  create_table "services", force: :cascade do |t|
2741 2742 2743
    t.string "type"
    t.string "title"
    t.integer "project_id"
2744 2745
    t.datetime "created_at"
    t.datetime "updated_at"
2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758
    t.boolean "active", default: false, null: false
    t.text "properties"
    t.boolean "template", default: false
    t.boolean "push_events", default: true
    t.boolean "issues_events", default: true
    t.boolean "merge_requests_events", default: true
    t.boolean "tag_push_events", default: true
    t.boolean "note_events", default: true, null: false
    t.string "category", default: "common", null: false
    t.boolean "default", default: false
    t.boolean "wiki_page_events", default: true
    t.boolean "pipeline_events", default: false, null: false
    t.boolean "confidential_issues_events", default: true, null: false
2759
    t.boolean "commit_events", default: true, null: false
2760
    t.boolean "job_events", default: false, null: false
2761
    t.boolean "confidential_note_events", default: true
2762 2763
    t.index ["project_id"], name: "index_services_on_project_id", using: :btree
    t.index ["template"], name: "index_services_on_template", using: :btree
2764
    t.index ["type"], name: "index_services_on_type", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
2765 2766
  end

2767 2768
  create_table "shards", force: :cascade do |t|
    t.string "name", null: false
2769
    t.index ["name"], name: "index_shards_on_name", unique: true, using: :btree
2770 2771
  end

Valery Sizov's avatar
Valery Sizov committed
2772 2773 2774 2775 2776 2777
  create_table "slack_integrations", force: :cascade do |t|
    t.integer "service_id", null: false
    t.string "team_id", null: false
    t.string "team_name", null: false
    t.string "alias", null: false
    t.string "user_id", null: false
2778 2779
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2780 2781
    t.index ["service_id"], name: "index_slack_integrations_on_service_id", using: :btree
    t.index ["team_id", "alias"], name: "index_slack_integrations_on_team_id_and_alias", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
2782 2783
  end

2784 2785 2786 2787 2788 2789 2790
  create_table "smartcard_identities", id: :bigserial, force: :cascade do |t|
    t.integer "user_id", null: false
    t.string "subject", null: false
    t.string "issuer", null: false
    t.index ["subject", "issuer"], name: "index_smartcard_identities_on_subject_and_issuer", unique: true, using: :btree
    t.index ["user_id"], name: "index_smartcard_identities_on_user_id", using: :btree
  end
2791

Valery Sizov's avatar
Valery Sizov committed
2792
  create_table "snippets", force: :cascade do |t|
2793 2794 2795 2796
    t.string "title"
    t.text "content"
    t.integer "author_id", null: false
    t.integer "project_id"
2797 2798
    t.datetime "created_at"
    t.datetime "updated_at"
2799 2800 2801 2802 2803
    t.string "file_name"
    t.string "type"
    t.integer "visibility_level", default: 0, null: false
    t.text "title_html"
    t.text "content_html"
2804
    t.integer "cached_markdown_version"
2805 2806
    t.text "description"
    t.text "description_html"
2807 2808 2809 2810 2811 2812
    t.index ["author_id"], name: "index_snippets_on_author_id", using: :btree
    t.index ["file_name"], name: "index_snippets_on_file_name_trigram", using: :gin, opclasses: {"file_name"=>"gin_trgm_ops"}
    t.index ["project_id"], name: "index_snippets_on_project_id", using: :btree
    t.index ["title"], name: "index_snippets_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"}
    t.index ["updated_at"], name: "index_snippets_on_updated_at", using: :btree
    t.index ["visibility_level"], name: "index_snippets_on_visibility_level", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
2813 2814
  end

2815 2816 2817 2818
  create_table "software_license_policies", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "software_license_id", null: false
    t.integer "approval_status", default: 0, null: false
2819
    t.index ["project_id", "software_license_id"], name: "index_software_license_policies_unique_per_project", unique: true, using: :btree
Kamil Trzciński's avatar
Kamil Trzciński committed
2820
    t.index ["software_license_id"], name: "index_software_license_policies_on_software_license_id", using: :btree
2821 2822 2823 2824
  end

  create_table "software_licenses", force: :cascade do |t|
    t.string "name", null: false
2825
    t.index ["name"], name: "index_software_licenses_on_name", using: :btree
2826 2827
  end

2828
  create_table "spam_logs", force: :cascade do |t|
2829 2830 2831 2832 2833 2834 2835 2836 2837 2838
    t.integer "user_id"
    t.string "source_ip"
    t.string "user_agent"
    t.boolean "via_api"
    t.string "noteable_type"
    t.string "title"
    t.text "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean "submitted_as_ham", default: false, null: false
2839
    t.boolean "recaptcha_verified", default: false, null: false
2840 2841
  end

Valery Sizov's avatar
Valery Sizov committed
2842
  create_table "subscriptions", force: :cascade do |t|
2843 2844 2845 2846
    t.integer "user_id"
    t.integer "subscribable_id"
    t.string "subscribable_type"
    t.boolean "subscribed"
Valery Sizov's avatar
Valery Sizov committed
2847 2848
    t.datetime "created_at"
    t.datetime "updated_at"
2849
    t.integer "project_id"
Kamil Trzciński's avatar
Kamil Trzciński committed
2850
    t.index ["project_id"], name: "index_subscriptions_on_project_id", using: :btree
2851
    t.index ["subscribable_id", "subscribable_type", "user_id", "project_id"], name: "index_subscriptions_on_subscribable_and_user_id_and_project_id", unique: true, using: :btree
Valery Sizov's avatar
Valery Sizov committed
2852 2853
  end

2854 2855 2856 2857 2858 2859 2860 2861 2862 2863
  create_table "suggestions", id: :bigserial, force: :cascade do |t|
    t.integer "note_id", null: false
    t.integer "relative_order", limit: 2, null: false
    t.boolean "applied", default: false, null: false
    t.string "commit_id"
    t.text "from_content", null: false
    t.text "to_content", null: false
    t.index ["note_id", "relative_order"], name: "index_suggestions_on_note_id_and_relative_order", unique: true, using: :btree
  end

2864 2865 2866
  create_table "system_note_metadata", force: :cascade do |t|
    t.integer "note_id", null: false
    t.integer "commit_count"
2867
    t.string "action"
2868 2869
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2870
    t.index ["note_id"], name: "index_system_note_metadata_on_note_id", unique: true, using: :btree
2871 2872
  end

Valery Sizov's avatar
Valery Sizov committed
2873
  create_table "taggings", force: :cascade do |t|
2874 2875 2876 2877 2878 2879
    t.integer "tag_id"
    t.integer "taggable_id"
    t.string "taggable_type"
    t.integer "tagger_id"
    t.string "tagger_type"
    t.string "context"
Andrew8xx8's avatar
Andrew8xx8 committed
2880
    t.datetime "created_at"
2881 2882 2883 2884
    t.index ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true, using: :btree
    t.index ["tag_id"], name: "index_taggings_on_tag_id", using: :btree
    t.index ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree
    t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
2885 2886
  end

Valery Sizov's avatar
Valery Sizov committed
2887
  create_table "tags", force: :cascade do |t|
2888
    t.string "name"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
2889
    t.integer "taggings_count", default: 0
2890
    t.index ["name"], name: "index_tags_on_name", unique: true, using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
2891 2892
  end

2893 2894 2895 2896 2897 2898
  create_table "term_agreements", force: :cascade do |t|
    t.integer "term_id", null: false
    t.integer "user_id", null: false
    t.boolean "accepted", default: false, null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
2899 2900 2901
    t.index ["term_id"], name: "index_term_agreements_on_term_id", using: :btree
    t.index ["user_id", "term_id"], name: "term_agreements_unique_index", unique: true, using: :btree
    t.index ["user_id"], name: "index_term_agreements_on_user_id", using: :btree
2902 2903
  end

2904 2905
  create_table "timelogs", force: :cascade do |t|
    t.integer "time_spent", null: false
2906
    t.integer "user_id"
2907 2908
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2909 2910
    t.integer "issue_id"
    t.integer "merge_request_id"
2911
    t.datetime "spent_at"
2912 2913 2914
    t.index ["issue_id"], name: "index_timelogs_on_issue_id", using: :btree
    t.index ["merge_request_id"], name: "index_timelogs_on_merge_request_id", using: :btree
    t.index ["user_id"], name: "index_timelogs_on_user_id", using: :btree
2915 2916
  end

2917
  create_table "todos", force: :cascade do |t|
2918
    t.integer "user_id", null: false
2919
    t.integer "project_id"
2920 2921
    t.integer "target_id"
    t.string "target_type", null: false
2922
    t.integer "author_id", null: false
2923 2924
    t.integer "action", null: false
    t.string "state", null: false
Douglas Barbosa Alexandre's avatar
Douglas Barbosa Alexandre committed
2925 2926
    t.datetime "created_at"
    t.datetime "updated_at"
2927 2928
    t.integer "note_id"
    t.string "commit_id"
2929
    t.integer "group_id"
2930 2931 2932 2933 2934 2935 2936 2937 2938
    t.index ["author_id"], name: "index_todos_on_author_id", using: :btree
    t.index ["commit_id"], name: "index_todos_on_commit_id", using: :btree
    t.index ["group_id"], name: "index_todos_on_group_id", using: :btree
    t.index ["note_id"], name: "index_todos_on_note_id", using: :btree
    t.index ["project_id"], name: "index_todos_on_project_id", using: :btree
    t.index ["target_type", "target_id"], name: "index_todos_on_target_type_and_target_id", using: :btree
    t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_done", where: "((state)::text = 'done'::text)", using: :btree
    t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_pending", where: "((state)::text = 'pending'::text)", using: :btree
    t.index ["user_id"], name: "index_todos_on_user_id", using: :btree
Douglas Barbosa Alexandre's avatar
Douglas Barbosa Alexandre committed
2939 2940
  end

2941 2942
  create_table "trending_projects", force: :cascade do |t|
    t.integer "project_id", null: false
2943
    t.index ["project_id"], name: "index_trending_projects_on_project_id", unique: true, using: :btree
2944 2945
  end

2946
  create_table "u2f_registrations", force: :cascade do |t|
2947 2948 2949 2950 2951 2952 2953 2954
    t.text "certificate"
    t.string "key_handle"
    t.string "public_key"
    t.integer "counter"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "name"
2955 2956
    t.index ["key_handle"], name: "index_u2f_registrations_on_key_handle", using: :btree
    t.index ["user_id"], name: "index_u2f_registrations_on_user_id", using: :btree
2957 2958
  end

2959
  create_table "uploads", force: :cascade do |t|
2960
    t.bigint "size", null: false
2961
    t.string "path", limit: 511, null: false
2962 2963 2964 2965 2966
    t.string "checksum", limit: 64
    t.integer "model_id"
    t.string "model_type"
    t.string "uploader", null: false
    t.datetime "created_at", null: false
Micaël Bergeron's avatar
Micaël Bergeron committed
2967
    t.integer "store"
Micaël Bergeron's avatar
Micaël Bergeron committed
2968 2969
    t.string "mount_point"
    t.string "secret"
2970 2971 2972 2973
    t.index ["checksum"], name: "index_uploads_on_checksum", using: :btree
    t.index ["model_id", "model_type"], name: "index_uploads_on_model_id_and_model_type", using: :btree
    t.index ["store"], name: "index_uploads_on_store", using: :btree
    t.index ["uploader", "path"], name: "index_uploads_on_uploader_and_path", using: :btree
2974 2975
  end

2976
  create_table "user_agent_details", force: :cascade do |t|
2977 2978 2979 2980 2981 2982 2983
    t.string "user_agent", null: false
    t.string "ip_address", null: false
    t.integer "subject_id", null: false
    t.string "subject_type", null: false
    t.boolean "submitted", default: false, null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2984
    t.index ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type", using: :btree
2985 2986
  end

2987
  create_table "user_callouts", force: :cascade do |t|
2988
    t.integer "feature_name", null: false
2989
    t.integer "user_id", null: false
2990 2991
    t.index ["user_id", "feature_name"], name: "index_user_callouts_on_user_id_and_feature_name", unique: true, using: :btree
    t.index ["user_id"], name: "index_user_callouts_on_user_id", using: :btree
2992 2993
  end

2994
  create_table "user_custom_attributes", force: :cascade do |t|
2995 2996
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
2997 2998 2999
    t.integer "user_id", null: false
    t.string "key", null: false
    t.string "value", null: false
3000 3001
    t.index ["key", "value"], name: "index_user_custom_attributes_on_key_and_value", using: :btree
    t.index ["user_id", "key"], name: "index_user_custom_attributes_on_user_id_and_key", unique: true, using: :btree
3002 3003
  end

3004 3005 3006
  create_table "user_interacted_projects", id: false, force: :cascade do |t|
    t.integer "user_id", null: false
    t.integer "project_id", null: false
3007 3008
    t.index ["project_id", "user_id"], name: "index_user_interacted_projects_on_project_id_and_user_id", unique: true, using: :btree
    t.index ["user_id"], name: "index_user_interacted_projects_on_user_id", using: :btree
3009 3010
  end

3011 3012 3013 3014 3015 3016
  create_table "user_preferences", force: :cascade do |t|
    t.integer "user_id", null: false
    t.integer "issue_notes_filter", limit: 2, default: 0, null: false
    t.integer "merge_request_notes_filter", limit: 2, default: 0, null: false
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
Felipe Artur's avatar
Felipe Artur committed
3017
    t.string "epics_sort"
3018
    t.integer "roadmap_epics_state"
Felipe Artur's avatar
Felipe Artur committed
3019
    t.integer "epic_notes_filter", limit: 2, default: 0, null: false
3020 3021
    t.string "issues_sort"
    t.string "merge_requests_sort"
3022
    t.string "roadmaps_sort"
3023
    t.integer "first_day_of_week"
3024
    t.index ["user_id"], name: "index_user_preferences_on_user_id", unique: true, using: :btree
3025 3026
  end

3027 3028 3029 3030 3031
  create_table "user_statuses", primary_key: "user_id", force: :cascade do |t|
    t.integer "cached_markdown_version"
    t.string "emoji", default: "speech_balloon", null: false
    t.string "message", limit: 100
    t.string "message_html"
Kamil Trzciński's avatar
Kamil Trzciński committed
3032
    t.index ["user_id"], name: "index_user_statuses_on_user_id", using: :btree
3033 3034
  end

3035 3036 3037 3038 3039 3040
  create_table "user_synced_attributes_metadata", force: :cascade do |t|
    t.boolean "name_synced", default: false
    t.boolean "email_synced", default: false
    t.boolean "location_synced", default: false
    t.integer "user_id", null: false
    t.string "provider"
3041
    t.index ["user_id"], name: "index_user_synced_attributes_metadata_on_user_id", unique: true, using: :btree
3042 3043
  end

Valery Sizov's avatar
Valery Sizov committed
3044
  create_table "users", force: :cascade do |t|
3045 3046 3047
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
Andrew8xx8's avatar
Andrew8xx8 committed
3048 3049
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
3050
    t.integer "sign_in_count", default: 0
Andrew8xx8's avatar
Andrew8xx8 committed
3051 3052
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
3053 3054
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
3055 3056
    t.datetime "created_at"
    t.datetime "updated_at"
3057 3058
    t.string "name"
    t.boolean "admin", default: false, null: false
3059
    t.integer "projects_limit", null: false
3060 3061 3062 3063 3064
    t.string "skype", default: "", null: false
    t.string "linkedin", default: "", null: false
    t.string "twitter", default: "", null: false
    t.string "bio"
    t.integer "failed_attempts", default: 0
Andrew8xx8's avatar
Andrew8xx8 committed
3065
    t.datetime "locked_at"
3066 3067 3068 3069 3070
    t.string "username"
    t.boolean "can_create_group", default: true, null: false
    t.boolean "can_create_team", default: true, null: false
    t.string "state"
    t.integer "color_scheme_id", default: 1, null: false
3071
    t.datetime "password_expires_at"
3072
    t.integer "created_by_id"
Kamil Trzcinski's avatar
Kamil Trzcinski committed
3073
    t.datetime "last_credential_check_at"
3074 3075
    t.string "avatar"
    t.string "confirmation_token"
3076 3077
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
3078 3079 3080
    t.string "unconfirmed_email"
    t.boolean "hide_no_ssh_key", default: false
    t.string "website_url", default: "", null: false
Kamil Trzcinski's avatar
Kamil Trzcinski committed
3081
    t.datetime "admin_email_unsubscribed_at"
3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098
    t.string "notification_email"
    t.boolean "hide_no_password", default: false
    t.boolean "password_automatically_set", default: false
    t.string "location"
    t.string "encrypted_otp_secret"
    t.string "encrypted_otp_secret_iv"
    t.string "encrypted_otp_secret_salt"
    t.boolean "otp_required_for_login", default: false, null: false
    t.text "otp_backup_codes"
    t.string "public_email", default: "", null: false
    t.integer "dashboard", default: 0
    t.integer "project_view", default: 0
    t.integer "consumed_timestep"
    t.integer "layout", default: 0
    t.boolean "hide_project_limit", default: false
    t.text "note"
    t.string "unlock_token"
3099
    t.datetime "otp_grace_period_started_at"
3100
    t.boolean "external", default: false
Nick Thomas's avatar
Nick Thomas committed
3101
    t.string "incoming_email_token"
3102
    t.string "organization"
3103
    t.boolean "auditor", default: false, null: false
3104 3105
    t.boolean "require_two_factor_authentication_from_group", default: false, null: false
    t.integer "two_factor_grace_period", default: 48, null: false
3106
    t.boolean "ghost"
3107
    t.date "last_activity_on"
3108
    t.boolean "notified_of_own_activity"
3109
    t.boolean "support_bot"
3110
    t.string "preferred_language"
3111 3112
    t.boolean "email_opted_in"
    t.string "email_opted_in_ip"
3113
    t.integer "email_opted_in_source_id"
3114
    t.datetime "email_opted_in_at"
3115
    t.integer "theme_id", limit: 2
3116
    t.integer "accepted_term_id"
Micaël Bergeron's avatar
Micaël Bergeron committed
3117
    t.string "feed_token"
3118
    t.boolean "private_profile"
Mark Chao's avatar
Mark Chao committed
3119
    t.integer "roadmap_layout", limit: 2
3120
    t.boolean "include_private_contributions"
3121
    t.string "commit_email"
3122
    t.integer "group_view"
Kamil Trzciński's avatar
Kamil Trzciński committed
3123
    t.index ["accepted_term_id"], name: "index_users_on_accepted_term_id", using: :btree
3124 3125 3126 3127 3128 3129 3130
    t.index ["admin"], name: "index_users_on_admin", using: :btree
    t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree
    t.index ["created_at"], name: "index_users_on_created_at", using: :btree
    t.index ["email"], name: "index_users_on_email", unique: true, using: :btree
    t.index ["email"], name: "index_users_on_email_trigram", using: :gin, opclasses: {"email"=>"gin_trgm_ops"}
    t.index ["feed_token"], name: "index_users_on_feed_token", using: :btree
    t.index ["ghost"], name: "index_users_on_ghost", using: :btree
3131
    t.index ["group_view"], name: "index_users_on_group_view", using: :btree
3132 3133 3134 3135 3136 3137 3138 3139 3140
    t.index ["incoming_email_token"], name: "index_users_on_incoming_email_token", using: :btree
    t.index ["name"], name: "index_users_on_name", using: :btree
    t.index ["name"], name: "index_users_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"}
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
    t.index ["state"], name: "index_users_on_state", using: :btree
    t.index ["state"], name: "index_users_on_state_and_internal_attrs", where: "((ghost <> true) AND (support_bot <> true))", using: :btree
    t.index ["support_bot"], name: "index_users_on_support_bot", using: :btree
    t.index ["username"], name: "index_users_on_username", using: :btree
    t.index ["username"], name: "index_users_on_username_trigram", using: :gin, opclasses: {"username"=>"gin_trgm_ops"}
Andrew8xx8's avatar
Andrew8xx8 committed
3141 3142
  end

3143 3144 3145 3146 3147
  create_table "users_ops_dashboard_projects", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "user_id", null: false
    t.integer "project_id", null: false
3148 3149
    t.index ["project_id"], name: "index_users_ops_dashboard_projects_on_project_id", using: :btree
    t.index ["user_id", "project_id"], name: "index_users_ops_dashboard_projects_on_user_id_and_project_id", unique: true, using: :btree
3150 3151
  end

Valery Sizov's avatar
Valery Sizov committed
3152
  create_table "users_star_projects", force: :cascade do |t|
3153 3154
    t.integer "project_id", null: false
    t.integer "user_id", null: false
Ciro Santilli's avatar
Ciro Santilli committed
3155 3156
    t.datetime "created_at"
    t.datetime "updated_at"
3157 3158
    t.index ["project_id"], name: "index_users_star_projects_on_project_id", using: :btree
    t.index ["user_id", "project_id"], name: "index_users_star_projects_on_user_id_and_project_id", unique: true, using: :btree
Ciro Santilli's avatar
Ciro Santilli committed
3159 3160
  end

3161 3162 3163 3164 3165 3166 3167 3168 3169 3170
  create_table "vulnerability_feedback", force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "feedback_type", limit: 2, null: false
    t.integer "category", limit: 2, null: false
    t.integer "project_id", null: false
    t.integer "author_id", null: false
    t.integer "pipeline_id"
    t.integer "issue_id"
    t.string "project_fingerprint", limit: 40, null: false
3171 3172 3173 3174
    t.index ["author_id"], name: "index_vulnerability_feedback_on_author_id", using: :btree
    t.index ["issue_id"], name: "index_vulnerability_feedback_on_issue_id", using: :btree
    t.index ["pipeline_id"], name: "index_vulnerability_feedback_on_pipeline_id", using: :btree
    t.index ["project_id", "category", "feedback_type", "project_fingerprint"], name: "vulnerability_feedback_unique_idx", unique: true, using: :btree
3175 3176
  end

3177 3178 3179 3180 3181 3182 3183 3184 3185
  create_table "vulnerability_identifiers", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "project_id", null: false
    t.binary "fingerprint", null: false
    t.string "external_type", null: false
    t.string "external_id", null: false
    t.string "name", null: false
    t.text "url"
3186
    t.index ["project_id", "fingerprint"], name: "index_vulnerability_identifiers_on_project_id_and_fingerprint", unique: true, using: :btree
3187 3188 3189 3190 3191
  end

  create_table "vulnerability_occurrence_identifiers", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
3192 3193 3194 3195
    t.bigint "occurrence_id", null: false
    t.bigint "identifier_id", null: false
    t.index ["identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_identifier_id", using: :btree
    t.index ["occurrence_id", "identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_unique_keys", unique: true, using: :btree
3196 3197
  end

3198 3199 3200
  create_table "vulnerability_occurrence_pipelines", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
3201
    t.bigint "occurrence_id", null: false
3202
    t.integer "pipeline_id", null: false
3203 3204
    t.index ["occurrence_id", "pipeline_id"], name: "vulnerability_occurrence_pipelines_on_unique_keys", unique: true, using: :btree
    t.index ["pipeline_id"], name: "index_vulnerability_occurrence_pipelines_on_pipeline_id", using: :btree
3205 3206
  end

3207 3208 3209 3210 3211 3212 3213
  create_table "vulnerability_occurrences", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "severity", limit: 2, null: false
    t.integer "confidence", limit: 2, null: false
    t.integer "report_type", limit: 2, null: false
    t.integer "project_id", null: false
3214 3215
    t.bigint "scanner_id", null: false
    t.bigint "primary_identifier_id", null: false
3216 3217
    t.binary "project_fingerprint", null: false
    t.binary "location_fingerprint", null: false
3218
    t.string "uuid", limit: 36, null: false
3219 3220 3221
    t.string "name", null: false
    t.string "metadata_version", null: false
    t.text "raw_metadata", null: false
3222 3223 3224 3225
    t.index ["primary_identifier_id"], name: "index_vulnerability_occurrences_on_primary_identifier_id", using: :btree
    t.index ["project_id", "primary_identifier_id", "location_fingerprint", "scanner_id"], name: "index_vulnerability_occurrences_on_unique_keys", unique: true, using: :btree
    t.index ["scanner_id"], name: "index_vulnerability_occurrences_on_scanner_id", using: :btree
    t.index ["uuid"], name: "index_vulnerability_occurrences_on_uuid", unique: true, using: :btree
3226 3227 3228 3229 3230 3231 3232 3233
  end

  create_table "vulnerability_scanners", id: :bigserial, force: :cascade do |t|
    t.datetime_with_timezone "created_at", null: false
    t.datetime_with_timezone "updated_at", null: false
    t.integer "project_id", null: false
    t.string "external_id", null: false
    t.string "name", null: false
3234
    t.index ["project_id", "external_id"], name: "index_vulnerability_scanners_on_project_id_and_external_id", unique: true, using: :btree
3235 3236
  end

3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249
  create_table "web_hook_logs", force: :cascade do |t|
    t.integer "web_hook_id", null: false
    t.string "trigger"
    t.string "url"
    t.text "request_headers"
    t.text "request_data"
    t.text "response_headers"
    t.text "response_body"
    t.string "response_status"
    t.float "execution_duration"
    t.string "internal_error_message"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
3250 3251
    t.index ["created_at", "web_hook_id"], name: "index_web_hook_logs_on_created_at_and_web_hook_id", using: :btree
    t.index ["web_hook_id"], name: "index_web_hook_logs_on_web_hook_id", using: :btree
3252 3253
  end

Valery Sizov's avatar
Valery Sizov committed
3254
  create_table "web_hooks", force: :cascade do |t|
3255
    t.integer "project_id"
3256 3257
    t.datetime "created_at"
    t.datetime "updated_at"
3258 3259 3260 3261 3262 3263 3264 3265 3266
    t.string "type", default: "ProjectHook"
    t.integer "service_id"
    t.boolean "push_events", default: true, null: false
    t.boolean "issues_events", default: false, null: false
    t.boolean "merge_requests_events", default: false, null: false
    t.boolean "tag_push_events", default: false
    t.integer "group_id"
    t.boolean "note_events", default: false, null: false
    t.boolean "enable_ssl_verification", default: true
3267
    t.boolean "wiki_page_events", default: false, null: false
3268 3269
    t.boolean "pipeline_events", default: false, null: false
    t.boolean "confidential_issues_events", default: false, null: false
3270
    t.boolean "repository_update_events", default: false, null: false
Luke "Jared" Bennett's avatar
Luke "Jared" Bennett committed
3271
    t.boolean "job_events", default: false, null: false
3272
    t.boolean "confidential_note_events"
3273
    t.text "push_events_branch_filter"
3274 3275 3276 3277
    t.string "encrypted_token"
    t.string "encrypted_token_iv"
    t.string "encrypted_url"
    t.string "encrypted_url_iv"
3278 3279
    t.index ["project_id"], name: "index_web_hooks_on_project_id", using: :btree
    t.index ["type"], name: "index_web_hooks_on_type", using: :btree
Andrew8xx8's avatar
Andrew8xx8 committed
3280 3281
  end

3282
  add_foreign_key "application_settings", "namespaces", column: "custom_project_templates_group_id", on_delete: :nullify
3283
  add_foreign_key "application_settings", "projects", column: "file_template_project_id", name: "fk_ec757bd087", on_delete: :nullify
3284
  add_foreign_key "application_settings", "users", column: "usage_stats_set_by_user_id", name: "fk_964370041d", on_delete: :nullify
3285 3286
  add_foreign_key "approval_merge_request_rule_sources", "approval_merge_request_rules", on_delete: :cascade
  add_foreign_key "approval_merge_request_rule_sources", "approval_project_rules", on_delete: :cascade
3287
  add_foreign_key "approval_merge_request_rules", "merge_requests", on_delete: :cascade
3288 3289
  add_foreign_key "approval_merge_request_rules_approved_approvers", "approval_merge_request_rules", on_delete: :cascade
  add_foreign_key "approval_merge_request_rules_approved_approvers", "users", on_delete: :cascade
3290 3291 3292 3293 3294 3295 3296 3297 3298
  add_foreign_key "approval_merge_request_rules_groups", "approval_merge_request_rules", on_delete: :cascade
  add_foreign_key "approval_merge_request_rules_groups", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "approval_merge_request_rules_users", "approval_merge_request_rules", on_delete: :cascade
  add_foreign_key "approval_merge_request_rules_users", "users", on_delete: :cascade
  add_foreign_key "approval_project_rules", "projects", on_delete: :cascade
  add_foreign_key "approval_project_rules_groups", "approval_project_rules", on_delete: :cascade
  add_foreign_key "approval_project_rules_groups", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "approval_project_rules_users", "approval_project_rules", on_delete: :cascade
  add_foreign_key "approval_project_rules_users", "users", on_delete: :cascade
3299
  add_foreign_key "approvals", "merge_requests", name: "fk_310d714958", on_delete: :cascade
Valery Sizov's avatar
Valery Sizov committed
3300
  add_foreign_key "approver_groups", "namespaces", column: "group_id", on_delete: :cascade
3301 3302
  add_foreign_key "badges", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "badges", "projects", on_delete: :cascade
3303 3304
  add_foreign_key "board_assignees", "boards", on_delete: :cascade
  add_foreign_key "board_assignees", "users", column: "assignee_id", on_delete: :cascade
3305 3306 3307
  add_foreign_key "board_group_recent_visits", "boards", on_delete: :cascade
  add_foreign_key "board_group_recent_visits", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "board_group_recent_visits", "users", on_delete: :cascade
3308 3309
  add_foreign_key "board_labels", "boards", on_delete: :cascade
  add_foreign_key "board_labels", "labels", on_delete: :cascade
3310 3311 3312
  add_foreign_key "board_project_recent_visits", "boards", on_delete: :cascade
  add_foreign_key "board_project_recent_visits", "projects", on_delete: :cascade
  add_foreign_key "board_project_recent_visits", "users", on_delete: :cascade
Felipe Artur's avatar
Felipe Artur committed
3313
  add_foreign_key "boards", "namespaces", column: "group_id", name: "fk_1e9a074a35", on_delete: :cascade
3314
  add_foreign_key "boards", "projects", name: "fk_f15266b5f9", on_delete: :cascade
3315
  add_foreign_key "chat_teams", "namespaces", on_delete: :cascade
3316
  add_foreign_key "ci_build_trace_chunks", "ci_builds", column: "build_id", on_delete: :cascade
3317 3318 3319 3320
  add_foreign_key "ci_build_trace_section_names", "projects", on_delete: :cascade
  add_foreign_key "ci_build_trace_sections", "ci_build_trace_section_names", column: "section_name_id", name: "fk_264e112c66", on_delete: :cascade
  add_foreign_key "ci_build_trace_sections", "ci_builds", column: "build_id", name: "fk_4ebe41f502", on_delete: :cascade
  add_foreign_key "ci_build_trace_sections", "projects", on_delete: :cascade
3321
  add_foreign_key "ci_builds", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_a2141b1522", on_delete: :nullify
3322
  add_foreign_key "ci_builds", "ci_pipelines", column: "commit_id", name: "fk_d3130c9a7f", on_delete: :cascade
3323
  add_foreign_key "ci_builds", "ci_stages", column: "stage_id", name: "fk_3a9eaa254d", on_delete: :cascade
3324
  add_foreign_key "ci_builds", "projects", name: "fk_befce0568a", on_delete: :cascade
3325 3326
  add_foreign_key "ci_builds_metadata", "ci_builds", column: "build_id", on_delete: :cascade
  add_foreign_key "ci_builds_metadata", "projects", on_delete: :cascade
3327
  add_foreign_key "ci_builds_runner_session", "ci_builds", column: "build_id", on_delete: :cascade
Shinya Maeda's avatar
Shinya Maeda committed
3328
  add_foreign_key "ci_group_variables", "namespaces", column: "group_id", name: "fk_33ae4d58d8", on_delete: :cascade
3329 3330
  add_foreign_key "ci_job_artifacts", "ci_builds", column: "job_id", on_delete: :cascade
  add_foreign_key "ci_job_artifacts", "projects", on_delete: :cascade
3331 3332
  add_foreign_key "ci_pipeline_chat_data", "chat_names", on_delete: :cascade
  add_foreign_key "ci_pipeline_chat_data", "ci_pipelines", column: "pipeline_id", on_delete: :cascade
Shinya Maeda's avatar
fix  
Shinya Maeda committed
3333
  add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade
3334
  add_foreign_key "ci_pipeline_schedules", "projects", name: "fk_8ead60fcc4", on_delete: :cascade
3335
  add_foreign_key "ci_pipeline_schedules", "users", column: "owner_id", name: "fk_9ea99f58d2", on_delete: :nullify
3336
  add_foreign_key "ci_pipeline_variables", "ci_pipelines", column: "pipeline_id", name: "fk_f29c5f4380", on_delete: :cascade
Kamil Trzcinski's avatar
Kamil Trzcinski committed
3337 3338
  add_foreign_key "ci_pipelines", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_3d34ab2e06", on_delete: :nullify
  add_foreign_key "ci_pipelines", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_262d4c2d19", on_delete: :nullify
Shinya Maeda's avatar
Shinya Maeda committed
3339
  add_foreign_key "ci_pipelines", "merge_requests", name: "fk_a23be95014", on_delete: :cascade
3340
  add_foreign_key "ci_pipelines", "projects", name: "fk_86635dbd80", on_delete: :cascade
3341
  add_foreign_key "ci_runner_namespaces", "ci_runners", column: "runner_id", on_delete: :cascade
3342
  add_foreign_key "ci_runner_namespaces", "namespaces", on_delete: :cascade
3343
  add_foreign_key "ci_runner_projects", "projects", name: "fk_4478a6f1e4", on_delete: :cascade
3344 3345 3346 3347 3348
  add_foreign_key "ci_sources_pipelines", "ci_builds", column: "source_job_id", name: "fk_be5624bf37", on_delete: :cascade
  add_foreign_key "ci_sources_pipelines", "ci_pipelines", column: "pipeline_id", name: "fk_e1bad85861", on_delete: :cascade
  add_foreign_key "ci_sources_pipelines", "ci_pipelines", column: "source_pipeline_id", name: "fk_d4e29af7d7", on_delete: :cascade
  add_foreign_key "ci_sources_pipelines", "projects", column: "source_project_id", name: "fk_acd9737679", on_delete: :cascade
  add_foreign_key "ci_sources_pipelines", "projects", name: "fk_1e53c97c0a", on_delete: :cascade
3349
  add_foreign_key "ci_stages", "ci_pipelines", column: "pipeline_id", name: "fk_fb57e6cc56", on_delete: :cascade
3350
  add_foreign_key "ci_stages", "projects", name: "fk_2360681d1d", on_delete: :cascade
3351
  add_foreign_key "ci_trigger_requests", "ci_triggers", column: "trigger_id", name: "fk_b8ec8b7245", on_delete: :cascade
3352
  add_foreign_key "ci_triggers", "projects", name: "fk_e3e63f966e", on_delete: :cascade
3353
  add_foreign_key "ci_triggers", "users", column: "owner_id", name: "fk_e8e10d1964", on_delete: :cascade
3354
  add_foreign_key "ci_variables", "projects", name: "fk_ada5eb64b3", on_delete: :cascade
3355 3356
  add_foreign_key "cluster_groups", "clusters", on_delete: :cascade
  add_foreign_key "cluster_groups", "namespaces", column: "group_id", on_delete: :cascade
Shinya Maeda's avatar
Shinya Maeda committed
3357 3358 3359 3360 3361
  add_foreign_key "cluster_platforms_kubernetes", "clusters", on_delete: :cascade
  add_foreign_key "cluster_projects", "clusters", on_delete: :cascade
  add_foreign_key "cluster_projects", "projects", on_delete: :cascade
  add_foreign_key "cluster_providers_gcp", "clusters", on_delete: :cascade
  add_foreign_key "clusters", "users", on_delete: :nullify
Amit Rathi's avatar
Amit Rathi committed
3362
  add_foreign_key "clusters_applications_cert_managers", "clusters", on_delete: :cascade
3363
  add_foreign_key "clusters_applications_helm", "clusters", on_delete: :cascade
3364
  add_foreign_key "clusters_applications_ingress", "clusters", on_delete: :cascade
Micaël Bergeron's avatar
Micaël Bergeron committed
3365 3366
  add_foreign_key "clusters_applications_jupyter", "clusters", on_delete: :cascade
  add_foreign_key "clusters_applications_jupyter", "oauth_applications", on_delete: :nullify
Chris Baumbauer's avatar
Chris Baumbauer committed
3367
  add_foreign_key "clusters_applications_knative", "clusters", on_delete: :cascade
3368
  add_foreign_key "clusters_applications_prometheus", "clusters", name: "fk_557e773639", on_delete: :cascade
3369 3370
  add_foreign_key "clusters_applications_runners", "ci_runners", column: "runner_id", name: "fk_02de2ded36", on_delete: :nullify
  add_foreign_key "clusters_applications_runners", "clusters", on_delete: :cascade
3371 3372 3373
  add_foreign_key "clusters_kubernetes_namespaces", "cluster_projects", on_delete: :nullify
  add_foreign_key "clusters_kubernetes_namespaces", "clusters", on_delete: :cascade
  add_foreign_key "clusters_kubernetes_namespaces", "projects", on_delete: :nullify
Valery Sizov's avatar
Valery Sizov committed
3374
  add_foreign_key "container_repositories", "projects"
3375 3376
  add_foreign_key "deploy_keys_projects", "projects", name: "fk_58a901ca7e", on_delete: :cascade
  add_foreign_key "deployments", "projects", name: "fk_b9a3851b82", on_delete: :cascade
3377 3378
  add_foreign_key "draft_notes", "merge_requests", on_delete: :cascade
  add_foreign_key "draft_notes", "users", column: "author_id", on_delete: :cascade
3379
  add_foreign_key "environments", "projects", name: "fk_d1c8c1da6a", on_delete: :cascade
3380 3381
  add_foreign_key "epic_issues", "epics", on_delete: :cascade
  add_foreign_key "epic_issues", "issues", on_delete: :cascade
Clement Ho's avatar
Clement Ho committed
3382
  add_foreign_key "epic_metrics", "epics", on_delete: :cascade
Jarka Košanová's avatar
Jarka Košanová committed
3383
  add_foreign_key "epics", "epics", column: "parent_id", name: "fk_25b99c1be3", on_delete: :cascade
Clement Ho's avatar
Clement Ho committed
3384 3385 3386 3387
  add_foreign_key "epics", "milestones", on_delete: :nullify
  add_foreign_key "epics", "namespaces", column: "group_id", name: "fk_f081aa4489", on_delete: :cascade
  add_foreign_key "epics", "users", column: "assignee_id", name: "fk_dccd3f98fc", on_delete: :nullify
  add_foreign_key "epics", "users", column: "author_id", name: "fk_3654b61b03", on_delete: :cascade
3388
  add_foreign_key "epics", "users", column: "closed_by_id", name: "fk_aa5798e761", on_delete: :nullify
3389 3390
  add_foreign_key "events", "projects", on_delete: :cascade
  add_foreign_key "events", "users", column: "author_id", name: "fk_edfd187b6f", on_delete: :cascade
3391 3392 3393
  add_foreign_key "fork_network_members", "fork_networks", on_delete: :cascade
  add_foreign_key "fork_network_members", "projects", column: "forked_from_project_id", name: "fk_b01280dae4", on_delete: :nullify
  add_foreign_key "fork_network_members", "projects", on_delete: :cascade
3394
  add_foreign_key "fork_networks", "projects", column: "root_project_id", name: "fk_e7b436b2b5", on_delete: :nullify
3395
  add_foreign_key "forked_project_links", "projects", column: "forked_to_project_id", name: "fk_434510edb0", on_delete: :cascade
3396
  add_foreign_key "geo_event_log", "geo_cache_invalidation_events", column: "cache_invalidation_event_id", name: "fk_42c3b54bed", on_delete: :cascade
3397
  add_foreign_key "geo_event_log", "geo_hashed_storage_migrated_events", column: "hashed_storage_migrated_event_id", name: "fk_27548c6db3", on_delete: :cascade
3398
  add_foreign_key "geo_event_log", "geo_job_artifact_deleted_events", column: "job_artifact_deleted_event_id", name: "fk_176d3fbb5d", on_delete: :cascade
3399
  add_foreign_key "geo_event_log", "geo_lfs_object_deleted_events", column: "lfs_object_deleted_event_id", name: "fk_d5af95fcd9", on_delete: :cascade
3400
  add_foreign_key "geo_event_log", "geo_repositories_changed_events", column: "repositories_changed_event_id", name: "fk_4a99ebfd60", on_delete: :cascade
3401
  add_foreign_key "geo_event_log", "geo_repository_created_events", column: "repository_created_event_id", name: "fk_9b9afb1916", on_delete: :cascade
Stan Hu's avatar
Stan Hu committed
3402
  add_foreign_key "geo_event_log", "geo_repository_deleted_events", column: "repository_deleted_event_id", name: "fk_c4b1c1f66e", on_delete: :cascade
3403
  add_foreign_key "geo_event_log", "geo_repository_renamed_events", column: "repository_renamed_event_id", name: "fk_86c84214ec", on_delete: :cascade
3404
  add_foreign_key "geo_event_log", "geo_repository_updated_events", column: "repository_updated_event_id", name: "fk_78a6492f68", on_delete: :cascade
3405
  add_foreign_key "geo_event_log", "geo_reset_checksum_events", column: "reset_checksum_event_id", name: "fk_cff7185ad2", on_delete: :cascade
3406
  add_foreign_key "geo_event_log", "geo_upload_deleted_events", column: "upload_deleted_event_id", name: "fk_c1f241c70d", on_delete: :cascade
3407
  add_foreign_key "geo_hashed_storage_attachments_events", "projects", on_delete: :cascade
3408
  add_foreign_key "geo_hashed_storage_migrated_events", "projects", on_delete: :cascade
3409
  add_foreign_key "geo_node_namespace_links", "geo_nodes", on_delete: :cascade
3410
  add_foreign_key "geo_node_namespace_links", "namespaces", on_delete: :cascade
3411
  add_foreign_key "geo_node_statuses", "geo_nodes", on_delete: :cascade
3412
  add_foreign_key "geo_repositories_changed_events", "geo_nodes", on_delete: :cascade
3413
  add_foreign_key "geo_repository_created_events", "projects", on_delete: :cascade
3414
  add_foreign_key "geo_repository_renamed_events", "projects", on_delete: :cascade
3415
  add_foreign_key "geo_repository_updated_events", "projects", on_delete: :cascade
3416
  add_foreign_key "geo_reset_checksum_events", "projects", on_delete: :cascade
3417
  add_foreign_key "gitlab_subscriptions", "namespaces", name: "fk_e2595d00a1", on_delete: :cascade
3418
  add_foreign_key "gitlab_subscriptions", "plans", column: "hosted_plan_id", name: "fk_bd0c4019c3", on_delete: :cascade
3419
  add_foreign_key "gpg_key_subkeys", "gpg_keys", on_delete: :cascade
3420
  add_foreign_key "gpg_keys", "users", on_delete: :cascade
3421
  add_foreign_key "gpg_signatures", "gpg_key_subkeys", on_delete: :nullify
3422 3423
  add_foreign_key "gpg_signatures", "gpg_keys", on_delete: :nullify
  add_foreign_key "gpg_signatures", "projects", on_delete: :cascade
3424
  add_foreign_key "group_custom_attributes", "namespaces", column: "group_id", on_delete: :cascade
3425
  add_foreign_key "identities", "saml_providers", name: "fk_aade90f0fc", on_delete: :cascade
3426
  add_foreign_key "import_export_uploads", "projects", on_delete: :cascade
3427
  add_foreign_key "index_statuses", "projects", name: "fk_74b2492545", on_delete: :cascade
3428
  add_foreign_key "internal_ids", "namespaces", name: "fk_162941d509", on_delete: :cascade
3429
  add_foreign_key "internal_ids", "projects", on_delete: :cascade
3430 3431
  add_foreign_key "issue_assignees", "issues", name: "fk_b7d881734a", on_delete: :cascade
  add_foreign_key "issue_assignees", "users", name: "fk_5e0c8d9154", on_delete: :cascade
3432 3433
  add_foreign_key "issue_links", "issues", column: "source_id", name: "fk_c900194ff2", on_delete: :cascade
  add_foreign_key "issue_links", "issues", column: "target_id", name: "fk_e71bb44f1f", on_delete: :cascade
3434
  add_foreign_key "issue_metrics", "issues", on_delete: :cascade
3435 3436
  add_foreign_key "issues", "issues", column: "moved_to_id", name: "fk_a194299be1", on_delete: :nullify
  add_foreign_key "issues", "milestones", name: "fk_96b1dd429c", on_delete: :nullify
3437
  add_foreign_key "issues", "projects", name: "fk_899c8f3231", on_delete: :cascade
3438
  add_foreign_key "issues", "users", column: "author_id", name: "fk_05f1e72feb", on_delete: :nullify
haseeb's avatar
haseeb committed
3439
  add_foreign_key "issues", "users", column: "closed_by_id", name: "fk_c63cbf6c25", on_delete: :nullify
3440
  add_foreign_key "issues", "users", column: "updated_by_id", name: "fk_ffed080f01", on_delete: :nullify
Stan Hu's avatar
Stan Hu committed
3441
  add_foreign_key "label_links", "labels", name: "fk_d97dd08678", on_delete: :cascade
3442 3443
  add_foreign_key "label_priorities", "labels", on_delete: :cascade
  add_foreign_key "label_priorities", "projects", on_delete: :cascade
3444
  add_foreign_key "labels", "namespaces", column: "group_id", on_delete: :cascade
3445
  add_foreign_key "labels", "projects", name: "fk_7de4989a69", on_delete: :cascade
3446 3447
  add_foreign_key "lfs_file_locks", "projects", on_delete: :cascade
  add_foreign_key "lfs_file_locks", "users", on_delete: :cascade
3448 3449
  add_foreign_key "lists", "boards", name: "fk_0d3f677137", on_delete: :cascade
  add_foreign_key "lists", "labels", name: "fk_7a5553d60f", on_delete: :cascade
3450
  add_foreign_key "lists", "milestones", on_delete: :cascade
3451
  add_foreign_key "lists", "users", name: "fk_d6cf4279f7", on_delete: :cascade
3452
  add_foreign_key "members", "users", name: "fk_2e88fb7ce9", on_delete: :cascade
3453
  add_foreign_key "merge_request_diff_commits", "merge_request_diffs", on_delete: :cascade
3454
  add_foreign_key "merge_request_diff_files", "merge_request_diffs", on_delete: :cascade
3455
  add_foreign_key "merge_request_diffs", "merge_requests", name: "fk_8483f3258f", on_delete: :cascade
3456
  add_foreign_key "merge_request_metrics", "ci_pipelines", column: "pipeline_id", on_delete: :cascade
3457
  add_foreign_key "merge_request_metrics", "merge_requests", on_delete: :cascade
3458 3459
  add_foreign_key "merge_request_metrics", "users", column: "latest_closed_by_id", name: "fk_ae440388cc", on_delete: :nullify
  add_foreign_key "merge_request_metrics", "users", column: "merged_by_id", name: "fk_7f28d925f3", on_delete: :nullify
3460
  add_foreign_key "merge_requests", "ci_pipelines", column: "head_pipeline_id", name: "fk_fd82eae0b9", on_delete: :nullify
3461
  add_foreign_key "merge_requests", "merge_request_diffs", column: "latest_merge_request_diff_id", name: "fk_06067f5644", on_delete: :nullify
3462 3463
  add_foreign_key "merge_requests", "milestones", name: "fk_6a5165a692", on_delete: :nullify
  add_foreign_key "merge_requests", "projects", column: "source_project_id", name: "fk_3308fe130c", on_delete: :nullify
3464
  add_foreign_key "merge_requests", "projects", column: "target_project_id", name: "fk_a6963e8447", on_delete: :cascade
3465 3466 3467 3468
  add_foreign_key "merge_requests", "users", column: "assignee_id", name: "fk_6149611a04", on_delete: :nullify
  add_foreign_key "merge_requests", "users", column: "author_id", name: "fk_e719a85f8a", on_delete: :nullify
  add_foreign_key "merge_requests", "users", column: "merge_user_id", name: "fk_ad525e1f87", on_delete: :nullify
  add_foreign_key "merge_requests", "users", column: "updated_by_id", name: "fk_641731faff", on_delete: :nullify
3469 3470
  add_foreign_key "merge_requests_closing_issues", "issues", on_delete: :cascade
  add_foreign_key "merge_requests_closing_issues", "merge_requests", on_delete: :cascade
Felipe Artur's avatar
Felipe Artur committed
3471
  add_foreign_key "milestones", "namespaces", column: "group_id", name: "fk_95650a40d4", on_delete: :cascade
3472
  add_foreign_key "milestones", "projects", name: "fk_9bd0a0c791", on_delete: :cascade
3473
  add_foreign_key "namespace_statistics", "namespaces", on_delete: :cascade
3474
  add_foreign_key "namespaces", "namespaces", column: "custom_project_templates_group_id", name: "fk_e7a0b20a6b", on_delete: :nullify
3475
  add_foreign_key "namespaces", "plans", name: "fk_fdd12e5b80", on_delete: :nullify
Nick Thomas's avatar
Nick Thomas committed
3476
  add_foreign_key "namespaces", "projects", column: "file_template_project_id", name: "fk_319256d87a", on_delete: :nullify
3477
  add_foreign_key "note_diff_files", "notes", column: "diff_note_id", on_delete: :cascade
3478
  add_foreign_key "notes", "projects", name: "fk_99e097b079", on_delete: :cascade
3479
  add_foreign_key "notes", "reviews", name: "fk_2e82291620", on_delete: :nullify
3480
  add_foreign_key "notification_settings", "users", name: "fk_0c95e91db7", on_delete: :cascade
Nick Thomas's avatar
Nick Thomas committed
3481
  add_foreign_key "oauth_openid_requests", "oauth_access_grants", column: "access_grant_id", name: "fk_oauth_openid_requests_oauth_access_grants_access_grant_id"
3482
  add_foreign_key "operations_feature_flag_scopes", "operations_feature_flags", column: "feature_flag_id", on_delete: :cascade
3483
  add_foreign_key "operations_feature_flags", "projects", on_delete: :cascade
3484
  add_foreign_key "operations_feature_flags_clients", "projects", on_delete: :cascade
3485 3486
  add_foreign_key "packages_maven_metadata", "packages_packages", column: "package_id", name: "fk_be88aed360", on_delete: :cascade
  add_foreign_key "packages_package_files", "packages_packages", column: "package_id", name: "fk_86f0f182f8", on_delete: :cascade
3487
  add_foreign_key "packages_packages", "projects", on_delete: :cascade
3488
  add_foreign_key "pages_domains", "projects", name: "fk_ea2f6dfc6f", on_delete: :cascade
3489
  add_foreign_key "path_locks", "projects", name: "fk_5265c98f24", on_delete: :cascade
Valery Sizov's avatar
Valery Sizov committed
3490
  add_foreign_key "path_locks", "users"
3491
  add_foreign_key "personal_access_tokens", "users"
3492
  add_foreign_key "pool_repositories", "projects", column: "source_project_id", on_delete: :nullify
3493
  add_foreign_key "pool_repositories", "shards", on_delete: :restrict
3494
  add_foreign_key "project_alerting_settings", "projects", on_delete: :cascade
3495 3496
  add_foreign_key "project_authorizations", "projects", on_delete: :cascade
  add_foreign_key "project_authorizations", "users", on_delete: :cascade
3497
  add_foreign_key "project_auto_devops", "projects", on_delete: :cascade
3498
  add_foreign_key "project_ci_cd_settings", "projects", name: "fk_24c15d2f2e", on_delete: :cascade
3499
  add_foreign_key "project_custom_attributes", "projects", on_delete: :cascade
3500
  add_foreign_key "project_daily_statistics", "projects", on_delete: :cascade
3501 3502
  add_foreign_key "project_deploy_tokens", "deploy_tokens", on_delete: :cascade
  add_foreign_key "project_deploy_tokens", "projects", on_delete: :cascade
3503
  add_foreign_key "project_error_tracking_settings", "projects", on_delete: :cascade
3504
  add_foreign_key "project_feature_usages", "projects", on_delete: :cascade
3505 3506 3507
  add_foreign_key "project_features", "projects", name: "fk_18513d9b92", on_delete: :cascade
  add_foreign_key "project_group_links", "projects", name: "fk_daa8cee94c", on_delete: :cascade
  add_foreign_key "project_import_data", "projects", name: "fk_ffb9ee3a10", on_delete: :cascade
3508
  add_foreign_key "project_mirror_data", "projects", name: "fk_d1aad367d7", on_delete: :cascade
3509
  add_foreign_key "project_repositories", "projects", on_delete: :cascade
3510
  add_foreign_key "project_repositories", "shards", on_delete: :restrict
3511
  add_foreign_key "project_repository_states", "projects", on_delete: :cascade
3512
  add_foreign_key "project_statistics", "projects", on_delete: :cascade
Simon Knox's avatar
Simon Knox committed
3513
  add_foreign_key "project_tracing_settings", "projects", on_delete: :cascade
3514
  add_foreign_key "projects", "pool_repositories", name: "fk_6e5c14658a", on_delete: :nullify
3515 3516
  add_foreign_key "prometheus_alert_events", "projects", on_delete: :cascade
  add_foreign_key "prometheus_alert_events", "prometheus_alerts", on_delete: :cascade
3517 3518 3519
  add_foreign_key "prometheus_alerts", "environments", on_delete: :cascade
  add_foreign_key "prometheus_alerts", "projects", on_delete: :cascade
  add_foreign_key "prometheus_alerts", "prometheus_metrics", on_delete: :cascade
3520
  add_foreign_key "prometheus_metrics", "projects", on_delete: :cascade
3521
  add_foreign_key "protected_branch_merge_access_levels", "namespaces", column: "group_id", name: "fk_98f3d044fe", on_delete: :cascade
3522
  add_foreign_key "protected_branch_merge_access_levels", "protected_branches", name: "fk_8a3072ccb3", on_delete: :cascade
3523
  add_foreign_key "protected_branch_merge_access_levels", "users"
3524
  add_foreign_key "protected_branch_push_access_levels", "namespaces", column: "group_id", name: "fk_7111b68cdb", on_delete: :cascade
3525
  add_foreign_key "protected_branch_push_access_levels", "protected_branches", name: "fk_9ffc86a3d9", on_delete: :cascade
3526
  add_foreign_key "protected_branch_push_access_levels", "users"
3527 3528 3529
  add_foreign_key "protected_branch_unprotect_access_levels", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "protected_branch_unprotect_access_levels", "protected_branches", on_delete: :cascade
  add_foreign_key "protected_branch_unprotect_access_levels", "users", on_delete: :cascade
3530
  add_foreign_key "protected_branches", "projects", name: "fk_7a9c6d93e7", on_delete: :cascade
3531 3532 3533 3534
  add_foreign_key "protected_environment_deploy_access_levels", "namespaces", column: "group_id", on_delete: :cascade
  add_foreign_key "protected_environment_deploy_access_levels", "protected_environments", on_delete: :cascade
  add_foreign_key "protected_environment_deploy_access_levels", "users", on_delete: :cascade
  add_foreign_key "protected_environments", "projects", on_delete: :cascade
3535
  add_foreign_key "protected_tag_create_access_levels", "namespaces", column: "group_id", name: "fk_b4eb82fe3c", on_delete: :cascade
3536
  add_foreign_key "protected_tag_create_access_levels", "protected_tags", name: "fk_f7dfda8c51", on_delete: :cascade
3537
  add_foreign_key "protected_tag_create_access_levels", "users"
3538
  add_foreign_key "protected_tags", "projects", name: "fk_8e4af87648", on_delete: :cascade
3539
  add_foreign_key "push_event_payloads", "events", name: "fk_36c74129da", on_delete: :cascade
Rémy Coutable's avatar
Rémy Coutable committed
3540
  add_foreign_key "push_rules", "projects", name: "fk_83b29894de", on_delete: :cascade
3541
  add_foreign_key "release_links", "releases", on_delete: :cascade
3542
  add_foreign_key "releases", "projects", name: "fk_47fe2a0596", on_delete: :cascade
Yorick Peterse's avatar
Yorick Peterse committed
3543
  add_foreign_key "releases", "users", column: "author_id", name: "fk_8e4456f90f", on_delete: :nullify
3544
  add_foreign_key "remote_mirrors", "projects", name: "fk_43a9aa4ca8", on_delete: :cascade
3545
  add_foreign_key "repository_languages", "projects", on_delete: :cascade
Jan Provaznik's avatar
Jan Provaznik committed
3546
  add_foreign_key "resource_label_events", "epics", on_delete: :cascade
3547 3548 3549 3550
  add_foreign_key "resource_label_events", "issues", on_delete: :cascade
  add_foreign_key "resource_label_events", "labels", on_delete: :nullify
  add_foreign_key "resource_label_events", "merge_requests", on_delete: :cascade
  add_foreign_key "resource_label_events", "users", on_delete: :nullify
3551 3552 3553
  add_foreign_key "reviews", "merge_requests", on_delete: :cascade
  add_foreign_key "reviews", "projects", on_delete: :cascade
  add_foreign_key "reviews", "users", column: "author_id", on_delete: :nullify
3554
  add_foreign_key "saml_providers", "namespaces", column: "group_id", on_delete: :cascade
3555
  add_foreign_key "services", "projects", name: "fk_71cce407f9", on_delete: :cascade
Valery Sizov's avatar
Valery Sizov committed
3556
  add_foreign_key "slack_integrations", "services", on_delete: :cascade
3557
  add_foreign_key "smartcard_identities", "users", on_delete: :cascade
3558
  add_foreign_key "snippets", "projects", name: "fk_be41fd4bb7", on_delete: :cascade
3559 3560
  add_foreign_key "software_license_policies", "projects", on_delete: :cascade
  add_foreign_key "software_license_policies", "software_licenses", on_delete: :cascade
3561
  add_foreign_key "subscriptions", "projects", on_delete: :cascade
3562
  add_foreign_key "suggestions", "notes", on_delete: :cascade
3563
  add_foreign_key "system_note_metadata", "notes", name: "fk_d83a918cb1", on_delete: :cascade
3564 3565
  add_foreign_key "term_agreements", "application_setting_terms", column: "term_id"
  add_foreign_key "term_agreements", "users", on_delete: :cascade
3566 3567
  add_foreign_key "timelogs", "issues", name: "fk_timelogs_issues_issue_id", on_delete: :cascade
  add_foreign_key "timelogs", "merge_requests", name: "fk_timelogs_merge_requests_merge_request_id", on_delete: :cascade
3568
  add_foreign_key "todos", "namespaces", column: "group_id", on_delete: :cascade
3569
  add_foreign_key "todos", "notes", name: "fk_91d1f47b13", on_delete: :cascade
3570
  add_foreign_key "todos", "projects", name: "fk_45054f9c45", on_delete: :cascade
3571 3572
  add_foreign_key "todos", "users", column: "author_id", name: "fk_ccf0373936", on_delete: :cascade
  add_foreign_key "todos", "users", name: "fk_d94154aa95", on_delete: :cascade
3573
  add_foreign_key "trending_projects", "projects", on_delete: :cascade
3574
  add_foreign_key "u2f_registrations", "users"
3575
  add_foreign_key "user_callouts", "users", on_delete: :cascade
3576
  add_foreign_key "user_custom_attributes", "users", on_delete: :cascade
3577 3578
  add_foreign_key "user_interacted_projects", "projects", name: "fk_722ceba4f7", on_delete: :cascade
  add_foreign_key "user_interacted_projects", "users", name: "fk_0894651f08", on_delete: :cascade
3579
  add_foreign_key "user_preferences", "users", on_delete: :cascade
3580
  add_foreign_key "user_statuses", "users", on_delete: :cascade
3581
  add_foreign_key "user_synced_attributes_metadata", "users", on_delete: :cascade
3582
  add_foreign_key "users", "application_setting_terms", column: "accepted_term_id", name: "fk_789cd90b35", on_delete: :cascade
3583 3584
  add_foreign_key "users_ops_dashboard_projects", "projects", on_delete: :cascade
  add_foreign_key "users_ops_dashboard_projects", "users", on_delete: :cascade
3585
  add_foreign_key "users_star_projects", "projects", name: "fk_22cd27ddfc", on_delete: :cascade
3586 3587 3588 3589
  add_foreign_key "vulnerability_feedback", "ci_pipelines", column: "pipeline_id", on_delete: :nullify
  add_foreign_key "vulnerability_feedback", "issues", on_delete: :nullify
  add_foreign_key "vulnerability_feedback", "projects", on_delete: :cascade
  add_foreign_key "vulnerability_feedback", "users", column: "author_id", on_delete: :cascade
3590 3591 3592
  add_foreign_key "vulnerability_identifiers", "projects", on_delete: :cascade
  add_foreign_key "vulnerability_occurrence_identifiers", "vulnerability_identifiers", column: "identifier_id", on_delete: :cascade
  add_foreign_key "vulnerability_occurrence_identifiers", "vulnerability_occurrences", column: "occurrence_id", on_delete: :cascade
3593 3594
  add_foreign_key "vulnerability_occurrence_pipelines", "ci_pipelines", column: "pipeline_id", on_delete: :cascade
  add_foreign_key "vulnerability_occurrence_pipelines", "vulnerability_occurrences", column: "occurrence_id", on_delete: :cascade
3595
  add_foreign_key "vulnerability_occurrences", "projects", on_delete: :cascade
3596
  add_foreign_key "vulnerability_occurrences", "vulnerability_identifiers", column: "primary_identifier_id", on_delete: :cascade
3597 3598
  add_foreign_key "vulnerability_occurrences", "vulnerability_scanners", column: "scanner_id", on_delete: :cascade
  add_foreign_key "vulnerability_scanners", "projects", on_delete: :cascade
3599
  add_foreign_key "web_hook_logs", "web_hooks", on_delete: :cascade
3600
  add_foreign_key "web_hooks", "projects", name: "fk_0c8ca6d9d1", on_delete: :cascade
3601
end