summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 08:27:35 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 08:27:35 +0000
commit7e9c479f7de77702622631cff2628a9c8dcbc627 (patch)
treec8f718a08e110ad7e1894510980d2155a6549197 /db
parente852b0ae16db4052c1c567d9efa4facc81146e88 (diff)
downloadgitlab-ce-7e9c479f7de77702622631cff2628a9c8dcbc627.tar.gz
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'db')
-rw-r--r--db/fixtures/development/02_application_settings.rb3
-rw-r--r--db/fixtures/development/12_snippets.rb26
-rw-r--r--db/fixtures/production/010_settings.rb4
-rw-r--r--db/migrate/20200908212414_add_feature_flag_events_to_web_hooks.rb9
-rw-r--r--db/migrate/20200920130356_add_container_expiration_policy_worker_settings_to_application_settings.rb19
-rw-r--r--db/migrate/20200928123510_add_expiration_policy_cleanup_status_to_container_repositories.rb26
-rw-r--r--db/migrate/20201008011523_add_ci_jwt_signing_key_to_application_settings.rb13
-rw-r--r--db/migrate/20201008011937_add_text_limit_to_application_settings_encrypted_ci_jwt_signing_key_iv.rb17
-rw-r--r--db/migrate/20201008013434_generate_ci_jwt_signing_key.rb32
-rw-r--r--db/migrate/20201008075620_add_releases_events_to_web_hooks.rb9
-rw-r--r--db/migrate/20201008125643_create_csv_issue_imports.rb18
-rw-r--r--db/migrate/20201008144854_set_regex_defaults_on_container_expiration_policies.rb21
-rw-r--r--db/migrate/20201008224441_add_position_into_security_findings.rb19
-rw-r--r--db/migrate/20201012073022_remove_not_null_constraint_on_framework.rb33
-rw-r--r--db/migrate/20201012122428_add_container_registry_expiration_policies_worker_capacity_constraint.rb22
-rw-r--r--db/migrate/20201012134230_create_ci_test_cases.rb27
-rw-r--r--db/migrate/20201012135330_create_ci_test_case_failures.rb22
-rw-r--r--db/migrate/20201012140110_add_projects_fk_to_ci_test_cases.rb19
-rw-r--r--db/migrate/20201012140452_add_ci_builds_fk_to_ci_test_case_failures.rb19
-rw-r--r--db/migrate/20201014163633_specify_primary_key_where_missing.rb46
-rw-r--r--db/migrate/20201015121805_add_project_foreign_key_to_csv_issue_imports.rb19
-rw-r--r--db/migrate/20201015121825_add_user_foreign_key_to_csv_issue_imports.rb19
-rw-r--r--db/migrate/20201015194852_add_index_on_state_for_dast_site_validations.rb22
-rw-r--r--db/migrate/20201015231049_add_ci_build_id_to_terraform_state_versions.rb28
-rw-r--r--db/migrate/20201016074302_add_index_project_id_and_id_to_container_repositories.rb18
-rw-r--r--db/migrate/20201019091307_add_unique_index_on_scan_id_and_position_of_security_findings.rb18
-rw-r--r--db/migrate/20201019101549_add_es_custom_analyzers_settings.rb12
-rw-r--r--db/migrate/20201019111952_add_sha256_and_filecount_to_pages_deployments.rb22
-rw-r--r--db/migrate/20201019113009_add_new_user_signups_cap_to_application_settings.rb9
-rw-r--r--db/migrate/20201019130244_remove_license_compliance_temp_index.rb18
-rw-r--r--db/migrate/20201019152046_add_default_branch_to_daily_build_group_report_result.rb11
-rw-r--r--db/migrate/20201019161924_add_partitioned_table_view.rb44
-rw-r--r--db/migrate/20201019172704_add_partitions_view.rb39
-rw-r--r--db/migrate/20201021085007_create_analytics_devops_adoption_segments.rb24
-rw-r--r--db/migrate/20201021101956_add_index_route_on_name_trigram_to_route.rb18
-rw-r--r--db/migrate/20201021102554_create_analytics_devops_adoption_segment_selections.rb17
-rw-r--r--db/migrate/20201021105347_add_foreign_key_project_id_to_segment_selection.rb19
-rw-r--r--db/migrate/20201021105600_add_foreign_key_group_id_to_segment_selection.rb19
-rw-r--r--db/migrate/20201021105959_add_check_constraint_to_segment_selection.rb19
-rw-r--r--db/migrate/20201021142812_add_index_to_ci_daily_build_group_report_results.rb24
-rw-r--r--db/migrate/20201021152210_add_secret_detection_token_revocation_application_settings.rb21
-rw-r--r--db/migrate/20201021190539_add_text_limit_to_secret_detection_token_revocation_application_settings.rb17
-rw-r--r--db/migrate/20201021220101_add_merge_trains_enabled.rb9
-rw-r--r--db/migrate/20201022080802_add_repository_read_only_to_snippets.rb9
-rw-r--r--db/migrate/20201022094845_add_historical_data_recorded_at.rb13
-rw-r--r--db/migrate/20201022094846_update_historical_data_recorded_at.rb31
-rw-r--r--db/migrate/20201022103304_add_availability_to_user_statuses.rb9
-rw-r--r--db/migrate/20201022144501_create_snippet_repository_storage_move.rb32
-rw-r--r--db/migrate/20201022191817_add_has_vulnerabilities_into_project_settings.rb19
-rw-r--r--db/migrate/20201022192254_index_project_settings_on_project_id_partially.rb18
-rw-r--r--db/migrate/20201023114628_create_merge_request_cleanup_schedules.rb27
-rw-r--r--db/migrate/20201026200736_seed_merge_trains_enabled.rb19
-rw-r--r--db/migrate/20201027002551_migrate_services_to_http_integrations.rb51
-rw-r--r--db/migrate/20201027135651_add_auto_rollback_setting.rb19
-rw-r--r--db/migrate/20201027210127_add_index_to_oauth_access_grants_resource_owner_id.rb18
-rw-r--r--db/migrate/20201027211138_increase_default_diff_max_patch_bytes.rb9
-rw-r--r--db/migrate/20201028160831_add_temporary_index_to_vulnerabilities_table.rb18
-rw-r--r--db/migrate/20201028184640_add_helm_major_version_to_clusters.rb12
-rw-r--r--db/migrate/20201028204306_migrate_default_diff_max_patch_bytes_to_minimum_200kb.rb20
-rw-r--r--db/migrate/20201029143650_rename_application_settings_to_allow_deny_names.rb21
-rw-r--r--db/migrate/20201029144444_create_vulnerability_finding_links.rb25
-rw-r--r--db/migrate/20201030092151_add_requirements_access_level_to_project_features.rb19
-rw-r--r--db/migrate/20201030200115_add_iid_to_design_management_design.rb9
-rw-r--r--db/migrate/20201030200539_add_index_on_design_management_designs_iid_project_id.rb21
-rw-r--r--db/migrate/20201102184743_add_index_to_incident_issues_on_project_and_created_at.rb30
-rw-r--r--db/migrate/20201103095752_add_issues_closed_at_index.rb17
-rw-r--r--db/migrate/20201103171537_add_index_active_billable_users_to_user.rb21
-rw-r--r--db/migrate/20201103184333_create_packages_package_file_build_infos.rb30
-rw-r--r--db/migrate/20201103202213_update_packages_build_infos_index.rb22
-rw-r--r--db/migrate/20201104204739_create_bulk_import_trackers.rb42
-rw-r--r--db/migrate/20201105021637_add_uploads_size_to_project_statistics.rb13
-rw-r--r--db/migrate/20201105024127_add_uploads_size_to_namespace_root_storage_statistics.rb13
-rw-r--r--db/migrate/20201105135051_change_default_value_of_ci_max_artifact_size_lsif_of_plan_limits_from20_to100.rb21
-rw-r--r--db/migrate/20201105143211_add_vulnerabilities_enabled_and_issuetype_to_jira_tracker_data.rb13
-rw-r--r--db/migrate/20201105143312_add_text_limit_to_jira_tracker_data_issuetype.rb17
-rw-r--r--db/migrate/20201106134139_add_pipelines_created_index.rb19
-rw-r--r--db/migrate/20201107032257_add_default_true_require_admin_approval_after_user_signup_to_application_settings.rb9
-rw-r--r--db/migrate/20201109144634_add_region_field_to_aws_role.rb21
-rw-r--r--db/migrate/20201109180311_add_secret_detection_revocation_token_types_application_settings.rb13
-rw-r--r--db/migrate/20201109184023_add_text_limit_to_secret_detection_revocation_token_types_application_settings.rb17
-rw-r--r--db/migrate/20201110035029_created_index_for_vulnerability_occurrences_on_project_fingerprint.rb18
-rw-r--r--db/migrate/20201110110454_extend_postgres_indexes_view.rb55
-rw-r--r--db/migrate/20201110133629_change_index_mr_metrics_target_project_id.rb20
-rw-r--r--db/migrate/20201111110318_add_cloud_license_auth_token_to_settings.rb13
-rw-r--r--db/migrate/20201111110918_add_cloud_license_auth_token_application_settings_text_limit.rb17
-rw-r--r--db/migrate/20201111152859_add_missing_expression_indexes.rb43
-rw-r--r--db/migrate/20201112195322_reseed_merge_trains_enabled.rb19
-rw-r--r--db/post_migrate/20201015073808_schedule_blocked_by_links_replacement.rb6
-rw-r--r--db/post_migrate/20201019094741_rename_sitemap_root_namespaces.rb24
-rw-r--r--db/post_migrate/20201020102551_remove_index_service_for_usage_data.rb18
-rw-r--r--db/post_migrate/20201026051643_remove_scanned_resources_count_from_security_scans.rb13
-rw-r--r--db/post_migrate/20201026182253_schedule_populate_vulnerability_feedback_pipeline_id.rb33
-rw-r--r--db/post_migrate/20201028160832_schedule_populate_missing_dismissal_information_for_vulnerabilities.rb23
-rw-r--r--db/post_migrate/20201028182809_backfill_jira_tracker_deployment_type2.rb32
-rw-r--r--db/post_migrate/20201029052241_migrate_geo_blob_verification_primary_worker_sidekiq_queue.rb18
-rw-r--r--db/post_migrate/20201029144157_cleanup_application_settings_to_allow_deny_rename.rb19
-rw-r--r--db/post_migrate/20201030203854_backfill_design_iids.rb27
-rw-r--r--db/post_migrate/20201102073808_schedule_blocked_by_links_replacement_second_try.rb30
-rw-r--r--db/post_migrate/20201102112206_rename_sitemap_namespace.rb24
-rw-r--r--db/post_migrate/20201102114018_remove_storage_size_limit_from_application_settings.rb13
-rw-r--r--db/post_migrate/20201102152554_add_not_null_check_on_iid_on_design_manangement_designs.rb17
-rw-r--r--db/post_migrate/20201102152945_truncate_security_findings_table.rb19
-rw-r--r--db/post_migrate/20201103013242_remove_terraform_state_verification_columns.rb29
-rw-r--r--db/post_migrate/20201103110018_schedule_merge_request_cleanup_schedules_backfill.rb30
-rw-r--r--db/post_migrate/20201103192526_schedule_populate_has_vulnerabilities.rb24
-rw-r--r--db/post_migrate/20201106082723_add_merge_request_jira_reference_indexes.rb44
-rw-r--r--db/post_migrate/20201106134950_deduplicate_epic_iids.rb121
-rw-r--r--db/schema_migrations/202009082124141
-rw-r--r--db/schema_migrations/202009201303561
-rw-r--r--db/schema_migrations/202009281235101
-rw-r--r--db/schema_migrations/202010080115231
-rw-r--r--db/schema_migrations/202010080119371
-rw-r--r--db/schema_migrations/202010080134341
-rw-r--r--db/schema_migrations/202010080756201
-rw-r--r--db/schema_migrations/202010081256431
-rw-r--r--db/schema_migrations/202010081448541
-rw-r--r--db/schema_migrations/202010082244411
-rw-r--r--db/schema_migrations/202010120730221
-rw-r--r--db/schema_migrations/202010121224281
-rw-r--r--db/schema_migrations/202010121342301
-rw-r--r--db/schema_migrations/202010121353301
-rw-r--r--db/schema_migrations/202010121401101
-rw-r--r--db/schema_migrations/202010121404521
-rw-r--r--db/schema_migrations/202010141636331
-rw-r--r--db/schema_migrations/202010151218051
-rw-r--r--db/schema_migrations/202010151218251
-rw-r--r--db/schema_migrations/202010151948521
-rw-r--r--db/schema_migrations/202010152310491
-rw-r--r--db/schema_migrations/202010160743021
-rw-r--r--db/schema_migrations/202010190913071
-rw-r--r--db/schema_migrations/202010190947411
-rw-r--r--db/schema_migrations/202010191015491
-rw-r--r--db/schema_migrations/202010191119521
-rw-r--r--db/schema_migrations/202010191130091
-rw-r--r--db/schema_migrations/202010191302441
-rw-r--r--db/schema_migrations/202010191520461
-rw-r--r--db/schema_migrations/202010191619241
-rw-r--r--db/schema_migrations/202010191727041
-rw-r--r--db/schema_migrations/202010201025511
-rw-r--r--db/schema_migrations/202010210850071
-rw-r--r--db/schema_migrations/202010211019561
-rw-r--r--db/schema_migrations/202010211025541
-rw-r--r--db/schema_migrations/202010211053471
-rw-r--r--db/schema_migrations/202010211056001
-rw-r--r--db/schema_migrations/202010211059591
-rw-r--r--db/schema_migrations/202010211428121
-rw-r--r--db/schema_migrations/202010211522101
-rw-r--r--db/schema_migrations/202010211905391
-rw-r--r--db/schema_migrations/202010212201011
-rw-r--r--db/schema_migrations/202010220808021
-rw-r--r--db/schema_migrations/202010220948451
-rw-r--r--db/schema_migrations/202010220948461
-rw-r--r--db/schema_migrations/202010221033041
-rw-r--r--db/schema_migrations/202010221445011
-rw-r--r--db/schema_migrations/202010221918171
-rw-r--r--db/schema_migrations/202010221922541
-rw-r--r--db/schema_migrations/202010231146281
-rw-r--r--db/schema_migrations/202010260516431
-rw-r--r--db/schema_migrations/202010261822531
-rw-r--r--db/schema_migrations/202010262007361
-rw-r--r--db/schema_migrations/202010270025511
-rw-r--r--db/schema_migrations/202010271356511
-rw-r--r--db/schema_migrations/202010272101271
-rw-r--r--db/schema_migrations/202010272111381
-rw-r--r--db/schema_migrations/202010281608311
-rw-r--r--db/schema_migrations/202010281608321
-rw-r--r--db/schema_migrations/202010281828091
-rw-r--r--db/schema_migrations/202010281846401
-rw-r--r--db/schema_migrations/202010282043061
-rw-r--r--db/schema_migrations/202010290522411
-rw-r--r--db/schema_migrations/202010291436501
-rw-r--r--db/schema_migrations/202010291441571
-rw-r--r--db/schema_migrations/202010291444441
-rw-r--r--db/schema_migrations/202010300921511
-rw-r--r--db/schema_migrations/202010302001151
-rw-r--r--db/schema_migrations/202010302005391
-rw-r--r--db/schema_migrations/202010302038541
-rw-r--r--db/schema_migrations/202011020738081
-rw-r--r--db/schema_migrations/202011021122061
-rw-r--r--db/schema_migrations/202011021140181
-rw-r--r--db/schema_migrations/202011021525541
-rw-r--r--db/schema_migrations/202011021529451
-rw-r--r--db/schema_migrations/202011021847431
-rw-r--r--db/schema_migrations/202011030132421
-rw-r--r--db/schema_migrations/202011030957521
-rw-r--r--db/schema_migrations/202011031100181
-rw-r--r--db/schema_migrations/202011031715371
-rw-r--r--db/schema_migrations/202011031843331
-rw-r--r--db/schema_migrations/202011031925261
-rw-r--r--db/schema_migrations/202011032022131
-rw-r--r--db/schema_migrations/202011042047391
-rw-r--r--db/schema_migrations/202011050216371
-rw-r--r--db/schema_migrations/202011050241271
-rw-r--r--db/schema_migrations/202011051350511
-rw-r--r--db/schema_migrations/202011051432111
-rw-r--r--db/schema_migrations/202011051433121
-rw-r--r--db/schema_migrations/202011060827231
-rw-r--r--db/schema_migrations/202011061341391
-rw-r--r--db/schema_migrations/202011061349501
-rw-r--r--db/schema_migrations/202011070322571
-rw-r--r--db/schema_migrations/202011091446341
-rw-r--r--db/schema_migrations/202011091803111
-rw-r--r--db/schema_migrations/202011091840231
-rw-r--r--db/schema_migrations/202011100350291
-rw-r--r--db/schema_migrations/202011101104541
-rw-r--r--db/schema_migrations/202011101336291
-rw-r--r--db/schema_migrations/202011111103181
-rw-r--r--db/schema_migrations/202011111109181
-rw-r--r--db/schema_migrations/202011111528591
-rw-r--r--db/schema_migrations/202011121953221
-rw-r--r--db/structure.sql600
211 files changed, 2978 insertions, 81 deletions
diff --git a/db/fixtures/development/02_application_settings.rb b/db/fixtures/development/02_application_settings.rb
index 67486d2ab5f..46da3205d8f 100644
--- a/db/fixtures/development/02_application_settings.rb
+++ b/db/fixtures/development/02_application_settings.rb
@@ -7,4 +7,7 @@ ApplicationSetting.create_from_defaults
puts "Enable hashed storage for every new projects.".color(:green)
ApplicationSetting.current_without_cache.update!(hashed_storage_enabled: true)
+puts "Generate CI JWT signing key".color(:green)
+ApplicationSetting.current_without_cache.update!(ci_jwt_signing_key: OpenSSL::PKey::RSA.new(2048).to_pem)
+
print '.'
diff --git a/db/fixtures/development/12_snippets.rb b/db/fixtures/development/12_snippets.rb
index 8ceabcdcd9b..6d31007b320 100644
--- a/db/fixtures/development/12_snippets.rb
+++ b/db/fixtures/development/12_snippets.rb
@@ -1,6 +1,28 @@
require './spec/support/sidekiq_middleware'
SNIPPET_REPO_URL = "https://gitlab.com/gitlab-org/gitlab-snippet-test.git"
+BUNDLE_PATH = File.join(Rails.root, 'db/fixtures/development/gitlab-snippet-test.bundle')
+
+class Gitlab::Seeder::SnippetRepository
+ def initialize(snippet)
+ @snippet = snippet
+ end
+
+ def import
+ if File.exists?(BUNDLE_PATH)
+ @snippet.repository.create_from_bundle(BUNDLE_PATH)
+ else
+ @snippet.repository.import_repository(SNIPPET_REPO_URL)
+ @snippet.repository.bundle_to_disk(BUNDLE_PATH)
+ end
+ end
+
+ def self.cleanup
+ File.delete(BUNDLE_PATH) if File.exists?(BUNDLE_PATH)
+ rescue => e
+ warn "\nError cleaning up snippet bundle: #{e}"
+ end
+end
Gitlab::Seeder.quiet do
20.times do |i|
@@ -14,7 +36,7 @@ Gitlab::Seeder.quiet do
content: 'foo'
}).tap do |snippet|
unless snippet.repository_exists?
- snippet.repository.import_repository(SNIPPET_REPO_URL)
+ Gitlab::Seeder::SnippetRepository.new(snippet).import
end
snippet.track_snippet_repository(snippet.repository.storage)
@@ -23,5 +45,7 @@ Gitlab::Seeder.quiet do
print('.')
end
+
+ Gitlab::Seeder::SnippetRepository.cleanup
end
diff --git a/db/fixtures/production/010_settings.rb b/db/fixtures/production/010_settings.rb
index 7626cdb0b9c..65f70a9e715 100644
--- a/db/fixtures/production/010_settings.rb
+++ b/db/fixtures/production/010_settings.rb
@@ -24,3 +24,7 @@ if ENV['GITLAB_PROMETHEUS_METRICS_ENABLED'].present?
settings.prometheus_metrics_enabled = value
save(settings, 'Prometheus metrics enabled flag')
end
+
+settings = Gitlab::CurrentSettings.current_application_settings
+settings.ci_jwt_signing_key = OpenSSL::PKey::RSA.new(2048).to_pem
+save(settings, 'CI JWT signing key')
diff --git a/db/migrate/20200908212414_add_feature_flag_events_to_web_hooks.rb b/db/migrate/20200908212414_add_feature_flag_events_to_web_hooks.rb
new file mode 100644
index 00000000000..40e2b37b390
--- /dev/null
+++ b/db/migrate/20200908212414_add_feature_flag_events_to_web_hooks.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddFeatureFlagEventsToWebHooks < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :web_hooks, :feature_flag_events, :boolean, null: false, default: false
+ end
+end
diff --git a/db/migrate/20200920130356_add_container_expiration_policy_worker_settings_to_application_settings.rb b/db/migrate/20200920130356_add_container_expiration_policy_worker_settings_to_application_settings.rb
new file mode 100644
index 00000000000..7501f150283
--- /dev/null
+++ b/db/migrate/20200920130356_add_container_expiration_policy_worker_settings_to_application_settings.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddContainerExpirationPolicyWorkerSettingsToApplicationSettings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ unless column_exists?(:application_settings, :container_registry_expiration_policies_worker_capacity)
+ add_column(:application_settings, :container_registry_expiration_policies_worker_capacity, :integer, default: 0, null: false)
+ end
+ end
+
+ def down
+ if column_exists?(:application_settings, :container_registry_expiration_policies_worker_capacity)
+ remove_column(:application_settings, :container_registry_expiration_policies_worker_capacity)
+ end
+ end
+end
diff --git a/db/migrate/20200928123510_add_expiration_policy_cleanup_status_to_container_repositories.rb b/db/migrate/20200928123510_add_expiration_policy_cleanup_status_to_container_repositories.rb
new file mode 100644
index 00000000000..4d611a56e9c
--- /dev/null
+++ b/db/migrate/20200928123510_add_expiration_policy_cleanup_status_to_container_repositories.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class AddExpirationPolicyCleanupStatusToContainerRepositories < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'idx_container_repositories_on_exp_cleanup_status_and_start_date'
+
+ disable_ddl_transaction!
+
+ def up
+ unless column_exists?(:container_repositories, :expiration_policy_cleanup_status)
+ add_column(:container_repositories, :expiration_policy_cleanup_status, :integer, limit: 2, default: 0, null: false)
+ end
+
+ add_concurrent_index(:container_repositories, [:expiration_policy_cleanup_status, :expiration_policy_started_at], name: INDEX_NAME)
+ end
+
+ def down
+ remove_concurrent_index(:container_repositories, [:expiration_policy_cleanup_status, :expiration_policy_started_at], name: INDEX_NAME)
+
+ if column_exists?(:container_repositories, :expiration_policy_cleanup_status)
+ remove_column(:container_repositories, :expiration_policy_cleanup_status)
+ end
+ end
+end
diff --git a/db/migrate/20201008011523_add_ci_jwt_signing_key_to_application_settings.rb b/db/migrate/20201008011523_add_ci_jwt_signing_key_to_application_settings.rb
new file mode 100644
index 00000000000..c51f7e8b706
--- /dev/null
+++ b/db/migrate/20201008011523_add_ci_jwt_signing_key_to_application_settings.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddCiJwtSigningKeyToApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ # rubocop:disable Migration/AddLimitToTextColumns
+ # limit is added in 20201001011937_add_text_limit_to_application_settings_encrypted_ci_jwt_signing_key_iv
+ def change
+ add_column :application_settings, :encrypted_ci_jwt_signing_key, :text
+ add_column :application_settings, :encrypted_ci_jwt_signing_key_iv, :text
+ end
+ # rubocop:enable Migration/AddLimitToTextColumns
+end
diff --git a/db/migrate/20201008011937_add_text_limit_to_application_settings_encrypted_ci_jwt_signing_key_iv.rb b/db/migrate/20201008011937_add_text_limit_to_application_settings_encrypted_ci_jwt_signing_key_iv.rb
new file mode 100644
index 00000000000..39f6eb2106a
--- /dev/null
+++ b/db/migrate/20201008011937_add_text_limit_to_application_settings_encrypted_ci_jwt_signing_key_iv.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddTextLimitToApplicationSettingsEncryptedCiJwtSigningKeyIv < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :application_settings, :encrypted_ci_jwt_signing_key_iv, 255
+ end
+
+ def down
+ remove_text_limit :application_settings, :encrypted_ci_jwt_signing_key_iv
+ end
+end
diff --git a/db/migrate/20201008013434_generate_ci_jwt_signing_key.rb b/db/migrate/20201008013434_generate_ci_jwt_signing_key.rb
new file mode 100644
index 00000000000..7983a56f439
--- /dev/null
+++ b/db/migrate/20201008013434_generate_ci_jwt_signing_key.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+class GenerateCiJwtSigningKey < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ class ApplicationSetting < ActiveRecord::Base
+ self.table_name = 'application_settings'
+
+ attr_encrypted :ci_jwt_signing_key, {
+ mode: :per_attribute_iv,
+ key: Rails.application.secrets.db_key_base[0..31],
+ algorithm: 'aes-256-gcm',
+ encode: true
+ }
+ end
+
+ def up
+ ApplicationSetting.reset_column_information
+
+ ApplicationSetting.find_each do |application_setting|
+ application_setting.update(ci_jwt_signing_key: OpenSSL::PKey::RSA.new(2048).to_pem)
+ end
+ end
+
+ def down
+ ApplicationSetting.reset_column_information
+
+ ApplicationSetting.find_each do |application_setting|
+ application_setting.update_columns(encrypted_ci_jwt_signing_key: nil, encrypted_ci_jwt_signing_key_iv: nil)
+ end
+ end
+end
diff --git a/db/migrate/20201008075620_add_releases_events_to_web_hooks.rb b/db/migrate/20201008075620_add_releases_events_to_web_hooks.rb
new file mode 100644
index 00000000000..f6df213f162
--- /dev/null
+++ b/db/migrate/20201008075620_add_releases_events_to_web_hooks.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddReleasesEventsToWebHooks < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :web_hooks, :releases_events, :boolean, null: false, default: false
+ end
+end
diff --git a/db/migrate/20201008125643_create_csv_issue_imports.rb b/db/migrate/20201008125643_create_csv_issue_imports.rb
new file mode 100644
index 00000000000..be3206af6d8
--- /dev/null
+++ b/db/migrate/20201008125643_create_csv_issue_imports.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class CreateCsvIssueImports < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ create_table :csv_issue_imports do |t|
+ t.bigint :project_id, null: false, index: true
+ t.bigint :user_id, null: false, index: true
+
+ t.timestamps_with_timezone
+ end
+ end
+
+ def down
+ drop_table :csv_issue_imports
+ end
+end
diff --git a/db/migrate/20201008144854_set_regex_defaults_on_container_expiration_policies.rb b/db/migrate/20201008144854_set_regex_defaults_on_container_expiration_policies.rb
new file mode 100644
index 00000000000..45c411fc238
--- /dev/null
+++ b/db/migrate/20201008144854_set_regex_defaults_on_container_expiration_policies.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class SetRegexDefaultsOnContainerExpirationPolicies < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ change_column_default :container_expiration_policies, :name_regex, '.*'
+ change_column_default :container_expiration_policies, :enabled, false
+ end
+ end
+
+ def down
+ with_lock_retries do
+ change_column_default :container_expiration_policies, :name_regex, nil
+ change_column_default :container_expiration_policies, :enabled, true
+ end
+ end
+end
diff --git a/db/migrate/20201008224441_add_position_into_security_findings.rb b/db/migrate/20201008224441_add_position_into_security_findings.rb
new file mode 100644
index 00000000000..ee6d5370f83
--- /dev/null
+++ b/db/migrate/20201008224441_add_position_into_security_findings.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddPositionIntoSecurityFindings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ add_column :security_findings, :position, :integer
+ end
+ end
+
+ def down
+ with_lock_retries do
+ remove_column :security_findings, :position
+ end
+ end
+end
diff --git a/db/migrate/20201012073022_remove_not_null_constraint_on_framework.rb b/db/migrate/20201012073022_remove_not_null_constraint_on_framework.rb
new file mode 100644
index 00000000000..b8cc8984575
--- /dev/null
+++ b/db/migrate/20201012073022_remove_not_null_constraint_on_framework.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class RemoveNotNullConstraintOnFramework < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ GDPR_FRAMEWORK_ID = 1
+
+ disable_ddl_transaction!
+
+ class TmpComplianceProjectFrameworkSetting < ActiveRecord::Base
+ self.table_name = 'project_compliance_framework_settings'
+ self.primary_key = :project_id
+
+ include EachBatch
+ end
+
+ def up
+ change_column_null :project_compliance_framework_settings, :framework, true
+ end
+
+ def down
+ # Custom frameworks cannot be rolled back easily since we don't have enum for them.
+ # To make the database consistent, we mark them as GDPR framework.
+ # Note: framework customization will be implemented in the next 1-3 releases so data
+ # corruption due to the rollback is unlikely.
+ TmpComplianceProjectFrameworkSetting.each_batch(of: 100) do |query|
+ query.where(framework: nil).update_all(framework: GDPR_FRAMEWORK_ID)
+ end
+
+ change_column_null :project_compliance_framework_settings, :framework, false
+ end
+end
diff --git a/db/migrate/20201012122428_add_container_registry_expiration_policies_worker_capacity_constraint.rb b/db/migrate/20201012122428_add_container_registry_expiration_policies_worker_capacity_constraint.rb
new file mode 100644
index 00000000000..e4f7d1309a3
--- /dev/null
+++ b/db/migrate/20201012122428_add_container_registry_expiration_policies_worker_capacity_constraint.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# See https://docs.gitlab.com/ee/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddContainerRegistryExpirationPoliciesWorkerCapacityConstraint < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ CONSTRAINT_NAME = 'app_settings_registry_exp_policies_worker_capacity_positive'
+
+ disable_ddl_transaction!
+
+ def up
+ add_check_constraint :application_settings, 'container_registry_expiration_policies_worker_capacity >= 0', CONSTRAINT_NAME
+ end
+
+ def down
+ remove_check_constraint :application_settings, CONSTRAINT_NAME
+ end
+end
diff --git a/db/migrate/20201012134230_create_ci_test_cases.rb b/db/migrate/20201012134230_create_ci_test_cases.rb
new file mode 100644
index 00000000000..fd1bcaf1093
--- /dev/null
+++ b/db/migrate/20201012134230_create_ci_test_cases.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+class CreateCiTestCases < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ unless table_exists?(:ci_test_cases)
+ create_table :ci_test_cases do |t|
+ t.bigint :project_id, null: false
+ t.text :key_hash, null: false
+
+ t.index [:project_id, :key_hash], unique: true
+ # NOTE: FK for projects will be added on a separate migration as per guidelines
+ end
+ end
+
+ add_text_limit :ci_test_cases, :key_hash, 64
+ end
+
+ def down
+ drop_table :ci_test_cases
+ end
+end
diff --git a/db/migrate/20201012135330_create_ci_test_case_failures.rb b/db/migrate/20201012135330_create_ci_test_case_failures.rb
new file mode 100644
index 00000000000..7eaf7b5256d
--- /dev/null
+++ b/db/migrate/20201012135330_create_ci_test_case_failures.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class CreateCiTestCaseFailures < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ create_table :ci_test_case_failures do |t|
+ t.datetime_with_timezone :failed_at
+ t.bigint :test_case_id, null: false
+ t.bigint :build_id, null: false
+
+ t.index [:test_case_id, :failed_at, :build_id], name: 'index_test_case_failures_unique_columns', unique: true, order: { failed_at: :desc }
+ t.index :build_id
+ t.foreign_key :ci_test_cases, column: :test_case_id, on_delete: :cascade
+ # NOTE: FK for ci_builds will be added on a separate migration as per guidelines
+ end
+ end
+
+ def down
+ drop_table :ci_test_case_failures
+ end
+end
diff --git a/db/migrate/20201012140110_add_projects_fk_to_ci_test_cases.rb b/db/migrate/20201012140110_add_projects_fk_to_ci_test_cases.rb
new file mode 100644
index 00000000000..d30b332e41a
--- /dev/null
+++ b/db/migrate/20201012140110_add_projects_fk_to_ci_test_cases.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddProjectsFkToCiTestCases < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :ci_test_cases, :projects, column: :project_id, on_delete: :cascade
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :ci_test_cases, column: :project_id
+ end
+ end
+end
diff --git a/db/migrate/20201012140452_add_ci_builds_fk_to_ci_test_case_failures.rb b/db/migrate/20201012140452_add_ci_builds_fk_to_ci_test_case_failures.rb
new file mode 100644
index 00000000000..0f2fdf071fa
--- /dev/null
+++ b/db/migrate/20201012140452_add_ci_builds_fk_to_ci_test_case_failures.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddCiBuildsFkToCiTestCaseFailures < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :ci_test_case_failures, :ci_builds, column: :build_id, on_delete: :cascade
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :ci_test_case_failures, column: :build_id
+ end
+ end
+end
diff --git a/db/migrate/20201014163633_specify_primary_key_where_missing.rb b/db/migrate/20201014163633_specify_primary_key_where_missing.rb
new file mode 100644
index 00000000000..bca111dacf2
--- /dev/null
+++ b/db/migrate/20201014163633_specify_primary_key_where_missing.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+class SpecifyPrimaryKeyWhereMissing < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ TABLES = {
+ project_authorizations: [:index_project_authorizations_on_user_id_project_id_access_level, %i(user_id project_id access_level)],
+ analytics_language_trend_repository_languages: [:analytics_repository_languages_unique_index, %i(programming_language_id project_id snapshot_date)],
+ approval_project_rules_protected_branches: [:index_approval_project_rules_protected_branches_unique, %i(approval_project_rule_id protected_branch_id)],
+ ci_build_trace_sections: [:index_ci_build_trace_sections_on_build_id_and_section_name_id, %i(build_id section_name_id)],
+ deployment_merge_requests: [:idx_deployment_merge_requests_unique_index, %i(deployment_id merge_request_id)],
+ issue_assignees: [:index_issue_assignees_on_issue_id_and_user_id, %i(issue_id user_id)],
+ issues_prometheus_alert_events: [:issue_id_prometheus_alert_event_id_index, %i(issue_id prometheus_alert_event_id)],
+ issues_self_managed_prometheus_alert_events: [:issue_id_self_managed_prometheus_alert_event_id_index, %i(issue_id self_managed_prometheus_alert_event_id)],
+ merge_request_diff_commits: [:index_merge_request_diff_commits_on_mr_diff_id_and_order, %i(merge_request_diff_id relative_order)],
+ merge_request_diff_files: [:index_merge_request_diff_files_on_mr_diff_id_and_order, %i(merge_request_diff_id relative_order)],
+ milestone_releases: [:index_miletone_releases_on_milestone_and_release, %i(milestone_id release_id)],
+ project_pages_metadata: [:index_project_pages_metadata_on_project_id, %i(project_id)],
+ push_event_payloads: [:index_push_event_payloads_on_event_id, %i(event_id)],
+ repository_languages: [:index_repository_languages_on_project_and_languages_id, %i(project_id programming_language_id)],
+ user_interacted_projects: [:index_user_interacted_projects_on_project_id_and_user_id, %i(project_id user_id)],
+ users_security_dashboard_projects: [:users_security_dashboard_projects_unique_index, %i(project_id user_id)]
+ }.freeze
+
+ def up
+ TABLES.each do |table, (unique_index, _)|
+ with_lock_retries do
+ execute "ALTER TABLE #{table} ADD CONSTRAINT #{table}_pkey PRIMARY KEY USING INDEX #{unique_index}" if index_exists_by_name?(table, unique_index)
+ end
+ end
+ end
+
+ def down
+ TABLES.each do |table, (unique_index, columns)|
+ add_concurrent_index table, columns, name: unique_index, unique: true
+
+ with_lock_retries do
+ execute "ALTER TABLE #{table} DROP CONSTRAINT #{table}_pkey"
+ end
+ end
+ end
+end
diff --git a/db/migrate/20201015121805_add_project_foreign_key_to_csv_issue_imports.rb b/db/migrate/20201015121805_add_project_foreign_key_to_csv_issue_imports.rb
new file mode 100644
index 00000000000..9476d2d55bd
--- /dev/null
+++ b/db/migrate/20201015121805_add_project_foreign_key_to_csv_issue_imports.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddProjectForeignKeyToCsvIssueImports < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :csv_issue_imports, :projects, column: :project_id
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :csv_issue_imports, column: :project_id
+ end
+ end
+end
diff --git a/db/migrate/20201015121825_add_user_foreign_key_to_csv_issue_imports.rb b/db/migrate/20201015121825_add_user_foreign_key_to_csv_issue_imports.rb
new file mode 100644
index 00000000000..ae91695bff4
--- /dev/null
+++ b/db/migrate/20201015121825_add_user_foreign_key_to_csv_issue_imports.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddUserForeignKeyToCsvIssueImports < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :csv_issue_imports, :users, column: :user_id
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :csv_issue_imports, column: :user_id
+ end
+ end
+end
diff --git a/db/migrate/20201015194852_add_index_on_state_for_dast_site_validations.rb b/db/migrate/20201015194852_add_index_on_state_for_dast_site_validations.rb
new file mode 100644
index 00000000000..785d7c8829c
--- /dev/null
+++ b/db/migrate/20201015194852_add_index_on_state_for_dast_site_validations.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class AddIndexOnStateForDastSiteValidations < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ OLD_INDEX_NAME = 'index_dast_site_validations_on_url_base'
+ NEW_INDEX_NAME = 'index_dast_site_validations_on_url_base_and_state'
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :dast_site_validations, [:url_base, :state], name: NEW_INDEX_NAME
+ remove_concurrent_index_by_name :dast_site_validations, OLD_INDEX_NAME
+ end
+
+ def down
+ add_concurrent_index :dast_site_validations, :url_base, name: OLD_INDEX_NAME
+ remove_concurrent_index_by_name :dast_site_validations, NEW_INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201015231049_add_ci_build_id_to_terraform_state_versions.rb b/db/migrate/20201015231049_add_ci_build_id_to_terraform_state_versions.rb
new file mode 100644
index 00000000000..539b2af5fc4
--- /dev/null
+++ b/db/migrate/20201015231049_add_ci_build_id_to_terraform_state_versions.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+class AddCiBuildIdToTerraformStateVersions < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_terraform_state_versions_on_ci_build_id'
+
+ disable_ddl_transaction!
+
+ def up
+ unless column_exists?(:terraform_state_versions, :ci_build_id)
+ add_column :terraform_state_versions, :ci_build_id, :bigint
+ end
+
+ add_concurrent_index :terraform_state_versions, :ci_build_id, name: INDEX_NAME
+ add_concurrent_foreign_key :terraform_state_versions, :ci_builds, column: :ci_build_id, on_delete: :nullify
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key_if_exists :terraform_state_versions, :ci_builds, column: :ci_build_id
+ end
+
+ remove_concurrent_index_by_name :terraform_state_versions, INDEX_NAME
+ remove_column :terraform_state_versions, :ci_build_id
+ end
+end
diff --git a/db/migrate/20201016074302_add_index_project_id_and_id_to_container_repositories.rb b/db/migrate/20201016074302_add_index_project_id_and_id_to_container_repositories.rb
new file mode 100644
index 00000000000..b2e7c62ba0c
--- /dev/null
+++ b/db/migrate/20201016074302_add_index_project_id_and_id_to_container_repositories.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddIndexProjectIdAndIdToContainerRepositories < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_container_repositories_on_project_id_and_id'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(:container_repositories, [:project_id, :id], name: INDEX_NAME)
+ end
+
+ def down
+ remove_concurrent_index(:container_repositories, [:project_id, :id], name: INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20201019091307_add_unique_index_on_scan_id_and_position_of_security_findings.rb b/db/migrate/20201019091307_add_unique_index_on_scan_id_and_position_of_security_findings.rb
new file mode 100644
index 00000000000..3303e41d8a1
--- /dev/null
+++ b/db/migrate/20201019091307_add_unique_index_on_scan_id_and_position_of_security_findings.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddUniqueIndexOnScanIdAndPositionOfSecurityFindings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_security_findings_on_scan_id_and_position'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :security_findings, [:scan_id, :position], unique: true, name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :security_findings, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201019101549_add_es_custom_analyzers_settings.rb b/db/migrate/20201019101549_add_es_custom_analyzers_settings.rb
new file mode 100644
index 00000000000..47fd9ebbb8e
--- /dev/null
+++ b/db/migrate/20201019101549_add_es_custom_analyzers_settings.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+class AddEsCustomAnalyzersSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :application_settings, :elasticsearch_analyzers_smartcn_enabled, :bool, null: false, default: false
+ add_column :application_settings, :elasticsearch_analyzers_smartcn_search, :bool, null: false, default: false
+ add_column :application_settings, :elasticsearch_analyzers_kuromoji_enabled, :bool, null: false, default: false
+ add_column :application_settings, :elasticsearch_analyzers_kuromoji_search, :bool, null: false, default: false
+ end
+end
diff --git a/db/migrate/20201019111952_add_sha256_and_filecount_to_pages_deployments.rb b/db/migrate/20201019111952_add_sha256_and_filecount_to_pages_deployments.rb
new file mode 100644
index 00000000000..1921701626d
--- /dev/null
+++ b/db/migrate/20201019111952_add_sha256_and_filecount_to_pages_deployments.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class AddSha256AndFilecountToPagesDeployments < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ # pages_deployments were never enabled on any production/staging
+ # environments, so we safely delete them for people who enabled
+ # them locally
+ execute "DELETE FROM pages_deployments"
+
+ # rubocop:disable Rails/NotNullColumn
+ add_column :pages_deployments, :file_count, :integer, null: false
+ add_column :pages_deployments, :file_sha256, :binary, null: false
+ # rubocop:enable Rails/NotNullColumn
+ end
+
+ def down
+ remove_column :pages_deployments, :file_sha256
+ remove_column :pages_deployments, :file_count
+ end
+end
diff --git a/db/migrate/20201019113009_add_new_user_signups_cap_to_application_settings.rb b/db/migrate/20201019113009_add_new_user_signups_cap_to_application_settings.rb
new file mode 100644
index 00000000000..8754b0d481e
--- /dev/null
+++ b/db/migrate/20201019113009_add_new_user_signups_cap_to_application_settings.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddNewUserSignupsCapToApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :application_settings, :new_user_signups_cap, :integer
+ end
+end
diff --git a/db/migrate/20201019130244_remove_license_compliance_temp_index.rb b/db/migrate/20201019130244_remove_license_compliance_temp_index.rb
new file mode 100644
index 00000000000..d0383d999ed
--- /dev/null
+++ b/db/migrate/20201019130244_remove_license_compliance_temp_index.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class RemoveLicenseComplianceTempIndex < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_ci_job_artifacts_on_license_compliance_file_types'
+
+ disable_ddl_transaction!
+
+ def up
+ remove_concurrent_index_by_name :ci_job_artifacts, name: INDEX_NAME
+ end
+
+ def down
+ add_concurrent_index :ci_job_artifacts, [:job_id, :file_type], where: 'file_type = 10 OR file_type = 101', name: INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201019152046_add_default_branch_to_daily_build_group_report_result.rb b/db/migrate/20201019152046_add_default_branch_to_daily_build_group_report_result.rb
new file mode 100644
index 00000000000..8a0051b8106
--- /dev/null
+++ b/db/migrate/20201019152046_add_default_branch_to_daily_build_group_report_result.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class AddDefaultBranchToDailyBuildGroupReportResult < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ add_column :ci_daily_build_group_report_results, :default_branch, :boolean, default: false, null: false
+ end
+end
diff --git a/db/migrate/20201019161924_add_partitioned_table_view.rb b/db/migrate/20201019161924_add_partitioned_table_view.rb
new file mode 100644
index 00000000000..45bbfda40ff
--- /dev/null
+++ b/db/migrate/20201019161924_add_partitioned_table_view.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+class AddPartitionedTableView < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ execute(<<~SQL)
+ CREATE OR REPLACE VIEW postgres_partitioned_tables AS
+ SELECT
+ pg_namespace.nspname::text || '.'::text || pg_class.relname::text AS identifier,
+ pg_class.oid AS oid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ CASE partitioned_tables.partstrat
+ WHEN 'l' THEN 'list'
+ WHEN 'r' THEN 'range'
+ WHEN 'h' THEN 'hash'
+ END as strategy,
+ array_agg(pg_attribute.attname) as key_columns
+ FROM (
+ SELECT
+ partrelid,
+ partstrat,
+ unnest(partattrs) as column_position
+ FROM pg_partitioned_table
+ ) partitioned_tables
+ INNER JOIN pg_class
+ ON partitioned_tables.partrelid = pg_class.oid
+ INNER JOIN pg_namespace
+ ON pg_class.relnamespace = pg_namespace.oid
+ INNER JOIN pg_attribute
+ ON pg_attribute.attrelid = pg_class.oid
+ AND pg_attribute.attnum = partitioned_tables.column_position
+ WHERE pg_namespace.nspname = current_schema()
+ GROUP BY identifier, pg_class.oid, schema, name, strategy;
+ SQL
+ end
+
+ def down
+ execute(<<~SQL)
+ DROP VIEW IF EXISTS postgres_partitioned_tables
+ SQL
+ end
+end
diff --git a/db/migrate/20201019172704_add_partitions_view.rb b/db/migrate/20201019172704_add_partitions_view.rb
new file mode 100644
index 00000000000..991d137faf3
--- /dev/null
+++ b/db/migrate/20201019172704_add_partitions_view.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+class AddPartitionsView < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ execute(<<~SQL)
+ CREATE OR REPLACE VIEW postgres_partitions AS
+ SELECT
+ pg_namespace.nspname::text || '.'::text || pg_class.relname::text AS identifier,
+ pg_class.oid AS oid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ parent_namespace.nspname::text || '.'::text || parent_class.relname::text AS parent_identifier,
+ pg_get_expr(pg_class.relpartbound, pg_inherits.inhrelid) AS condition
+ FROM pg_class
+ INNER JOIN pg_namespace
+ ON pg_namespace.oid = pg_class.relnamespace
+ INNER JOIN pg_inherits
+ ON pg_class.oid = pg_inherits.inhrelid
+ INNER JOIN pg_class parent_class
+ ON pg_inherits.inhparent = parent_class.oid
+ INNER JOIN pg_namespace parent_namespace
+ ON parent_class.relnamespace = parent_namespace.oid
+ WHERE pg_class.relispartition
+ AND pg_namespace.nspname IN (
+ current_schema(),
+ 'gitlab_partitions_dynamic',
+ 'gitlab_partitions_static'
+ )
+ SQL
+ end
+
+ def down
+ execute(<<~SQL)
+ DROP VIEW IF EXISTS postgres_partitions
+ SQL
+ end
+end
diff --git a/db/migrate/20201021085007_create_analytics_devops_adoption_segments.rb b/db/migrate/20201021085007_create_analytics_devops_adoption_segments.rb
new file mode 100644
index 00000000000..3e322675ba6
--- /dev/null
+++ b/db/migrate/20201021085007_create_analytics_devops_adoption_segments.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class CreateAnalyticsDevopsAdoptionSegments < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ create_table :analytics_devops_adoption_segments, if_not_exists: true do |t|
+ t.text :name, null: false, index: { unique: true }
+ t.datetime_with_timezone :last_recorded_at
+
+ t.timestamps_with_timezone
+ end
+
+ add_text_limit :analytics_devops_adoption_segments, :name, 255
+ end
+
+ def down
+ drop_table :analytics_devops_adoption_segments
+ end
+end
diff --git a/db/migrate/20201021101956_add_index_route_on_name_trigram_to_route.rb b/db/migrate/20201021101956_add_index_route_on_name_trigram_to_route.rb
new file mode 100644
index 00000000000..cf65c7500c5
--- /dev/null
+++ b/db/migrate/20201021101956_add_index_route_on_name_trigram_to_route.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddIndexRouteOnNameTrigramToRoute < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_route_on_name_trigram'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :routes, :name, name: INDEX_NAME, using: :gin, opclass: { name: :gin_trgm_ops }
+ end
+
+ def down
+ remove_concurrent_index_by_name(:routes, INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20201021102554_create_analytics_devops_adoption_segment_selections.rb b/db/migrate/20201021102554_create_analytics_devops_adoption_segment_selections.rb
new file mode 100644
index 00000000000..c5aac7a82a5
--- /dev/null
+++ b/db/migrate/20201021102554_create_analytics_devops_adoption_segment_selections.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class CreateAnalyticsDevopsAdoptionSegmentSelections < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ create_table :analytics_devops_adoption_segment_selections do |t|
+ t.references :segment, index: { name: 'index_on_segment_selections_segment_id' }, null: false, foreign_key: { to_table: :analytics_devops_adoption_segments, on_delete: :cascade }
+ t.bigint :group_id
+ t.bigint :project_id
+ t.index [:group_id, :segment_id], unique: true, name: 'index_on_segment_selections_group_id_segment_id'
+ t.index [:project_id, :segment_id], unique: true, name: 'index_on_segment_selections_project_id_segment_id'
+
+ t.timestamps_with_timezone
+ end
+ end
+end
diff --git a/db/migrate/20201021105347_add_foreign_key_project_id_to_segment_selection.rb b/db/migrate/20201021105347_add_foreign_key_project_id_to_segment_selection.rb
new file mode 100644
index 00000000000..651770e059c
--- /dev/null
+++ b/db/migrate/20201021105347_add_foreign_key_project_id_to_segment_selection.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddForeignKeyProjectIdToSegmentSelection < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key(:analytics_devops_adoption_segment_selections, :projects, column: :project_id, on_delete: :cascade)
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :analytics_devops_adoption_segment_selections, column: :project_id
+ end
+ end
+end
diff --git a/db/migrate/20201021105600_add_foreign_key_group_id_to_segment_selection.rb b/db/migrate/20201021105600_add_foreign_key_group_id_to_segment_selection.rb
new file mode 100644
index 00000000000..3ee73ee3a64
--- /dev/null
+++ b/db/migrate/20201021105600_add_foreign_key_group_id_to_segment_selection.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddForeignKeyGroupIdToSegmentSelection < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key(:analytics_devops_adoption_segment_selections, :namespaces, column: :group_id, on_delete: :cascade)
+ end
+
+ def down
+ with_lock_retries do
+ remove_foreign_key :analytics_devops_adoption_segment_selections, column: :group_id
+ end
+ end
+end
diff --git a/db/migrate/20201021105959_add_check_constraint_to_segment_selection.rb b/db/migrate/20201021105959_add_check_constraint_to_segment_selection.rb
new file mode 100644
index 00000000000..68fec36aa8a
--- /dev/null
+++ b/db/migrate/20201021105959_add_check_constraint_to_segment_selection.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddCheckConstraintToSegmentSelection < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ CONSTRAINT_NAME = 'segment_selection_project_id_or_group_id_required'
+
+ def up
+ add_check_constraint :analytics_devops_adoption_segment_selections, '(project_id != NULL AND group_id IS NULL) OR (group_id != NULL AND project_id IS NULL)', CONSTRAINT_NAME
+ end
+
+ def down
+ remove_check_constraint :analytics_devops_adoption_segment_selections, CONSTRAINT_NAME
+ end
+end
diff --git a/db/migrate/20201021142812_add_index_to_ci_daily_build_group_report_results.rb b/db/migrate/20201021142812_add_index_to_ci_daily_build_group_report_results.rb
new file mode 100644
index 00000000000..c811e3deeda
--- /dev/null
+++ b/db/migrate/20201021142812_add_index_to_ci_daily_build_group_report_results.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class AddIndexToCiDailyBuildGroupReportResults < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_ci_daily_build_group_report_results_on_project_and_date'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(
+ :ci_daily_build_group_report_results,
+ [:project_id, :date],
+ order: { date: :desc },
+ where: "default_branch = TRUE AND (data -> 'coverage') IS NOT NULL",
+ name: INDEX_NAME
+ )
+ end
+
+ def down
+ remove_concurrent_index_by_name(:ci_daily_build_group_report_results, INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20201021152210_add_secret_detection_token_revocation_application_settings.rb b/db/migrate/20201021152210_add_secret_detection_token_revocation_application_settings.rb
new file mode 100644
index 00000000000..6334dcd8c1a
--- /dev/null
+++ b/db/migrate/20201021152210_add_secret_detection_token_revocation_application_settings.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddSecretDetectionTokenRevocationApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ add_column :application_settings, :secret_detection_token_revocation_enabled, :boolean, default: false, null: false
+ add_column :application_settings, :secret_detection_token_revocation_url, :text, null: true # rubocop:disable Migration/AddLimitToTextColumns
+
+ add_column :application_settings, :encrypted_secret_detection_token_revocation_token, :text
+ add_column :application_settings, :encrypted_secret_detection_token_revocation_token_iv, :text
+ end
+
+ def down
+ remove_column :application_settings, :secret_detection_token_revocation_enabled
+ remove_column :application_settings, :secret_detection_token_revocation_url
+
+ remove_column :application_settings, :encrypted_secret_detection_token_revocation_token
+ remove_column :application_settings, :encrypted_secret_detection_token_revocation_token_iv
+ end
+end
diff --git a/db/migrate/20201021190539_add_text_limit_to_secret_detection_token_revocation_application_settings.rb b/db/migrate/20201021190539_add_text_limit_to_secret_detection_token_revocation_application_settings.rb
new file mode 100644
index 00000000000..ea5e12322d0
--- /dev/null
+++ b/db/migrate/20201021190539_add_text_limit_to_secret_detection_token_revocation_application_settings.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddTextLimitToSecretDetectionTokenRevocationApplicationSettings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :application_settings, :secret_detection_token_revocation_url, 255
+ end
+
+ def down
+ remove_text_limit :application_settings, :secret_detection_token_revocation_url
+ end
+end
diff --git a/db/migrate/20201021220101_add_merge_trains_enabled.rb b/db/migrate/20201021220101_add_merge_trains_enabled.rb
new file mode 100644
index 00000000000..88a71897435
--- /dev/null
+++ b/db/migrate/20201021220101_add_merge_trains_enabled.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddMergeTrainsEnabled < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :project_ci_cd_settings, :merge_trains_enabled, :boolean, default: false, allow_null: false
+ end
+end
diff --git a/db/migrate/20201022080802_add_repository_read_only_to_snippets.rb b/db/migrate/20201022080802_add_repository_read_only_to_snippets.rb
new file mode 100644
index 00000000000..d0cb329fb02
--- /dev/null
+++ b/db/migrate/20201022080802_add_repository_read_only_to_snippets.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddRepositoryReadOnlyToSnippets < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :snippets, :repository_read_only, :boolean, default: false, null: false
+ end
+end
diff --git a/db/migrate/20201022094845_add_historical_data_recorded_at.rb b/db/migrate/20201022094845_add_historical_data_recorded_at.rb
new file mode 100644
index 00000000000..c90889e2d38
--- /dev/null
+++ b/db/migrate/20201022094845_add_historical_data_recorded_at.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddHistoricalDataRecordedAt < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ add_column(:historical_data, :recorded_at, :timestamptz)
+ end
+
+ def down
+ remove_column(:historical_data, :recorded_at)
+ end
+end
diff --git a/db/migrate/20201022094846_update_historical_data_recorded_at.rb b/db/migrate/20201022094846_update_historical_data_recorded_at.rb
new file mode 100644
index 00000000000..bd1889149bb
--- /dev/null
+++ b/db/migrate/20201022094846_update_historical_data_recorded_at.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+class UpdateHistoricalDataRecordedAt < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ update_value = Arel.sql("COALESCE(created_at, date + '12:00'::time AT TIME ZONE '#{Time.zone&.tzinfo&.name || "Etc/UTC"}')")
+
+ update_column_in_batches(:historical_data, :recorded_at, update_value) do |table, query|
+ query.where(table[:recorded_at].eq(nil))
+ end
+
+ add_not_null_constraint :historical_data, :recorded_at
+
+ change_column_null :historical_data, :date, true
+ end
+
+ def down
+ change_column_null :historical_data, :date, false
+
+ remove_not_null_constraint :historical_data, :recorded_at
+
+ update_column_in_batches(:historical_data, :recorded_at, nil) do |table, query|
+ query.where(table[:recorded_at].not_eq(nil))
+ end
+ end
+end
diff --git a/db/migrate/20201022103304_add_availability_to_user_statuses.rb b/db/migrate/20201022103304_add_availability_to_user_statuses.rb
new file mode 100644
index 00000000000..9144c81fcfb
--- /dev/null
+++ b/db/migrate/20201022103304_add_availability_to_user_statuses.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddAvailabilityToUserStatuses < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :user_statuses, :availability, :integer, limit: 2, default: 0, null: false
+ end
+end
diff --git a/db/migrate/20201022144501_create_snippet_repository_storage_move.rb b/db/migrate/20201022144501_create_snippet_repository_storage_move.rb
new file mode 100644
index 00000000000..7db38191942
--- /dev/null
+++ b/db/migrate/20201022144501_create_snippet_repository_storage_move.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+class CreateSnippetRepositoryStorageMove < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ unless table_exists?(:snippet_repository_storage_moves)
+ with_lock_retries do
+ create_table :snippet_repository_storage_moves do |t|
+ t.timestamps_with_timezone
+ t.references :snippet, index: true, null: false, foreign_key: { on_delete: :cascade }
+ t.integer :state, limit: 2, default: 1, null: false
+ t.text :source_storage_name, null: false
+ t.text :destination_storage_name, null: false
+ end
+ end
+ end
+
+ add_text_limit(:snippet_repository_storage_moves, :source_storage_name, 255, constraint_name: 'snippet_repository_storage_moves_source_storage_name')
+ add_text_limit(:snippet_repository_storage_moves, :destination_storage_name, 255, constraint_name: 'snippet_repository_storage_moves_destination_storage_name')
+ end
+
+ def down
+ with_lock_retries do
+ drop_table :snippet_repository_storage_moves
+ end
+ end
+end
diff --git a/db/migrate/20201022191817_add_has_vulnerabilities_into_project_settings.rb b/db/migrate/20201022191817_add_has_vulnerabilities_into_project_settings.rb
new file mode 100644
index 00000000000..bb2d683c4e2
--- /dev/null
+++ b/db/migrate/20201022191817_add_has_vulnerabilities_into_project_settings.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddHasVulnerabilitiesIntoProjectSettings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ add_column :project_settings, :has_vulnerabilities, :boolean, default: false, null: false
+ end
+ end
+
+ def down
+ with_lock_retries do
+ remove_column :project_settings, :has_vulnerabilities
+ end
+ end
+end
diff --git a/db/migrate/20201022192254_index_project_settings_on_project_id_partially.rb b/db/migrate/20201022192254_index_project_settings_on_project_id_partially.rb
new file mode 100644
index 00000000000..57247bd0f22
--- /dev/null
+++ b/db/migrate/20201022192254_index_project_settings_on_project_id_partially.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class IndexProjectSettingsOnProjectIdPartially < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_project_settings_on_project_id_partially'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :project_settings, :project_id, name: INDEX_NAME, where: 'has_vulnerabilities IS TRUE'
+ end
+
+ def down
+ remove_concurrent_index_by_name :project_settings, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201023114628_create_merge_request_cleanup_schedules.rb b/db/migrate/20201023114628_create_merge_request_cleanup_schedules.rb
new file mode 100644
index 00000000000..f63738682b1
--- /dev/null
+++ b/db/migrate/20201023114628_create_merge_request_cleanup_schedules.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+class CreateMergeRequestCleanupSchedules < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ create_table :merge_request_cleanup_schedules, id: false do |t|
+ t.references :merge_request, primary_key: true, index: { unique: true }, null: false, foreign_key: { on_delete: :cascade }
+ t.datetime_with_timezone :scheduled_at, null: false
+ t.datetime_with_timezone :completed_at, null: true
+
+ t.timestamps_with_timezone
+
+ t.index :scheduled_at, where: 'completed_at IS NULL', name: 'index_mr_cleanup_schedules_timestamps'
+ end
+ end
+ end
+
+ def down
+ with_lock_retries do
+ drop_table :merge_request_cleanup_schedules
+ end
+ end
+end
diff --git a/db/migrate/20201026200736_seed_merge_trains_enabled.rb b/db/migrate/20201026200736_seed_merge_trains_enabled.rb
new file mode 100644
index 00000000000..c22c2a408bc
--- /dev/null
+++ b/db/migrate/20201026200736_seed_merge_trains_enabled.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class SeedMergeTrainsEnabled < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ update_column_in_batches(:project_ci_cd_settings, :merge_trains_enabled, true) do |table, query|
+ query.where(table[:merge_pipelines_enabled].eq(true))
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/migrate/20201027002551_migrate_services_to_http_integrations.rb b/db/migrate/20201027002551_migrate_services_to_http_integrations.rb
new file mode 100644
index 00000000000..5fe05320862
--- /dev/null
+++ b/db/migrate/20201027002551_migrate_services_to_http_integrations.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+class MigrateServicesToHttpIntegrations < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ ALERT_SERVICE_TYPE = 'AlertsService'
+ SERVICE_NAMES_IDENTIFIER = {
+ name: 'HTTP endpoint',
+ identifier: 'legacy'
+ }
+
+ class HttpIntegration < ActiveRecord::Base
+ self.table_name = 'alert_management_http_integrations'
+ end
+
+ # For each Alerts service,
+ # Create the matching HttpIntegration
+ def up
+ HttpIntegration.reset_column_information
+
+ sql = <<~SQL
+ SELECT * FROM services
+ JOIN alerts_service_data
+ ON (services.id = alerts_service_data.service_id)
+ WHERE type = '#{ALERT_SERVICE_TYPE}'
+ AND active = TRUE
+ SQL
+
+ current_time = Time.current
+
+ values = select_all(sql).map do |alerts_service|
+ {
+ project_id: alerts_service['project_id'],
+ name: SERVICE_NAMES_IDENTIFIER[:name],
+ endpoint_identifier: SERVICE_NAMES_IDENTIFIER[:identifier],
+ encrypted_token: alerts_service['encrypted_token'],
+ encrypted_token_iv: alerts_service['encrypted_token_iv'],
+ active: alerts_service['active'],
+ updated_at: current_time,
+ created_at: current_time
+ }
+ end
+
+ HttpIntegration.insert_all(values) if values.present?
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/migrate/20201027135651_add_auto_rollback_setting.rb b/db/migrate/20201027135651_add_auto_rollback_setting.rb
new file mode 100644
index 00000000000..8e916ac9d36
--- /dev/null
+++ b/db/migrate/20201027135651_add_auto_rollback_setting.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddAutoRollbackSetting < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ add_column :project_ci_cd_settings, :auto_rollback_enabled, :boolean, default: false, null: false
+ end
+ end
+
+ def down
+ with_lock_retries do
+ remove_column :project_ci_cd_settings, :auto_rollback_enabled
+ end
+ end
+end
diff --git a/db/migrate/20201027210127_add_index_to_oauth_access_grants_resource_owner_id.rb b/db/migrate/20201027210127_add_index_to_oauth_access_grants_resource_owner_id.rb
new file mode 100644
index 00000000000..035d2fb4386
--- /dev/null
+++ b/db/migrate/20201027210127_add_index_to_oauth_access_grants_resource_owner_id.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddIndexToOauthAccessGrantsResourceOwnerId < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_oauth_access_grants_on_resource_owner_id'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :oauth_access_grants, %i[resource_owner_id application_id created_at], name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :oauth_access_grants, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201027211138_increase_default_diff_max_patch_bytes.rb b/db/migrate/20201027211138_increase_default_diff_max_patch_bytes.rb
new file mode 100644
index 00000000000..92d9025706f
--- /dev/null
+++ b/db/migrate/20201027211138_increase_default_diff_max_patch_bytes.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class IncreaseDefaultDiffMaxPatchBytes < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ change_column_default(:application_settings, :diff_max_patch_bytes, from: 102400, to: 204800)
+ end
+end
diff --git a/db/migrate/20201028160831_add_temporary_index_to_vulnerabilities_table.rb b/db/migrate/20201028160831_add_temporary_index_to_vulnerabilities_table.rb
new file mode 100644
index 00000000000..05bb75be75a
--- /dev/null
+++ b/db/migrate/20201028160831_add_temporary_index_to_vulnerabilities_table.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddTemporaryIndexToVulnerabilitiesTable < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'temporary_index_vulnerabilities_on_id'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :vulnerabilities, :id, where: "state = 2 AND (dismissed_at IS NULL OR dismissed_by_id IS NULL)", name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :vulnerabilities, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201028184640_add_helm_major_version_to_clusters.rb b/db/migrate/20201028184640_add_helm_major_version_to_clusters.rb
new file mode 100644
index 00000000000..2169fd41826
--- /dev/null
+++ b/db/migrate/20201028184640_add_helm_major_version_to_clusters.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+# See https://docs.gitlab.com/ee/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddHelmMajorVersionToClusters < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column(:clusters, :helm_major_version, :integer, default: 2, null: false)
+ end
+end
diff --git a/db/migrate/20201028204306_migrate_default_diff_max_patch_bytes_to_minimum_200kb.rb b/db/migrate/20201028204306_migrate_default_diff_max_patch_bytes_to_minimum_200kb.rb
new file mode 100644
index 00000000000..11d47904e67
--- /dev/null
+++ b/db/migrate/20201028204306_migrate_default_diff_max_patch_bytes_to_minimum_200kb.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class MigrateDefaultDiffMaxPatchBytesToMinimum200kb < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+ MAX_SIZE = 200.kilobytes
+
+ class ApplicationSetting < ActiveRecord::Base
+ self.table_name = 'application_settings'
+ end
+
+ def up
+ table = ApplicationSetting.arel_table
+ ApplicationSetting.where(table[:diff_max_patch_bytes].lt(MAX_SIZE)).update_all(diff_max_patch_bytes: MAX_SIZE)
+ end
+
+ def down
+ table = ApplicationSetting.arel_table
+ ApplicationSetting.where(table[:diff_max_patch_bytes].eq(MAX_SIZE)).update_all(diff_max_patch_bytes: 100.kilobytes)
+ end
+end
diff --git a/db/migrate/20201029143650_rename_application_settings_to_allow_deny_names.rb b/db/migrate/20201029143650_rename_application_settings_to_allow_deny_names.rb
new file mode 100644
index 00000000000..2d96da91069
--- /dev/null
+++ b/db/migrate/20201029143650_rename_application_settings_to_allow_deny_names.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class RenameApplicationSettingsToAllowDenyNames < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ rename_column_concurrently :application_settings, :domain_blacklist_enabled, :domain_denylist_enabled
+ rename_column_concurrently :application_settings, :domain_blacklist, :domain_denylist
+ rename_column_concurrently :application_settings, :domain_whitelist, :domain_allowlist
+ end
+
+ def down
+ undo_rename_column_concurrently :application_settings, :domain_blacklist_enabled, :domain_denylist_enabled
+ undo_rename_column_concurrently :application_settings, :domain_blacklist, :domain_denylist
+ undo_rename_column_concurrently :application_settings, :domain_whitelist, :domain_allowlist
+ end
+end
diff --git a/db/migrate/20201029144444_create_vulnerability_finding_links.rb b/db/migrate/20201029144444_create_vulnerability_finding_links.rb
new file mode 100644
index 00000000000..80f93b9a0af
--- /dev/null
+++ b/db/migrate/20201029144444_create_vulnerability_finding_links.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class CreateVulnerabilityFindingLinks < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ create_table :vulnerability_finding_links, if_not_exists: true do |t|
+ t.timestamps_with_timezone null: false
+ t.references :vulnerability_occurrence, index: { name: 'finding_links_on_vulnerability_occurrence_id' }, null: false, foreign_key: { on_delete: :cascade }
+ t.text :name, limit: 255
+ t.text :url, limit: 2048, null: false
+ end
+
+ add_text_limit :vulnerability_finding_links, :name, 255
+ add_text_limit :vulnerability_finding_links, :url, 2048
+ end
+
+ def down
+ drop_table :vulnerability_finding_links
+ end
+end
diff --git a/db/migrate/20201030092151_add_requirements_access_level_to_project_features.rb b/db/migrate/20201030092151_add_requirements_access_level_to_project_features.rb
new file mode 100644
index 00000000000..e4ba7b2adb9
--- /dev/null
+++ b/db/migrate/20201030092151_add_requirements_access_level_to_project_features.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddRequirementsAccessLevelToProjectFeatures < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ unless column_exists?(:project_features, :requirements_access_level)
+ with_lock_retries { add_column :project_features, :requirements_access_level, :integer, default: 20, null: false }
+ end
+ end
+
+ def down
+ if column_exists?(:project_features, :requirements_access_level)
+ with_lock_retries { remove_column :project_features, :requirements_access_level }
+ end
+ end
+end
diff --git a/db/migrate/20201030200115_add_iid_to_design_management_design.rb b/db/migrate/20201030200115_add_iid_to_design_management_design.rb
new file mode 100644
index 00000000000..c31cd86d5e2
--- /dev/null
+++ b/db/migrate/20201030200115_add_iid_to_design_management_design.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddIidToDesignManagementDesign < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ add_column :design_management_designs, :iid, :integer
+ end
+end
diff --git a/db/migrate/20201030200539_add_index_on_design_management_designs_iid_project_id.rb b/db/migrate/20201030200539_add_index_on_design_management_designs_iid_project_id.rb
new file mode 100644
index 00000000000..3ff50c299cb
--- /dev/null
+++ b/db/migrate/20201030200539_add_index_on_design_management_designs_iid_project_id.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddIndexOnDesignManagementDesignsIidProjectId < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ INDEX_NAME = 'index_design_management_designs_on_iid_and_project_id'
+
+ def up
+ add_concurrent_index :design_management_designs, [:project_id, :iid],
+ name: INDEX_NAME,
+ unique: true
+ end
+
+ def down
+ remove_concurrent_index_by_name :design_management_designs, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201102184743_add_index_to_incident_issues_on_project_and_created_at.rb b/db/migrate/20201102184743_add_index_to_incident_issues_on_project_and_created_at.rb
new file mode 100644
index 00000000000..1fd900002c3
--- /dev/null
+++ b/db/migrate/20201102184743_add_index_to_incident_issues_on_project_and_created_at.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class AddIndexToIncidentIssuesOnProjectAndCreatedAt < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ INCIDENT_TYPE = 1
+ OLD_INDEX_NAME = 'index_issues_project_id_issue_type_incident'
+ NEW_INDEX_NAME = 'index_issues_on_project_id_and_created_at_issue_type_incident'
+
+ DOWNTIME = false
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :issues,
+ [:project_id, :created_at],
+ where: "issue_type = #{INCIDENT_TYPE}",
+ name: NEW_INDEX_NAME
+
+ remove_concurrent_index_by_name :issues, OLD_INDEX_NAME
+ end
+
+ def down
+ add_concurrent_index :issues,
+ :project_id,
+ where: "issue_type = #{INCIDENT_TYPE}",
+ name: OLD_INDEX_NAME
+
+ remove_concurrent_index_by_name :issues, NEW_INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201103095752_add_issues_closed_at_index.rb b/db/migrate/20201103095752_add_issues_closed_at_index.rb
new file mode 100644
index 00000000000..7a8ee4e8d67
--- /dev/null
+++ b/db/migrate/20201103095752_add_issues_closed_at_index.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddIssuesClosedAtIndex < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(:issues, [:project_id, :closed_at])
+ end
+
+ def down
+ remove_concurrent_index_by_name(:issues, 'index_issues_on_project_id_and_closed_at')
+ end
+end
diff --git a/db/migrate/20201103171537_add_index_active_billable_users_to_user.rb b/db/migrate/20201103171537_add_index_active_billable_users_to_user.rb
new file mode 100644
index 00000000000..3ad7a3f4ca3
--- /dev/null
+++ b/db/migrate/20201103171537_add_index_active_billable_users_to_user.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddIndexActiveBillableUsersToUser < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'active_billable_users'
+ HUMAN_TYPE = 'NULL'
+ HUMAN_SVC_BOT_TYPES = "#{HUMAN_TYPE}, 6, 4"
+ BOT_TYPES = '2,6,1,3,7,8'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :users, :id, name: INDEX_NAME, where: "(state = 'active' AND (user_type is #{HUMAN_TYPE} or user_type in (#{HUMAN_SVC_BOT_TYPES}))) and ((users.user_type IS #{HUMAN_TYPE}) OR (users.user_type <> ALL ('{#{BOT_TYPES}}')))"
+ end
+
+ def down
+ remove_concurrent_index_by_name(:users, INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20201103184333_create_packages_package_file_build_infos.rb b/db/migrate/20201103184333_create_packages_package_file_build_infos.rb
new file mode 100644
index 00000000000..9cb6869cae4
--- /dev/null
+++ b/db/migrate/20201103184333_create_packages_package_file_build_infos.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class CreatePackagesPackageFileBuildInfos < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ unless table_exists?(:packages_package_file_build_infos)
+ with_lock_retries do
+ create_table :packages_package_file_build_infos do |t|
+ t.references :package_file, index: true,
+ null: false,
+ foreign_key: { to_table: :packages_package_files, on_delete: :cascade },
+ type: :bigint
+ t.references :pipeline, index: true,
+ null: true,
+ foreign_key: { to_table: :ci_pipelines, on_delete: :nullify },
+ type: :bigint
+ end
+ end
+ end
+ end
+
+ def down
+ with_lock_retries do
+ drop_table :packages_package_file_build_infos
+ end
+ end
+end
diff --git a/db/migrate/20201103202213_update_packages_build_infos_index.rb b/db/migrate/20201103202213_update_packages_build_infos_index.rb
new file mode 100644
index 00000000000..d737517045b
--- /dev/null
+++ b/db/migrate/20201103202213_update_packages_build_infos_index.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class UpdatePackagesBuildInfosIndex < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ NEW_INDEX_NAME = 'idx_packages_build_infos_on_package_id'
+ OLD_INDEX_NAME = 'index_packages_build_infos_on_package_id'
+
+ def up
+ add_concurrent_index :packages_build_infos, :package_id, name: NEW_INDEX_NAME
+ remove_concurrent_index_by_name :packages_build_infos, OLD_INDEX_NAME
+ end
+
+ def down
+ # No op. It is possible records would validate the UNIQUE constraint, so it
+ # cannot be added back to the index.
+ end
+end
diff --git a/db/migrate/20201104204739_create_bulk_import_trackers.rb b/db/migrate/20201104204739_create_bulk_import_trackers.rb
new file mode 100644
index 00000000000..906bd06248d
--- /dev/null
+++ b/db/migrate/20201104204739_create_bulk_import_trackers.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+class CreateBulkImportTrackers < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ with_lock_retries do
+ unless table_exists?(:bulk_import_trackers)
+ create_table :bulk_import_trackers do |t|
+ t.references :bulk_import_entity,
+ null: false,
+ index: false,
+ foreign_key: { on_delete: :cascade }
+
+ t.text :relation, null: false
+ t.text :next_page
+ t.boolean :has_next_page, default: false, null: false
+
+ t.index %w(bulk_import_entity_id relation),
+ unique: true,
+ name: :bulk_import_trackers_uniq_relation_by_entity
+ end
+ end
+ end
+
+ add_check_constraint :bulk_import_trackers,
+ '(has_next_page IS FALSE or next_page IS NOT NULL)',
+ 'check_next_page_requirement'
+ add_text_limit :bulk_import_trackers, :relation, 255
+ add_text_limit :bulk_import_trackers, :next_page, 255
+ end
+
+ def down
+ with_lock_retries do
+ drop_table :bulk_import_trackers
+ end
+ end
+end
diff --git a/db/migrate/20201105021637_add_uploads_size_to_project_statistics.rb b/db/migrate/20201105021637_add_uploads_size_to_project_statistics.rb
new file mode 100644
index 00000000000..1d2251f6c37
--- /dev/null
+++ b/db/migrate/20201105021637_add_uploads_size_to_project_statistics.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddUploadsSizeToProjectStatistics < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ add_column :project_statistics, :uploads_size, :bigint, default: 0, null: false
+ end
+
+ def down
+ remove_column :project_statistics, :uploads_size
+ end
+end
diff --git a/db/migrate/20201105024127_add_uploads_size_to_namespace_root_storage_statistics.rb b/db/migrate/20201105024127_add_uploads_size_to_namespace_root_storage_statistics.rb
new file mode 100644
index 00000000000..c3cccc7d5f2
--- /dev/null
+++ b/db/migrate/20201105024127_add_uploads_size_to_namespace_root_storage_statistics.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddUploadsSizeToNamespaceRootStorageStatistics < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ add_column :namespace_root_storage_statistics, :uploads_size, :bigint, default: 0, null: false
+ end
+
+ def down
+ remove_column :namespace_root_storage_statistics, :uploads_size
+ end
+end
diff --git a/db/migrate/20201105135051_change_default_value_of_ci_max_artifact_size_lsif_of_plan_limits_from20_to100.rb b/db/migrate/20201105135051_change_default_value_of_ci_max_artifact_size_lsif_of_plan_limits_from20_to100.rb
new file mode 100644
index 00000000000..d53f81ecabb
--- /dev/null
+++ b/db/migrate/20201105135051_change_default_value_of_ci_max_artifact_size_lsif_of_plan_limits_from20_to100.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class ChangeDefaultValueOfCiMaxArtifactSizeLsifOfPlanLimitsFrom20To100 < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ change_column_default :plan_limits, :ci_max_artifact_size_lsif, 100
+ execute('UPDATE plan_limits SET ci_max_artifact_size_lsif = 100 WHERE ci_max_artifact_size_lsif = 20')
+ end
+ end
+
+ def down
+ with_lock_retries do
+ change_column_default :plan_limits, :ci_max_artifact_size_lsif, 20
+ execute('UPDATE plan_limits SET ci_max_artifact_size_lsif = 20 WHERE ci_max_artifact_size_lsif = 100')
+ end
+ end
+end
diff --git a/db/migrate/20201105143211_add_vulnerabilities_enabled_and_issuetype_to_jira_tracker_data.rb b/db/migrate/20201105143211_add_vulnerabilities_enabled_and_issuetype_to_jira_tracker_data.rb
new file mode 100644
index 00000000000..27269de611c
--- /dev/null
+++ b/db/migrate/20201105143211_add_vulnerabilities_enabled_and_issuetype_to_jira_tracker_data.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddVulnerabilitiesEnabledAndIssuetypeToJiraTrackerData < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ # rubocop:disable Migration/AddLimitToTextColumns
+ # limit is added in 20201105143312_add_text_limit_to_jira_tracker_data_issuetype.rb
+ def change
+ add_column :jira_tracker_data, :vulnerabilities_issuetype, :text
+ add_column :jira_tracker_data, :vulnerabilities_enabled, :boolean, default: false, null: false
+ end
+ # rubocop:enable Migration/AddLimitToTextColumns
+end
diff --git a/db/migrate/20201105143312_add_text_limit_to_jira_tracker_data_issuetype.rb b/db/migrate/20201105143312_add_text_limit_to_jira_tracker_data_issuetype.rb
new file mode 100644
index 00000000000..4a81b0ce7af
--- /dev/null
+++ b/db/migrate/20201105143312_add_text_limit_to_jira_tracker_data_issuetype.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddTextLimitToJiraTrackerDataIssuetype < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :jira_tracker_data, :vulnerabilities_issuetype, 255
+ end
+
+ def down
+ remove_text_limit :jira_tracker_data, :vulnerabilities_issuetype
+ end
+end
diff --git a/db/migrate/20201106134139_add_pipelines_created_index.rb b/db/migrate/20201106134139_add_pipelines_created_index.rb
new file mode 100644
index 00000000000..aaf6643cf0b
--- /dev/null
+++ b/db/migrate/20201106134139_add_pipelines_created_index.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddPipelinesCreatedIndex < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ INDEX_NAME = :index_ci_pipelines_on_project_id_and_status_and_created_at
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :ci_pipelines, [:project_id, :status, :created_at], name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :ci_pipelines, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201107032257_add_default_true_require_admin_approval_after_user_signup_to_application_settings.rb b/db/migrate/20201107032257_add_default_true_require_admin_approval_after_user_signup_to_application_settings.rb
new file mode 100644
index 00000000000..196f7bd8359
--- /dev/null
+++ b/db/migrate/20201107032257_add_default_true_require_admin_approval_after_user_signup_to_application_settings.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddDefaultTrueRequireAdminApprovalAfterUserSignupToApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def change
+ change_column_default :application_settings, :require_admin_approval_after_user_signup, from: false, to: true
+ end
+end
diff --git a/db/migrate/20201109144634_add_region_field_to_aws_role.rb b/db/migrate/20201109144634_add_region_field_to_aws_role.rb
new file mode 100644
index 00000000000..ced75f24552
--- /dev/null
+++ b/db/migrate/20201109144634_add_region_field_to_aws_role.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddRegionFieldToAwsRole < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ unless column_exists?(:aws_roles, :region)
+ add_column :aws_roles, :region, :text
+ end
+
+ add_text_limit :aws_roles, :region, 255
+ end
+
+ def down
+ remove_column :aws_roles, :region
+ end
+end
diff --git a/db/migrate/20201109180311_add_secret_detection_revocation_token_types_application_settings.rb b/db/migrate/20201109180311_add_secret_detection_revocation_token_types_application_settings.rb
new file mode 100644
index 00000000000..0823655f92f
--- /dev/null
+++ b/db/migrate/20201109180311_add_secret_detection_revocation_token_types_application_settings.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddSecretDetectionRevocationTokenTypesApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ add_column :application_settings, :secret_detection_revocation_token_types_url, :text, null: true # rubocop:disable Migration/AddLimitToTextColumns
+ end
+
+ def down
+ remove_column :application_settings, :secret_detection_revocation_token_types_url
+ end
+end
diff --git a/db/migrate/20201109184023_add_text_limit_to_secret_detection_revocation_token_types_application_settings.rb b/db/migrate/20201109184023_add_text_limit_to_secret_detection_revocation_token_types_application_settings.rb
new file mode 100644
index 00000000000..9e0329aafcc
--- /dev/null
+++ b/db/migrate/20201109184023_add_text_limit_to_secret_detection_revocation_token_types_application_settings.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddTextLimitToSecretDetectionRevocationTokenTypesApplicationSettings < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :application_settings, :secret_detection_revocation_token_types_url, 255
+ end
+
+ def down
+ remove_text_limit :application_settings, :secret_detection_revocation_token_types_url
+ end
+end
diff --git a/db/migrate/20201110035029_created_index_for_vulnerability_occurrences_on_project_fingerprint.rb b/db/migrate/20201110035029_created_index_for_vulnerability_occurrences_on_project_fingerprint.rb
new file mode 100644
index 00000000000..fed117d5f08
--- /dev/null
+++ b/db/migrate/20201110035029_created_index_for_vulnerability_occurrences_on_project_fingerprint.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class CreatedIndexForVulnerabilityOccurrencesOnProjectFingerprint < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_vulnerability_occurrences_on_project_fingerprint'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :vulnerability_occurrences, :project_fingerprint, name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :vulnerability_occurrences, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20201110110454_extend_postgres_indexes_view.rb b/db/migrate/20201110110454_extend_postgres_indexes_view.rb
new file mode 100644
index 00000000000..4e9172024d3
--- /dev/null
+++ b/db/migrate/20201110110454_extend_postgres_indexes_view.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+class ExtendPostgresIndexesView < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ execute(<<~SQL)
+ DROP VIEW postgres_indexes;
+
+ CREATE VIEW postgres_indexes AS
+ SELECT (pg_namespace.nspname::text || '.'::text) || pg_class.relname::text AS identifier,
+ pg_index.indexrelid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ pg_index.indisunique AS "unique",
+ pg_index.indisvalid AS valid_index,
+ pg_class.relispartition AS partitioned,
+ pg_index.indisexclusion AS exclusion,
+ pg_index.indexprs IS NOT NULL as expression,
+ pg_index.indpred IS NOT NULL as partial,
+ pg_indexes.indexdef AS definition,
+ pg_relation_size(pg_class.oid::regclass) AS ondisk_size_bytes
+ FROM pg_index
+ JOIN pg_class ON pg_class.oid = pg_index.indexrelid
+ JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid
+ JOIN pg_indexes ON pg_class.relname = pg_indexes.indexname
+ WHERE pg_namespace.nspname <> 'pg_catalog'::name
+ AND (pg_namespace.nspname = ANY (ARRAY["current_schema"(), 'gitlab_partitions_dynamic'::name, 'gitlab_partitions_static'::name]));
+ SQL
+ end
+
+ def down
+ execute(<<~SQL)
+ DROP VIEW postgres_indexes;
+
+ CREATE VIEW postgres_indexes AS
+ SELECT (pg_namespace.nspname::text || '.'::text) || pg_class.relname::text AS identifier,
+ pg_index.indexrelid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ pg_index.indisunique AS "unique",
+ pg_index.indisvalid AS valid_index,
+ pg_class.relispartition AS partitioned,
+ pg_index.indisexclusion AS exclusion,
+ pg_indexes.indexdef AS definition,
+ pg_relation_size(pg_class.oid::regclass) AS ondisk_size_bytes
+ FROM pg_index
+ JOIN pg_class ON pg_class.oid = pg_index.indexrelid
+ JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid
+ JOIN pg_indexes ON pg_class.relname = pg_indexes.indexname
+ WHERE pg_namespace.nspname <> 'pg_catalog'::name
+ AND (pg_namespace.nspname = ANY (ARRAY["current_schema"(), 'gitlab_partitions_dynamic'::name, 'gitlab_partitions_static'::name]));
+ SQL
+ end
+end
diff --git a/db/migrate/20201110133629_change_index_mr_metrics_target_project_id.rb b/db/migrate/20201110133629_change_index_mr_metrics_target_project_id.rb
new file mode 100644
index 00000000000..5bd810207d8
--- /dev/null
+++ b/db/migrate/20201110133629_change_index_mr_metrics_target_project_id.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class ChangeIndexMrMetricsTargetProjectId < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+ disable_ddl_transaction!
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_merge_request_metrics_on_target_project_id_merged_at'
+ NULLS_LAST_INDEX_NAME = 'index_mr_metrics_on_target_project_id_merged_at_nulls_last'
+
+ def up
+ add_concurrent_index :merge_request_metrics, [:target_project_id, :merged_at, :id], order: { merged_at: 'DESC NULLS LAST', id: 'DESC' }, name: NULLS_LAST_INDEX_NAME
+ remove_concurrent_index_by_name(:merge_request_metrics, INDEX_NAME)
+ end
+
+ def down
+ add_concurrent_index :merge_request_metrics, [:target_project_id, :merged_at], name: INDEX_NAME
+ remove_concurrent_index_by_name(:merge_request_metrics, NULLS_LAST_INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20201111110318_add_cloud_license_auth_token_to_settings.rb b/db/migrate/20201111110318_add_cloud_license_auth_token_to_settings.rb
new file mode 100644
index 00000000000..e2069835597
--- /dev/null
+++ b/db/migrate/20201111110318_add_cloud_license_auth_token_to_settings.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddCloudLicenseAuthTokenToSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ # rubocop:disable Migration/AddLimitToTextColumns
+ # limit is added in 20201111110918_add_cloud_license_auth_token_application_settings_text_limit
+ def change
+ add_column :application_settings, :encrypted_cloud_license_auth_token, :text
+ add_column :application_settings, :encrypted_cloud_license_auth_token_iv, :text
+ end
+ # rubocop:enable Migration/AddLimitToTextColumns
+end
diff --git a/db/migrate/20201111110918_add_cloud_license_auth_token_application_settings_text_limit.rb b/db/migrate/20201111110918_add_cloud_license_auth_token_application_settings_text_limit.rb
new file mode 100644
index 00000000000..fd1ee5e07bf
--- /dev/null
+++ b/db/migrate/20201111110918_add_cloud_license_auth_token_application_settings_text_limit.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddCloudLicenseAuthTokenApplicationSettingsTextLimit < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :application_settings, :encrypted_cloud_license_auth_token_iv, 255
+ end
+
+ def down
+ remove_text_limit :application_settings, :encrypted_cloud_license_auth_token_iv
+ end
+end
diff --git a/db/migrate/20201111152859_add_missing_expression_indexes.rb b/db/migrate/20201111152859_add_missing_expression_indexes.rb
new file mode 100644
index 00000000000..e2742f7f3bc
--- /dev/null
+++ b/db/migrate/20201111152859_add_missing_expression_indexes.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+class AddMissingExpressionIndexes < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ INDEXES = [
+ [:namespaces, :index_on_namespaces_lower_name, 'LOWER(name)'],
+ [:namespaces, :index_on_namespaces_lower_path, 'LOWER(path)'],
+ [:projects, :index_on_projects_lower_path, 'LOWER(path)'],
+ [:routes, :index_on_routes_lower_path, 'LOWER(path)'],
+ [:users, :index_on_users_lower_username, 'LOWER(username)'],
+ [:users, :index_on_users_lower_email, 'LOWER(email)']
+ ]
+
+ def up
+ # Those indexes had been introduced before, but they haven't been
+ # captured in structure.sql. For installations that already have it,
+ # this is a no-op - others will get it retroactively with
+ # this migration.
+
+ tables = Set.new
+
+ INDEXES.each do |(table, name, expression)|
+ unless index_name_exists?(table, name)
+ add_concurrent_index table, expression, name: name
+ tables.add(table)
+ end
+ end
+
+ # Rebuild statistics on affected tables only
+ tables.each do |table|
+ execute("ANALYZE #{table}")
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/migrate/20201112195322_reseed_merge_trains_enabled.rb b/db/migrate/20201112195322_reseed_merge_trains_enabled.rb
new file mode 100644
index 00000000000..777c59d16b1
--- /dev/null
+++ b/db/migrate/20201112195322_reseed_merge_trains_enabled.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ReseedMergeTrainsEnabled < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ update_column_in_batches(:project_ci_cd_settings, :merge_trains_enabled, true) do |table, query|
+ query.where(table[:merge_pipelines_enabled].eq(true))
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20201015073808_schedule_blocked_by_links_replacement.rb b/db/post_migrate/20201015073808_schedule_blocked_by_links_replacement.rb
index 7833d7c4c04..dd8cbb57136 100644
--- a/db/post_migrate/20201015073808_schedule_blocked_by_links_replacement.rb
+++ b/db/post_migrate/20201015073808_schedule_blocked_by_links_replacement.rb
@@ -19,10 +19,8 @@ class ScheduleBlockedByLinksReplacement < ActiveRecord::Migration[6.0]
end
def up
- relation = IssueLink.where(link_type: 2)
-
- queue_background_migration_jobs_by_range_at_intervals(
- relation, MIGRATION, INTERVAL, batch_size: BATCH_SIZE)
+ # no-op
+ # superseded by db/post_migrate/20201102073808_schedule_blocked_by_links_replacement_second_try.rb
end
def down
diff --git a/db/post_migrate/20201019094741_rename_sitemap_root_namespaces.rb b/db/post_migrate/20201019094741_rename_sitemap_root_namespaces.rb
new file mode 100644
index 00000000000..20812a53bfb
--- /dev/null
+++ b/db/post_migrate/20201019094741_rename_sitemap_root_namespaces.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class RenameSitemapRootNamespaces < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+ include Gitlab::Database::RenameReservedPathsMigration::V1
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ # We're taking over the /sitemap.xml and /sitemap.xml.gz namespaces
+ # since they're necessary for the default behavior of Sitemaps
+ def up
+ disable_statement_timeout do
+ rename_root_paths(['sitemap.xml', 'sitemap.xml.gz'])
+ end
+ end
+
+ def down
+ disable_statement_timeout do
+ revert_renames
+ end
+ end
+end
diff --git a/db/post_migrate/20201020102551_remove_index_service_for_usage_data.rb b/db/post_migrate/20201020102551_remove_index_service_for_usage_data.rb
new file mode 100644
index 00000000000..a0d39ecd2c1
--- /dev/null
+++ b/db/post_migrate/20201020102551_remove_index_service_for_usage_data.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class RemoveIndexServiceForUsageData < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_services_on_type_id_when_active_not_instance_not_template'
+
+ disable_ddl_transaction!
+
+ def up
+ remove_concurrent_index_by_name :services, INDEX_NAME
+ end
+
+ def down
+ add_concurrent_index :services, [:type, :id], where: 'active = TRUE AND instance = FALSE AND template = FALSE', name: INDEX_NAME
+ end
+end
diff --git a/db/post_migrate/20201026051643_remove_scanned_resources_count_from_security_scans.rb b/db/post_migrate/20201026051643_remove_scanned_resources_count_from_security_scans.rb
new file mode 100644
index 00000000000..208448e2278
--- /dev/null
+++ b/db/post_migrate/20201026051643_remove_scanned_resources_count_from_security_scans.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class RemoveScannedResourcesCountFromSecurityScans < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ remove_column :security_scans, :scanned_resources_count
+ end
+
+ def down
+ add_column :security_scans, :scanned_resources_count, :integer
+ end
+end
diff --git a/db/post_migrate/20201026182253_schedule_populate_vulnerability_feedback_pipeline_id.rb b/db/post_migrate/20201026182253_schedule_populate_vulnerability_feedback_pipeline_id.rb
new file mode 100644
index 00000000000..2df475ab2a8
--- /dev/null
+++ b/db/post_migrate/20201026182253_schedule_populate_vulnerability_feedback_pipeline_id.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class SchedulePopulateVulnerabilityFeedbackPipelineId < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INTERVAL = 2.minutes.to_i
+ BATCH_SIZE = 100
+ MIGRATION = 'PopulateVulnerabilityFeedbackPipelineId'
+
+ disable_ddl_transaction!
+
+ def up
+ return unless Gitlab.ee?
+
+ vulnerability_feedback = exec_query <<~SQL
+ SELECT DISTINCT "vulnerability_feedback"."project_id"
+ FROM "vulnerability_feedback"
+ WHERE "vulnerability_feedback"."pipeline_id" IS NULL
+ ORDER BY "vulnerability_feedback"."project_id" ASC
+ SQL
+
+ return if vulnerability_feedback.rows.blank?
+
+ vulnerability_feedback.rows.flatten.in_groups_of(BATCH_SIZE, false).each_with_index do |project_ids, index|
+ migrate_in(index * INTERVAL, MIGRATION, [project_ids])
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20201028160832_schedule_populate_missing_dismissal_information_for_vulnerabilities.rb b/db/post_migrate/20201028160832_schedule_populate_missing_dismissal_information_for_vulnerabilities.rb
new file mode 100644
index 00000000000..f358ea863db
--- /dev/null
+++ b/db/post_migrate/20201028160832_schedule_populate_missing_dismissal_information_for_vulnerabilities.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class SchedulePopulateMissingDismissalInformationForVulnerabilities < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 1_000
+ DELAY_INTERVAL = 3.minutes.to_i
+ MIGRATION_CLASS = 'PopulateMissingVulnerabilityDismissalInformation'
+
+ disable_ddl_transaction!
+
+ def up
+ ::Gitlab::BackgroundMigration::PopulateMissingVulnerabilityDismissalInformation::Vulnerability.broken.each_batch(of: BATCH_SIZE) do |batch, index|
+ vulnerability_ids = batch.pluck(:id)
+ migrate_in(index * DELAY_INTERVAL, MIGRATION_CLASS, vulnerability_ids)
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20201028182809_backfill_jira_tracker_deployment_type2.rb b/db/post_migrate/20201028182809_backfill_jira_tracker_deployment_type2.rb
new file mode 100644
index 00000000000..63a0554433c
--- /dev/null
+++ b/db/post_migrate/20201028182809_backfill_jira_tracker_deployment_type2.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+class BackfillJiraTrackerDeploymentType2 < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ MIGRATION = 'BackfillJiraTrackerDeploymentType2'
+ DELAY_INTERVAL = 2.minutes
+ BATCH_SIZE = 1000
+
+ disable_ddl_transaction!
+
+ class JiraTrackerData < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'jira_tracker_data'
+ end
+
+ def up
+ queue_background_migration_jobs_by_range_at_intervals(
+ JiraTrackerData.where(deployment_type: 0),
+ MIGRATION,
+ DELAY_INTERVAL,
+ batch_size: BATCH_SIZE,
+ track_jobs: true)
+ end
+
+ def down
+ # NOOP
+ end
+end
diff --git a/db/post_migrate/20201029052241_migrate_geo_blob_verification_primary_worker_sidekiq_queue.rb b/db/post_migrate/20201029052241_migrate_geo_blob_verification_primary_worker_sidekiq_queue.rb
new file mode 100644
index 00000000000..64d22863389
--- /dev/null
+++ b/db/post_migrate/20201029052241_migrate_geo_blob_verification_primary_worker_sidekiq_queue.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+# See https://docs.gitlab.com/ee/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class MigrateGeoBlobVerificationPrimaryWorkerSidekiqQueue < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ sidekiq_queue_migrate 'geo:geo_blob_verification_primary', to: 'geo:geo_verification'
+ end
+
+ def down
+ sidekiq_queue_migrate 'geo:geo_verification', to: 'geo:geo_blob_verification_primary'
+ end
+end
diff --git a/db/post_migrate/20201029144157_cleanup_application_settings_to_allow_deny_rename.rb b/db/post_migrate/20201029144157_cleanup_application_settings_to_allow_deny_rename.rb
new file mode 100644
index 00000000000..bb6fe4258c5
--- /dev/null
+++ b/db/post_migrate/20201029144157_cleanup_application_settings_to_allow_deny_rename.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class CleanupApplicationSettingsToAllowDenyRename < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ cleanup_concurrent_column_rename :application_settings, :domain_blacklist_enabled, :domain_denylist_enabled
+ cleanup_concurrent_column_rename :application_settings, :domain_blacklist, :domain_denylist
+ cleanup_concurrent_column_rename :application_settings, :domain_whitelist, :domain_allowlist
+ end
+
+ def down
+ undo_cleanup_concurrent_column_rename :application_settings, :domain_blacklist_enabled, :domain_denylist_enabled
+ undo_cleanup_concurrent_column_rename :application_settings, :domain_blacklist, :domain_denylist
+ undo_cleanup_concurrent_column_rename :application_settings, :domain_whitelist, :domain_allowlist
+ end
+end
diff --git a/db/post_migrate/20201030203854_backfill_design_iids.rb b/db/post_migrate/20201030203854_backfill_design_iids.rb
new file mode 100644
index 00000000000..7acca6ad93d
--- /dev/null
+++ b/db/post_migrate/20201030203854_backfill_design_iids.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+class BackfillDesignIids < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ class Designs < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'design_management_designs'
+ end
+
+ def up
+ backfill = ::Gitlab::BackgroundMigration::BackfillDesignInternalIds.new(Designs)
+
+ Designs.select(:project_id).distinct.each_batch(of: 100, column: :project_id) do |relation|
+ backfill.perform(relation)
+ end
+ end
+
+ def down
+ # NOOP
+ end
+end
diff --git a/db/post_migrate/20201102073808_schedule_blocked_by_links_replacement_second_try.rb b/db/post_migrate/20201102073808_schedule_blocked_by_links_replacement_second_try.rb
new file mode 100644
index 00000000000..217d4f81d26
--- /dev/null
+++ b/db/post_migrate/20201102073808_schedule_blocked_by_links_replacement_second_try.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class ScheduleBlockedByLinksReplacementSecondTry < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INTERVAL = 2.minutes
+ # at the time of writing there were 12931 blocked_by issues:
+ # estimated time is 13 batches * 2 minutes -> 26 minutes
+ BATCH_SIZE = 1000
+ MIGRATION = 'ReplaceBlockedByLinks'
+
+ disable_ddl_transaction!
+
+ class IssueLink < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'issue_links'
+ end
+
+ def up
+ relation = IssueLink.where(link_type: 2)
+
+ queue_background_migration_jobs_by_range_at_intervals(
+ relation, MIGRATION, INTERVAL, batch_size: BATCH_SIZE)
+ end
+
+ def down
+ end
+end
diff --git a/db/post_migrate/20201102112206_rename_sitemap_namespace.rb b/db/post_migrate/20201102112206_rename_sitemap_namespace.rb
new file mode 100644
index 00000000000..b2e610d68db
--- /dev/null
+++ b/db/post_migrate/20201102112206_rename_sitemap_namespace.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class RenameSitemapNamespace < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+ include Gitlab::Database::RenameReservedPathsMigration::V1
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ # We're taking over the /sitemap namespace
+ # since it's necessary for the default behavior of Sitemaps
+ def up
+ disable_statement_timeout do
+ rename_root_paths(['sitemap'])
+ end
+ end
+
+ def down
+ disable_statement_timeout do
+ revert_renames
+ end
+ end
+end
diff --git a/db/post_migrate/20201102114018_remove_storage_size_limit_from_application_settings.rb b/db/post_migrate/20201102114018_remove_storage_size_limit_from_application_settings.rb
new file mode 100644
index 00000000000..6646cf2ad0c
--- /dev/null
+++ b/db/post_migrate/20201102114018_remove_storage_size_limit_from_application_settings.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class RemoveStorageSizeLimitFromApplicationSettings < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ def up
+ remove_column :application_settings, :namespace_storage_size_limit
+ end
+
+ def down
+ add_column :application_settings, :namespace_storage_size_limit, :bigint, default: 0
+ end
+end
diff --git a/db/post_migrate/20201102152554_add_not_null_check_on_iid_on_design_manangement_designs.rb b/db/post_migrate/20201102152554_add_not_null_check_on_iid_on_design_manangement_designs.rb
new file mode 100644
index 00000000000..861a0c3c27a
--- /dev/null
+++ b/db/post_migrate/20201102152554_add_not_null_check_on_iid_on_design_manangement_designs.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddNotNullCheckOnIidOnDesignManangementDesigns < ActiveRecord::Migration[6.0]
+ include ::Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_not_null_constraint(:design_management_designs, :iid)
+ end
+
+ def down
+ remove_not_null_constraint(:design_management_designs, :iid)
+ end
+end
diff --git a/db/post_migrate/20201102152945_truncate_security_findings_table.rb b/db/post_migrate/20201102152945_truncate_security_findings_table.rb
new file mode 100644
index 00000000000..8bfaa31f0de
--- /dev/null
+++ b/db/post_migrate/20201102152945_truncate_security_findings_table.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class TruncateSecurityFindingsTable < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ return unless Gitlab.dev_env_or_com?
+
+ with_lock_retries do
+ connection.execute('TRUNCATE security_findings RESTART IDENTITY')
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20201103013242_remove_terraform_state_verification_columns.rb b/db/post_migrate/20201103013242_remove_terraform_state_verification_columns.rb
new file mode 100644
index 00000000000..b1cd9790ead
--- /dev/null
+++ b/db/post_migrate/20201103013242_remove_terraform_state_verification_columns.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+class RemoveTerraformStateVerificationColumns < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ transaction do
+ remove_column :terraform_states, :verification_retry_at, :datetime_with_timezone
+ remove_column :terraform_states, :verified_at, :datetime_with_timezone
+ remove_column :terraform_states, :verification_retry_count, :integer, limit: 2
+ remove_column :terraform_states, :verification_checksum, :binary, using: 'verification_checksum::bytea'
+ remove_column :terraform_states, :verification_failure, :text
+ end
+ end
+
+ def down
+ add_column(:terraform_states, :verification_retry_at, :datetime_with_timezone) unless column_exists?(:terraform_states, :verification_retry_at)
+ add_column(:terraform_states, :verified_at, :datetime_with_timezone) unless column_exists?(:terraform_states, :verified_at)
+ add_column(:terraform_states, :verification_retry_count, :integer, limit: 2) unless column_exists?(:terraform_states, :verification_retry_count)
+ add_column(:terraform_states, :verification_checksum, :binary, using: 'verification_checksum::bytea') unless column_exists?(:terraform_states, :verification_checksum)
+ add_column(:terraform_states, :verification_failure, :text) unless column_exists?(:terraform_states, :verification_failure)
+
+ add_text_limit :terraform_states, :verification_failure, 255
+ end
+end
diff --git a/db/post_migrate/20201103110018_schedule_merge_request_cleanup_schedules_backfill.rb b/db/post_migrate/20201103110018_schedule_merge_request_cleanup_schedules_backfill.rb
new file mode 100644
index 00000000000..77057205b09
--- /dev/null
+++ b/db/post_migrate/20201103110018_schedule_merge_request_cleanup_schedules_backfill.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class ScheduleMergeRequestCleanupSchedulesBackfill < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ MIGRATION = 'BackfillMergeRequestCleanupSchedules'
+ DELAY_INTERVAL = 2.minutes
+ BATCH_SIZE = 10_000
+ TEMP_INDEX_NAME = 'merge_requests_state_id_temp_index'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :merge_requests, :id, name: TEMP_INDEX_NAME, where: "state_id IN (2, 3)"
+
+ eligible_mrs = Gitlab::BackgroundMigration::BackfillMergeRequestCleanupSchedules::MergeRequest.eligible
+
+ queue_background_migration_jobs_by_range_at_intervals(
+ eligible_mrs,
+ MIGRATION,
+ DELAY_INTERVAL,
+ batch_size: BATCH_SIZE
+ )
+ end
+
+ def down
+ remove_concurrent_index_by_name :merge_requests, TEMP_INDEX_NAME
+ end
+end
diff --git a/db/post_migrate/20201103192526_schedule_populate_has_vulnerabilities.rb b/db/post_migrate/20201103192526_schedule_populate_has_vulnerabilities.rb
new file mode 100644
index 00000000000..bed90af09dc
--- /dev/null
+++ b/db/post_migrate/20201103192526_schedule_populate_has_vulnerabilities.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class SchedulePopulateHasVulnerabilities < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 1_000
+ DELAY_INTERVAL = 2.minutes
+ MIGRATION_CLASS = 'PopulateHasVulnerabilities'
+
+ disable_ddl_transaction!
+
+ def up
+ Gitlab::BackgroundMigration::PopulateHasVulnerabilities::Vulnerability.distinct.each_batch(of: BATCH_SIZE, column: :project_id) do |batch, index|
+ project_ids = batch.pluck(:project_id)
+
+ migrate_in(index * DELAY_INTERVAL, MIGRATION_CLASS, project_ids)
+ end
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20201106082723_add_merge_request_jira_reference_indexes.rb b/db/post_migrate/20201106082723_add_merge_request_jira_reference_indexes.rb
new file mode 100644
index 00000000000..d69f57c6088
--- /dev/null
+++ b/db/post_migrate/20201106082723_add_merge_request_jira_reference_indexes.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+class AddMergeRequestJiraReferenceIndexes < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ DESCRIPTION_INDEX_NAME = 'index_merge_requests_on_target_project_id_iid_jira_description'
+ TITLE_INDEX_NAME = 'index_merge_requests_on_target_project_id_and_iid_jira_title'
+
+ JIRA_KEY_REGEX = '[A-Z][A-Z_0-9]+-\d+'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(
+ :merge_requests,
+ [:target_project_id, :iid],
+ name: TITLE_INDEX_NAME,
+ using: :btree,
+ where: "(merge_requests.title)::text ~ '#{JIRA_KEY_REGEX}'::text"
+ )
+
+ add_concurrent_index(
+ :merge_requests,
+ [:target_project_id, :iid],
+ name: DESCRIPTION_INDEX_NAME,
+ using: :btree,
+ where: "(merge_requests.description)::text ~ '#{JIRA_KEY_REGEX}'::text"
+ )
+ end
+
+ def down
+ remove_concurrent_index_by_name(
+ :merge_requests,
+ TITLE_INDEX_NAME
+ )
+
+ remove_concurrent_index_by_name(
+ :merge_requests,
+ DESCRIPTION_INDEX_NAME
+ )
+ end
+end
diff --git a/db/post_migrate/20201106134950_deduplicate_epic_iids.rb b/db/post_migrate/20201106134950_deduplicate_epic_iids.rb
new file mode 100644
index 00000000000..bc7daf9329d
--- /dev/null
+++ b/db/post_migrate/20201106134950_deduplicate_epic_iids.rb
@@ -0,0 +1,121 @@
+# frozen_string_literal: true
+
+class DeduplicateEpicIids < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_epics_on_group_id_and_iid'
+
+ disable_ddl_transaction!
+
+ class Epic < ActiveRecord::Base
+ end
+
+ class InternalId < ActiveRecord::Base
+ class << self
+ def generate_next(subject, scope, usage, init)
+ InternalIdGenerator.new(subject, scope, usage, init).generate
+ end
+ end
+
+ # Increments #last_value and saves the record
+ #
+ # The operation locks the record and gathers a `ROW SHARE` lock (in PostgreSQL).
+ # As such, the increment is atomic and safe to be called concurrently.
+ def increment_and_save!
+ update_and_save { self.last_value = (last_value || 0) + 1 }
+ end
+
+ private
+
+ def update_and_save(&block)
+ lock!
+ yield
+ save!
+ last_value
+ end
+ end
+
+ # See app/models/internal_id
+ class InternalIdGenerator
+ attr_reader :subject, :scope, :scope_attrs, :usage, :init
+
+ def initialize(subject, scope, usage, init = nil)
+ @subject = subject
+ @scope = scope
+ @usage = usage
+ @init = init
+
+ raise ArgumentError, 'Scope is not well-defined, need at least one column for scope (given: 0)' if scope.empty? || usage.to_s != 'epics'
+ end
+
+ # Generates next internal id and returns it
+ # init: Block that gets called to initialize InternalId record if not present
+ # Make sure to not throw exceptions in the absence of records (if this is expected).
+ def generate
+ subject.transaction do
+ # Create a record in internal_ids if one does not yet exist
+ # and increment its last value
+ #
+ # Note this will acquire a ROW SHARE lock on the InternalId record
+ record.increment_and_save!
+ end
+ end
+
+ def record
+ @record ||= (lookup || create_record)
+ end
+
+ def lookup
+ InternalId.find_by(**scope, usage: usage_value)
+ end
+
+ def usage_value
+ 4 # see Enums::InternalId - this is the value for epics
+ end
+
+ # Create InternalId record for (scope, usage) combination, if it doesn't exist
+ #
+ # We blindly insert without synchronization. If another process
+ # was faster in doing this, we'll realize once we hit the unique key constraint
+ # violation. We can safely roll-back the nested transaction and perform
+ # a lookup instead to retrieve the record.
+ def create_record
+ raise ArgumentError, 'Cannot initialize without init!' unless init
+
+ instance = subject.is_a?(::Class) ? nil : subject
+
+ subject.transaction(requires_new: true) do
+ InternalId.create!(
+ **scope,
+ usage: usage_value,
+ last_value: init.call(instance, scope) || 0
+ )
+ end
+ rescue ActiveRecord::RecordNotUnique
+ lookup
+ end
+ end
+
+ def up
+ duplicate_epic_ids = ApplicationRecord.connection.execute('SELECT iid, group_id, COUNT(*) FROM epics GROUP BY iid, group_id HAVING COUNT(*) > 1;')
+
+ duplicate_epic_ids.each do |dup|
+ Epic.where(iid: dup['iid'], group_id: dup['group_id']).last(dup['count'] - 1).each do |epic|
+ new_iid = InternalId.generate_next(epic,
+ { namespace_id: epic.group_id },
+ :epics, ->(instance, _) { instance.class.where(group_id: epic.group_id).maximum(:iid) }
+ )
+
+ epic.update!(iid: new_iid)
+ end
+ end
+
+ add_concurrent_index :epics, [:group_id, :iid], unique: true, name: INDEX_NAME
+ end
+
+ def down
+ # only remove the index, as we do not want to create the duplicates back
+ remove_concurrent_index :epics, [:group_id, :iid], name: INDEX_NAME
+ end
+end
diff --git a/db/schema_migrations/20200908212414 b/db/schema_migrations/20200908212414
new file mode 100644
index 00000000000..208f9affc91
--- /dev/null
+++ b/db/schema_migrations/20200908212414
@@ -0,0 +1 @@
+a9605126178d887bbf526a4a33b7060b072eff7a8d6712e3552099f7e615f88b \ No newline at end of file
diff --git a/db/schema_migrations/20200920130356 b/db/schema_migrations/20200920130356
new file mode 100644
index 00000000000..ab0575958ec
--- /dev/null
+++ b/db/schema_migrations/20200920130356
@@ -0,0 +1 @@
+80d2beb7a1c5f60a4bf3462054fa5bcd0488152b6754f8a7164046201fcb08ed \ No newline at end of file
diff --git a/db/schema_migrations/20200928123510 b/db/schema_migrations/20200928123510
new file mode 100644
index 00000000000..db9d2889739
--- /dev/null
+++ b/db/schema_migrations/20200928123510
@@ -0,0 +1 @@
+1e274e744ed9e225e2ee09afc15871a1af63857f95c5d787e8efd9943fce1bed \ No newline at end of file
diff --git a/db/schema_migrations/20201008011523 b/db/schema_migrations/20201008011523
new file mode 100644
index 00000000000..845ee2f5b96
--- /dev/null
+++ b/db/schema_migrations/20201008011523
@@ -0,0 +1 @@
+b7b49ca4c021b7caa9f8612ad9b69d4ec6d79894db2e43266bfe26f2e0bffe08 \ No newline at end of file
diff --git a/db/schema_migrations/20201008011937 b/db/schema_migrations/20201008011937
new file mode 100644
index 00000000000..258daf9a836
--- /dev/null
+++ b/db/schema_migrations/20201008011937
@@ -0,0 +1 @@
+8af89bb3e63bfca24cee8fdf6f0dd587fae7d81bfeaf6d427f84c7b37c9664ba \ No newline at end of file
diff --git a/db/schema_migrations/20201008013434 b/db/schema_migrations/20201008013434
new file mode 100644
index 00000000000..9ec9dd8277c
--- /dev/null
+++ b/db/schema_migrations/20201008013434
@@ -0,0 +1 @@
+966f6e95189b551cba0ef548cb410911c0beee30d0a265ae21d90321ecbb2a00 \ No newline at end of file
diff --git a/db/schema_migrations/20201008075620 b/db/schema_migrations/20201008075620
new file mode 100644
index 00000000000..a0a5d6a7314
--- /dev/null
+++ b/db/schema_migrations/20201008075620
@@ -0,0 +1 @@
+f9bc943b61460b1a9a6db8189ab5b21eba46e14650c68658175299b14d48a030 \ No newline at end of file
diff --git a/db/schema_migrations/20201008125643 b/db/schema_migrations/20201008125643
new file mode 100644
index 00000000000..121dcbc0281
--- /dev/null
+++ b/db/schema_migrations/20201008125643
@@ -0,0 +1 @@
+b7b15717435e06ea386c941c5a021b73f986ad3f41f2bd6f890738a79b710207 \ No newline at end of file
diff --git a/db/schema_migrations/20201008144854 b/db/schema_migrations/20201008144854
new file mode 100644
index 00000000000..f4b71f06acd
--- /dev/null
+++ b/db/schema_migrations/20201008144854
@@ -0,0 +1 @@
+250785e18682cc10afb4f04546e5ff6dff9ab6c6673df84692c8221d6fe820ac \ No newline at end of file
diff --git a/db/schema_migrations/20201008224441 b/db/schema_migrations/20201008224441
new file mode 100644
index 00000000000..1f27662d754
--- /dev/null
+++ b/db/schema_migrations/20201008224441
@@ -0,0 +1 @@
+d0ca8f0dbe0cf0fbbdd715867f3ae20862683433d919ee5cd942086d21f3b44d \ No newline at end of file
diff --git a/db/schema_migrations/20201012073022 b/db/schema_migrations/20201012073022
new file mode 100644
index 00000000000..b7ce136a7e3
--- /dev/null
+++ b/db/schema_migrations/20201012073022
@@ -0,0 +1 @@
+234711b96d3869fe826dfd71ae29e0f75e50302bc29a4e60f436ec76b4be3efb \ No newline at end of file
diff --git a/db/schema_migrations/20201012122428 b/db/schema_migrations/20201012122428
new file mode 100644
index 00000000000..13e7e9c2cd6
--- /dev/null
+++ b/db/schema_migrations/20201012122428
@@ -0,0 +1 @@
+d43764a44f6578548d8b7838dc011b7693da0b7d65cbcc1fff96a212d655024e \ No newline at end of file
diff --git a/db/schema_migrations/20201012134230 b/db/schema_migrations/20201012134230
new file mode 100644
index 00000000000..2bf2175ef60
--- /dev/null
+++ b/db/schema_migrations/20201012134230
@@ -0,0 +1 @@
+1673018885366e92eb47f5fc705ea8251c2db49b5c14b788e84b10d8db91af48 \ No newline at end of file
diff --git a/db/schema_migrations/20201012135330 b/db/schema_migrations/20201012135330
new file mode 100644
index 00000000000..8ecce197faa
--- /dev/null
+++ b/db/schema_migrations/20201012135330
@@ -0,0 +1 @@
+18ccd2059d9a19a51ea0162c46a1293e280759daffa54ba58ba5e431ee7aba93 \ No newline at end of file
diff --git a/db/schema_migrations/20201012140110 b/db/schema_migrations/20201012140110
new file mode 100644
index 00000000000..1bbfe820a5d
--- /dev/null
+++ b/db/schema_migrations/20201012140110
@@ -0,0 +1 @@
+e266655483655e1ecbb4f65594ef5b985c3f0449231755f589f3e293e28c9f6b \ No newline at end of file
diff --git a/db/schema_migrations/20201012140452 b/db/schema_migrations/20201012140452
new file mode 100644
index 00000000000..11bc272341d
--- /dev/null
+++ b/db/schema_migrations/20201012140452
@@ -0,0 +1 @@
+d62928276708c26656070f803ea6271be74a1fe9802877258d4a8cf19df32d09 \ No newline at end of file
diff --git a/db/schema_migrations/20201014163633 b/db/schema_migrations/20201014163633
new file mode 100644
index 00000000000..6025edca343
--- /dev/null
+++ b/db/schema_migrations/20201014163633
@@ -0,0 +1 @@
+591bb8d685c686cced324825e7bec01711aee328176c1c5396a9e61847cb6fab \ No newline at end of file
diff --git a/db/schema_migrations/20201015121805 b/db/schema_migrations/20201015121805
new file mode 100644
index 00000000000..50c3cd1285c
--- /dev/null
+++ b/db/schema_migrations/20201015121805
@@ -0,0 +1 @@
+b8d5890fe5569127e794eea831fc18f8e5708b326e8037963fe2f6ae7f120e27 \ No newline at end of file
diff --git a/db/schema_migrations/20201015121825 b/db/schema_migrations/20201015121825
new file mode 100644
index 00000000000..b853c405ba0
--- /dev/null
+++ b/db/schema_migrations/20201015121825
@@ -0,0 +1 @@
+76e5a5bb535019da28041d1c7dddd8a18d3b04f688b38edc0c4214d3a4d6e357 \ No newline at end of file
diff --git a/db/schema_migrations/20201015194852 b/db/schema_migrations/20201015194852
new file mode 100644
index 00000000000..665135a7e3e
--- /dev/null
+++ b/db/schema_migrations/20201015194852
@@ -0,0 +1 @@
+1b12f68f7d8c56ecdd7d6d7551d81f5d95d1b4dc5f8d4c67eb239b8640128531 \ No newline at end of file
diff --git a/db/schema_migrations/20201015231049 b/db/schema_migrations/20201015231049
new file mode 100644
index 00000000000..17a4147993a
--- /dev/null
+++ b/db/schema_migrations/20201015231049
@@ -0,0 +1 @@
+cae3c41e344f15fa5a9cf71546a0bf209ead964fd3efefba39aba79afd60e0be \ No newline at end of file
diff --git a/db/schema_migrations/20201016074302 b/db/schema_migrations/20201016074302
new file mode 100644
index 00000000000..e0ed03f0ac3
--- /dev/null
+++ b/db/schema_migrations/20201016074302
@@ -0,0 +1 @@
+de07bcc8166421d01382038d930cabb6a4749b314f05ca148e8d13cff947447c \ No newline at end of file
diff --git a/db/schema_migrations/20201019091307 b/db/schema_migrations/20201019091307
new file mode 100644
index 00000000000..6b74c804ed8
--- /dev/null
+++ b/db/schema_migrations/20201019091307
@@ -0,0 +1 @@
+f19ab0de07415e728849ef4e56804909a3a4a57ad8f55fe71a27bc43c535ac66 \ No newline at end of file
diff --git a/db/schema_migrations/20201019094741 b/db/schema_migrations/20201019094741
new file mode 100644
index 00000000000..5e53ab91e9b
--- /dev/null
+++ b/db/schema_migrations/20201019094741
@@ -0,0 +1 @@
+16ef5ba153f1145dcd2578bb8c860d4e1a975d5df3a1b1d9315946e632a95999 \ No newline at end of file
diff --git a/db/schema_migrations/20201019101549 b/db/schema_migrations/20201019101549
new file mode 100644
index 00000000000..9b22cf277fb
--- /dev/null
+++ b/db/schema_migrations/20201019101549
@@ -0,0 +1 @@
+1bd99d7d6b972ea66495f21358e3b8731532219fcf75731bf643c312eb56820d \ No newline at end of file
diff --git a/db/schema_migrations/20201019111952 b/db/schema_migrations/20201019111952
new file mode 100644
index 00000000000..7fe9fcf3b2f
--- /dev/null
+++ b/db/schema_migrations/20201019111952
@@ -0,0 +1 @@
+82d6ed3e066c15352abdb58d58d195f48aa7b1d17bbb28f58f42c19ae67fab54 \ No newline at end of file
diff --git a/db/schema_migrations/20201019113009 b/db/schema_migrations/20201019113009
new file mode 100644
index 00000000000..88d91b79607
--- /dev/null
+++ b/db/schema_migrations/20201019113009
@@ -0,0 +1 @@
+fe57e8e74ebbe0e9567c1487e6e4f8b499afa6404c73424157c43ae79c005f08 \ No newline at end of file
diff --git a/db/schema_migrations/20201019130244 b/db/schema_migrations/20201019130244
new file mode 100644
index 00000000000..b37e6eeae70
--- /dev/null
+++ b/db/schema_migrations/20201019130244
@@ -0,0 +1 @@
+fcd2cc46dae4f4da96ac5a2100a9de9bd360defee82a9c9d6cfbda0e1507ee66 \ No newline at end of file
diff --git a/db/schema_migrations/20201019152046 b/db/schema_migrations/20201019152046
new file mode 100644
index 00000000000..bc364a38a46
--- /dev/null
+++ b/db/schema_migrations/20201019152046
@@ -0,0 +1 @@
+e5b3bcac7150df4443879db05b18b6aeb01271d99965b2468278954dedf8413b \ No newline at end of file
diff --git a/db/schema_migrations/20201019161924 b/db/schema_migrations/20201019161924
new file mode 100644
index 00000000000..3857a5cb5a1
--- /dev/null
+++ b/db/schema_migrations/20201019161924
@@ -0,0 +1 @@
+47aba29a35e24113c9f198c731ba95597a2a6cd5d16b01a958644ce3e1a96170 \ No newline at end of file
diff --git a/db/schema_migrations/20201019172704 b/db/schema_migrations/20201019172704
new file mode 100644
index 00000000000..0bf2d30205f
--- /dev/null
+++ b/db/schema_migrations/20201019172704
@@ -0,0 +1 @@
+2a426e1a7cc6283e777667a1b4a6987f011c6cfd189ec702abc55d13a8499eca \ No newline at end of file
diff --git a/db/schema_migrations/20201020102551 b/db/schema_migrations/20201020102551
new file mode 100644
index 00000000000..f658f1fdc0a
--- /dev/null
+++ b/db/schema_migrations/20201020102551
@@ -0,0 +1 @@
+ba16ad5a51494f436dc47ffb924f94ce7795bfd3b9061ca58d1c8dda238245e9 \ No newline at end of file
diff --git a/db/schema_migrations/20201021085007 b/db/schema_migrations/20201021085007
new file mode 100644
index 00000000000..59567962e80
--- /dev/null
+++ b/db/schema_migrations/20201021085007
@@ -0,0 +1 @@
+552f8a042bdecb7511d63e129438faff3fde8e1086cc88f7a79269b2b7098a65 \ No newline at end of file
diff --git a/db/schema_migrations/20201021101956 b/db/schema_migrations/20201021101956
new file mode 100644
index 00000000000..bf3e1092fd1
--- /dev/null
+++ b/db/schema_migrations/20201021101956
@@ -0,0 +1 @@
+47158d21bd1a800e5a9da1bfea25870f14cc0b094e5f3e9a4b7608b8a9eca180 \ No newline at end of file
diff --git a/db/schema_migrations/20201021102554 b/db/schema_migrations/20201021102554
new file mode 100644
index 00000000000..c2bd788943b
--- /dev/null
+++ b/db/schema_migrations/20201021102554
@@ -0,0 +1 @@
+90936786a9c2a9d035d13be87021b2f8278342cd11992d58753ca5a5413ed9d7 \ No newline at end of file
diff --git a/db/schema_migrations/20201021105347 b/db/schema_migrations/20201021105347
new file mode 100644
index 00000000000..86117fd6538
--- /dev/null
+++ b/db/schema_migrations/20201021105347
@@ -0,0 +1 @@
+d7683f7a2db6aa27606756c158fa029c932230713b165917bc05a491f10e7adf \ No newline at end of file
diff --git a/db/schema_migrations/20201021105600 b/db/schema_migrations/20201021105600
new file mode 100644
index 00000000000..14d2edb23a6
--- /dev/null
+++ b/db/schema_migrations/20201021105600
@@ -0,0 +1 @@
+9b90dd436cc1c315eacc60acbc5f6b3b94029b82b4fcb27a41abc4941ad9a4ad \ No newline at end of file
diff --git a/db/schema_migrations/20201021105959 b/db/schema_migrations/20201021105959
new file mode 100644
index 00000000000..2ddfcb102c9
--- /dev/null
+++ b/db/schema_migrations/20201021105959
@@ -0,0 +1 @@
+d924e4ad9ff67d01d660db3b3a1b9e5d74cecb1a127d598d1d1193cbfa499030 \ No newline at end of file
diff --git a/db/schema_migrations/20201021142812 b/db/schema_migrations/20201021142812
new file mode 100644
index 00000000000..d4ddf2a3595
--- /dev/null
+++ b/db/schema_migrations/20201021142812
@@ -0,0 +1 @@
+81b9b79f2ca8830b9d9e9315d93421875dfe44cfa0da6f4e9166567452a2363b \ No newline at end of file
diff --git a/db/schema_migrations/20201021152210 b/db/schema_migrations/20201021152210
new file mode 100644
index 00000000000..78358b24bad
--- /dev/null
+++ b/db/schema_migrations/20201021152210
@@ -0,0 +1 @@
+853dbc604fc8ce4d82e6040aa7a7970ae194f09bafb2749077cd9f48d2708eac \ No newline at end of file
diff --git a/db/schema_migrations/20201021190539 b/db/schema_migrations/20201021190539
new file mode 100644
index 00000000000..902213f9029
--- /dev/null
+++ b/db/schema_migrations/20201021190539
@@ -0,0 +1 @@
+1d0689b5182ac391473075aeabb0e341fb8634dbf0aa87dbb6d48cc0e61d2ada \ No newline at end of file
diff --git a/db/schema_migrations/20201021220101 b/db/schema_migrations/20201021220101
new file mode 100644
index 00000000000..cda2e4076a5
--- /dev/null
+++ b/db/schema_migrations/20201021220101
@@ -0,0 +1 @@
+72580665fcb0fca332ede450690902c0a7afb6159feff41df1bc10a3cf6607f2 \ No newline at end of file
diff --git a/db/schema_migrations/20201022080802 b/db/schema_migrations/20201022080802
new file mode 100644
index 00000000000..c84c8c6ffbe
--- /dev/null
+++ b/db/schema_migrations/20201022080802
@@ -0,0 +1 @@
+809d93d367ff9310063904ee3c266914311ef54e8c7f9d6d7fd924d25890bf19 \ No newline at end of file
diff --git a/db/schema_migrations/20201022094845 b/db/schema_migrations/20201022094845
new file mode 100644
index 00000000000..3bc0b95b711
--- /dev/null
+++ b/db/schema_migrations/20201022094845
@@ -0,0 +1 @@
+16b402740c6b1dd21908265085e516f63f8858424724ba97f46658e7bd5f7bf2 \ No newline at end of file
diff --git a/db/schema_migrations/20201022094846 b/db/schema_migrations/20201022094846
new file mode 100644
index 00000000000..40ef0760dc8
--- /dev/null
+++ b/db/schema_migrations/20201022094846
@@ -0,0 +1 @@
+588c5f99d34652bbd5bde86351cbdb8c0455af0c31a440bfb63df02f12fd588f \ No newline at end of file
diff --git a/db/schema_migrations/20201022103304 b/db/schema_migrations/20201022103304
new file mode 100644
index 00000000000..e54cb431bd4
--- /dev/null
+++ b/db/schema_migrations/20201022103304
@@ -0,0 +1 @@
+aa15aad0b51f313f3cd59e1065023146fe53c6bd50319656ae992f8f43e1525e \ No newline at end of file
diff --git a/db/schema_migrations/20201022144501 b/db/schema_migrations/20201022144501
new file mode 100644
index 00000000000..4e82b2785d0
--- /dev/null
+++ b/db/schema_migrations/20201022144501
@@ -0,0 +1 @@
+f9a573d50f8b4aeb3d8d2cc2f0223ab9970776d663e49e0f022e96158593d929 \ No newline at end of file
diff --git a/db/schema_migrations/20201022191817 b/db/schema_migrations/20201022191817
new file mode 100644
index 00000000000..619ae381a72
--- /dev/null
+++ b/db/schema_migrations/20201022191817
@@ -0,0 +1 @@
+205cb628e9637bcd1acb90c5211b71b51015fa5f50aadcacd5fbafc4f09c00d0 \ No newline at end of file
diff --git a/db/schema_migrations/20201022192254 b/db/schema_migrations/20201022192254
new file mode 100644
index 00000000000..c09518b0e6c
--- /dev/null
+++ b/db/schema_migrations/20201022192254
@@ -0,0 +1 @@
+9f942de6f83629a144e9d460b4bed7a246afe95275b5913745109fc0ab9dacc1 \ No newline at end of file
diff --git a/db/schema_migrations/20201023114628 b/db/schema_migrations/20201023114628
new file mode 100644
index 00000000000..458392082ca
--- /dev/null
+++ b/db/schema_migrations/20201023114628
@@ -0,0 +1 @@
+f4fb466c74e1366d5980a54d6e5fc42fe78237cae33d8cdaf5573d2fe75f8a5a \ No newline at end of file
diff --git a/db/schema_migrations/20201026051643 b/db/schema_migrations/20201026051643
new file mode 100644
index 00000000000..f3290df0d23
--- /dev/null
+++ b/db/schema_migrations/20201026051643
@@ -0,0 +1 @@
+bb20b72c7fa65735f37d896cc098d27edd4cc07c3083fdb567e4b421309703a7 \ No newline at end of file
diff --git a/db/schema_migrations/20201026182253 b/db/schema_migrations/20201026182253
new file mode 100644
index 00000000000..a8da92aa906
--- /dev/null
+++ b/db/schema_migrations/20201026182253
@@ -0,0 +1 @@
+ab2b8af98a8a29658f92c302d45668c7b9f8f5234ef35f4311a0f0ebbd954ec8 \ No newline at end of file
diff --git a/db/schema_migrations/20201026200736 b/db/schema_migrations/20201026200736
new file mode 100644
index 00000000000..7ed57505c3e
--- /dev/null
+++ b/db/schema_migrations/20201026200736
@@ -0,0 +1 @@
+691fe3335de3e072bc5612705c4d16744ff17e334025ddd78eb37309f87441e3 \ No newline at end of file
diff --git a/db/schema_migrations/20201027002551 b/db/schema_migrations/20201027002551
new file mode 100644
index 00000000000..f4a5527fac7
--- /dev/null
+++ b/db/schema_migrations/20201027002551
@@ -0,0 +1 @@
+34e357b739235d627e543e1bc7202e0cf26f5b1ca8021bb25357e29e883f785b \ No newline at end of file
diff --git a/db/schema_migrations/20201027135651 b/db/schema_migrations/20201027135651
new file mode 100644
index 00000000000..eb3a5080c0f
--- /dev/null
+++ b/db/schema_migrations/20201027135651
@@ -0,0 +1 @@
+3f24bfc2d18ffa5f171e027d4e7aaf9994b255e5806e2de57fd36b4a193db122 \ No newline at end of file
diff --git a/db/schema_migrations/20201027210127 b/db/schema_migrations/20201027210127
new file mode 100644
index 00000000000..ab0ba73f588
--- /dev/null
+++ b/db/schema_migrations/20201027210127
@@ -0,0 +1 @@
+c269a999cabce99d26f3be303656bbb27f2b843b639755b112ad350d4cb5b5c6 \ No newline at end of file
diff --git a/db/schema_migrations/20201027211138 b/db/schema_migrations/20201027211138
new file mode 100644
index 00000000000..5e36445702b
--- /dev/null
+++ b/db/schema_migrations/20201027211138
@@ -0,0 +1 @@
+402e9a6e92802888ba01ee216850ab5b0fe9997a84415c9ffe8d5d37a9823220 \ No newline at end of file
diff --git a/db/schema_migrations/20201028160831 b/db/schema_migrations/20201028160831
new file mode 100644
index 00000000000..de94901dcc5
--- /dev/null
+++ b/db/schema_migrations/20201028160831
@@ -0,0 +1 @@
+4b0c70d8cd2648149011adab4f302922483436406f361c3037f26efb12b19042 \ No newline at end of file
diff --git a/db/schema_migrations/20201028160832 b/db/schema_migrations/20201028160832
new file mode 100644
index 00000000000..4b0da32b638
--- /dev/null
+++ b/db/schema_migrations/20201028160832
@@ -0,0 +1 @@
+9ea8e8f1234d6291ea00e725d380bfe33d804853b90da1221be8781b3dd9bb77 \ No newline at end of file
diff --git a/db/schema_migrations/20201028182809 b/db/schema_migrations/20201028182809
new file mode 100644
index 00000000000..6747bd58d72
--- /dev/null
+++ b/db/schema_migrations/20201028182809
@@ -0,0 +1 @@
+c51bf825045ef80714f3903f25321785883da3d612725f6fa67ec3ddd12d5808 \ No newline at end of file
diff --git a/db/schema_migrations/20201028184640 b/db/schema_migrations/20201028184640
new file mode 100644
index 00000000000..4cac95e4e7b
--- /dev/null
+++ b/db/schema_migrations/20201028184640
@@ -0,0 +1 @@
+5520cca016af07fb2e009c0e3254362f106a9cc808cbb61e280221be82be1b25 \ No newline at end of file
diff --git a/db/schema_migrations/20201028204306 b/db/schema_migrations/20201028204306
new file mode 100644
index 00000000000..03b68c9a0d1
--- /dev/null
+++ b/db/schema_migrations/20201028204306
@@ -0,0 +1 @@
+ec5bab20a1b591b77b48b85dc0b871e88a41891d256201b7d8eb86195ef1c4ad \ No newline at end of file
diff --git a/db/schema_migrations/20201029052241 b/db/schema_migrations/20201029052241
new file mode 100644
index 00000000000..8257e4d3681
--- /dev/null
+++ b/db/schema_migrations/20201029052241
@@ -0,0 +1 @@
+87e330bc15accb10733825b079cf89e78d905a7c4080075489857085f014bfe7 \ No newline at end of file
diff --git a/db/schema_migrations/20201029143650 b/db/schema_migrations/20201029143650
new file mode 100644
index 00000000000..c6f00890f4f
--- /dev/null
+++ b/db/schema_migrations/20201029143650
@@ -0,0 +1 @@
+c718bc731f7dc3e1f0104dfdb79a3dc46c46849153ec9b228600eeb5a92465e7 \ No newline at end of file
diff --git a/db/schema_migrations/20201029144157 b/db/schema_migrations/20201029144157
new file mode 100644
index 00000000000..7fdac19230f
--- /dev/null
+++ b/db/schema_migrations/20201029144157
@@ -0,0 +1 @@
+a61310c95a1302871ea18881d45bc0c7357baa8f24daa31b7e2174318dab5707 \ No newline at end of file
diff --git a/db/schema_migrations/20201029144444 b/db/schema_migrations/20201029144444
new file mode 100644
index 00000000000..1ab20b33da5
--- /dev/null
+++ b/db/schema_migrations/20201029144444
@@ -0,0 +1 @@
+50e4e42c804d3abdcfe9ab2bbb890262d4b2ddd93bff1b2af1da1e55a0300cf5 \ No newline at end of file
diff --git a/db/schema_migrations/20201030092151 b/db/schema_migrations/20201030092151
new file mode 100644
index 00000000000..7b39a8e0dca
--- /dev/null
+++ b/db/schema_migrations/20201030092151
@@ -0,0 +1 @@
+ced03562d300f99abf687c258a25bf280a6c4f1798a893ee8a79189c09f19e6e \ No newline at end of file
diff --git a/db/schema_migrations/20201030200115 b/db/schema_migrations/20201030200115
new file mode 100644
index 00000000000..ed9c743f538
--- /dev/null
+++ b/db/schema_migrations/20201030200115
@@ -0,0 +1 @@
+bef50f2417b9676c89aea838f7b9c85fb88af9f52c197d8eb4613a9c91bc7741 \ No newline at end of file
diff --git a/db/schema_migrations/20201030200539 b/db/schema_migrations/20201030200539
new file mode 100644
index 00000000000..f8e7642befb
--- /dev/null
+++ b/db/schema_migrations/20201030200539
@@ -0,0 +1 @@
+2f6c7efc1716d02dd40adb08bd09b9f1e63e4248619678c0562f4b8d581e6065 \ No newline at end of file
diff --git a/db/schema_migrations/20201030203854 b/db/schema_migrations/20201030203854
new file mode 100644
index 00000000000..6a337c366aa
--- /dev/null
+++ b/db/schema_migrations/20201030203854
@@ -0,0 +1 @@
+3937235469c8fb1f2b0af9cdf38933db5ae61552d1a9050755cec5f7c16ebb66 \ No newline at end of file
diff --git a/db/schema_migrations/20201102073808 b/db/schema_migrations/20201102073808
new file mode 100644
index 00000000000..9e77ee028a5
--- /dev/null
+++ b/db/schema_migrations/20201102073808
@@ -0,0 +1 @@
+153b437ac481f4d79cd5bdee45dd3932f3cb58bf5dce793573c4b651a3b9314f \ No newline at end of file
diff --git a/db/schema_migrations/20201102112206 b/db/schema_migrations/20201102112206
new file mode 100644
index 00000000000..5bbba26e110
--- /dev/null
+++ b/db/schema_migrations/20201102112206
@@ -0,0 +1 @@
+a861c91ebc7f7892020ba10a151df761b38bf69d5e02bcdf72a965eb266e6aff \ No newline at end of file
diff --git a/db/schema_migrations/20201102114018 b/db/schema_migrations/20201102114018
new file mode 100644
index 00000000000..33615073453
--- /dev/null
+++ b/db/schema_migrations/20201102114018
@@ -0,0 +1 @@
+dc1c372f4976e3747d7201406123a54e3852d9ea9516089043a93698a09e2f9f \ No newline at end of file
diff --git a/db/schema_migrations/20201102152554 b/db/schema_migrations/20201102152554
new file mode 100644
index 00000000000..f52694965c6
--- /dev/null
+++ b/db/schema_migrations/20201102152554
@@ -0,0 +1 @@
+7ec73c06ccc4c9f618e0455d0a7aae3b591bf52b5ddb1b3f1678d2fd50b9fd5e \ No newline at end of file
diff --git a/db/schema_migrations/20201102152945 b/db/schema_migrations/20201102152945
new file mode 100644
index 00000000000..cb4ae9c2598
--- /dev/null
+++ b/db/schema_migrations/20201102152945
@@ -0,0 +1 @@
+55ffd18d5f55ee0fd51a31d50cf2d51595740c72ca23d5134d93e2da3fc186ff \ No newline at end of file
diff --git a/db/schema_migrations/20201102184743 b/db/schema_migrations/20201102184743
new file mode 100644
index 00000000000..da002122e5d
--- /dev/null
+++ b/db/schema_migrations/20201102184743
@@ -0,0 +1 @@
+040e73d690cb315627fe16c931273aa1f86dfabb481dc2086f787d067b87642f \ No newline at end of file
diff --git a/db/schema_migrations/20201103013242 b/db/schema_migrations/20201103013242
new file mode 100644
index 00000000000..1f592b4a619
--- /dev/null
+++ b/db/schema_migrations/20201103013242
@@ -0,0 +1 @@
+8a30cf20f71e0cb198caf6f77a19e4da55b83eb38bdb5888cd2674373d94cede \ No newline at end of file
diff --git a/db/schema_migrations/20201103095752 b/db/schema_migrations/20201103095752
new file mode 100644
index 00000000000..4888f7c5dfb
--- /dev/null
+++ b/db/schema_migrations/20201103095752
@@ -0,0 +1 @@
+3427cf92dc785f399329b00a3dded01dd2a6386cafbd0ef4b732bfcf522ce615 \ No newline at end of file
diff --git a/db/schema_migrations/20201103110018 b/db/schema_migrations/20201103110018
new file mode 100644
index 00000000000..82ab2fda543
--- /dev/null
+++ b/db/schema_migrations/20201103110018
@@ -0,0 +1 @@
+8a45a6186d7e18f1dea43593dc0226860fc2e8d3ae386f50a022958b758c7c75 \ No newline at end of file
diff --git a/db/schema_migrations/20201103171537 b/db/schema_migrations/20201103171537
new file mode 100644
index 00000000000..4621c0e4802
--- /dev/null
+++ b/db/schema_migrations/20201103171537
@@ -0,0 +1 @@
+3120428427e3c0c94799501b1d31f384c98899f2ef9bda6f95066c94afd5ecf8 \ No newline at end of file
diff --git a/db/schema_migrations/20201103184333 b/db/schema_migrations/20201103184333
new file mode 100644
index 00000000000..0475ea2b466
--- /dev/null
+++ b/db/schema_migrations/20201103184333
@@ -0,0 +1 @@
+a3117169b472fffd6302a4da17850a11474c196fd06ebeb3f6b28705d59c74ba \ No newline at end of file
diff --git a/db/schema_migrations/20201103192526 b/db/schema_migrations/20201103192526
new file mode 100644
index 00000000000..8fe11ed16d6
--- /dev/null
+++ b/db/schema_migrations/20201103192526
@@ -0,0 +1 @@
+bb137c3a41a40e740f8ae65b43d7f9218f52d6d5eaf53c8a64b3336a8f16141b \ No newline at end of file
diff --git a/db/schema_migrations/20201103202213 b/db/schema_migrations/20201103202213
new file mode 100644
index 00000000000..74b0b1888d2
--- /dev/null
+++ b/db/schema_migrations/20201103202213
@@ -0,0 +1 @@
+af006a3c01620c258a253b5c9ccca6faa4cb46a97dddbfeecc0ecc4454eb46e6 \ No newline at end of file
diff --git a/db/schema_migrations/20201104204739 b/db/schema_migrations/20201104204739
new file mode 100644
index 00000000000..83794fd569f
--- /dev/null
+++ b/db/schema_migrations/20201104204739
@@ -0,0 +1 @@
+9431c771b14d61851e8e69b3a789f222463bbe460078a35c8ad3cbcf8df8b077 \ No newline at end of file
diff --git a/db/schema_migrations/20201105021637 b/db/schema_migrations/20201105021637
new file mode 100644
index 00000000000..05a76d22568
--- /dev/null
+++ b/db/schema_migrations/20201105021637
@@ -0,0 +1 @@
+b04e37c8713a333afbff4c7034d9f3ffca4a4490d0b563b73d9e6bffd45f3f6a \ No newline at end of file
diff --git a/db/schema_migrations/20201105024127 b/db/schema_migrations/20201105024127
new file mode 100644
index 00000000000..fecda19cb2f
--- /dev/null
+++ b/db/schema_migrations/20201105024127
@@ -0,0 +1 @@
+afeff8d6bf5ca14f955f5d387e8d219e852e9617b80fe07ed2e1b57af19fd4fa \ No newline at end of file
diff --git a/db/schema_migrations/20201105135051 b/db/schema_migrations/20201105135051
new file mode 100644
index 00000000000..26ebc47fd3a
--- /dev/null
+++ b/db/schema_migrations/20201105135051
@@ -0,0 +1 @@
+41cc59ebfeed647b2525191befa43c1faeb1c133a687a5c93124f4b4c745117a \ No newline at end of file
diff --git a/db/schema_migrations/20201105143211 b/db/schema_migrations/20201105143211
new file mode 100644
index 00000000000..6ddf20c1d68
--- /dev/null
+++ b/db/schema_migrations/20201105143211
@@ -0,0 +1 @@
+b614435cdb654ebbd11bcc5ac0ed69352219e51b368d8f10c0b2998c5258caf9 \ No newline at end of file
diff --git a/db/schema_migrations/20201105143312 b/db/schema_migrations/20201105143312
new file mode 100644
index 00000000000..fe616c85dc9
--- /dev/null
+++ b/db/schema_migrations/20201105143312
@@ -0,0 +1 @@
+decdc314dbcf6b8ac2ce140f81f9d342efca0d98bbeff10c7a041568a67b63f3 \ No newline at end of file
diff --git a/db/schema_migrations/20201106082723 b/db/schema_migrations/20201106082723
new file mode 100644
index 00000000000..0bb6a3b85b8
--- /dev/null
+++ b/db/schema_migrations/20201106082723
@@ -0,0 +1 @@
+a2dc0d31af6834adf6634f6051d7d451fc48d31492d96efe57547c3e9d61a64d \ No newline at end of file
diff --git a/db/schema_migrations/20201106134139 b/db/schema_migrations/20201106134139
new file mode 100644
index 00000000000..245cbbf712e
--- /dev/null
+++ b/db/schema_migrations/20201106134139
@@ -0,0 +1 @@
+9b1008df64741ad313ddf51969c18d609cd01a7255563fe0395d2bbf4d288e30 \ No newline at end of file
diff --git a/db/schema_migrations/20201106134950 b/db/schema_migrations/20201106134950
new file mode 100644
index 00000000000..b36cccd4c40
--- /dev/null
+++ b/db/schema_migrations/20201106134950
@@ -0,0 +1 @@
+f6e4e62dbd992fc8283f3d7872bb33f1b6bea1b366806caf8f7a65140584c0c1 \ No newline at end of file
diff --git a/db/schema_migrations/20201107032257 b/db/schema_migrations/20201107032257
new file mode 100644
index 00000000000..4ea5f763dc0
--- /dev/null
+++ b/db/schema_migrations/20201107032257
@@ -0,0 +1 @@
+07160ee3c92e68273042df979640c3927abbb187f79e1a4645471e28061e1c2c \ No newline at end of file
diff --git a/db/schema_migrations/20201109144634 b/db/schema_migrations/20201109144634
new file mode 100644
index 00000000000..8f47a75dfb8
--- /dev/null
+++ b/db/schema_migrations/20201109144634
@@ -0,0 +1 @@
+cbb2a2027fb6083771e97510a00c07a4ded0576e89fafd6cff4faba4e21c82c0 \ No newline at end of file
diff --git a/db/schema_migrations/20201109180311 b/db/schema_migrations/20201109180311
new file mode 100644
index 00000000000..0752e2dabb3
--- /dev/null
+++ b/db/schema_migrations/20201109180311
@@ -0,0 +1 @@
+49143d2a7dd0a53c051151b0cdc93745a0fa1b01e6d54bb663e147c2064d9290 \ No newline at end of file
diff --git a/db/schema_migrations/20201109184023 b/db/schema_migrations/20201109184023
new file mode 100644
index 00000000000..7a66c0f0f4c
--- /dev/null
+++ b/db/schema_migrations/20201109184023
@@ -0,0 +1 @@
+698bcedf387fc01fbb7f1899f0f7660ba86a197fa72cf71d998cc90e3d1da9f3 \ No newline at end of file
diff --git a/db/schema_migrations/20201110035029 b/db/schema_migrations/20201110035029
new file mode 100644
index 00000000000..9631f17bce0
--- /dev/null
+++ b/db/schema_migrations/20201110035029
@@ -0,0 +1 @@
+21245809e056dfefedc4d2c6a8e2bf642bfcee480a863f8707ba6fa6b748a2e0 \ No newline at end of file
diff --git a/db/schema_migrations/20201110110454 b/db/schema_migrations/20201110110454
new file mode 100644
index 00000000000..5b721550325
--- /dev/null
+++ b/db/schema_migrations/20201110110454
@@ -0,0 +1 @@
+f008d77d2a0aef463a924923d5a338030758d6b9c194756a0490b51a95681127 \ No newline at end of file
diff --git a/db/schema_migrations/20201110133629 b/db/schema_migrations/20201110133629
new file mode 100644
index 00000000000..487b5eab7c1
--- /dev/null
+++ b/db/schema_migrations/20201110133629
@@ -0,0 +1 @@
+83773b825db9b2671fd4ffb2c0d6733036737385ce7a933040011026b34ba1e1 \ No newline at end of file
diff --git a/db/schema_migrations/20201111110318 b/db/schema_migrations/20201111110318
new file mode 100644
index 00000000000..0a88f8f09df
--- /dev/null
+++ b/db/schema_migrations/20201111110318
@@ -0,0 +1 @@
+4168c39fe93b1c11d8080e07167f79c8234c74a7b274332174d9e861f2084ada \ No newline at end of file
diff --git a/db/schema_migrations/20201111110918 b/db/schema_migrations/20201111110918
new file mode 100644
index 00000000000..cfc30e2bcfc
--- /dev/null
+++ b/db/schema_migrations/20201111110918
@@ -0,0 +1 @@
+f5705da7bce46d98ca798c85f08d8a6a0577839aabacd0ba9b50e0b7351a4e96 \ No newline at end of file
diff --git a/db/schema_migrations/20201111152859 b/db/schema_migrations/20201111152859
new file mode 100644
index 00000000000..2d5b337b857
--- /dev/null
+++ b/db/schema_migrations/20201111152859
@@ -0,0 +1 @@
+4c5baa6a09a339fac544f830d5ef822b1e7e4eae8431bd91df5113125accbc77 \ No newline at end of file
diff --git a/db/schema_migrations/20201112195322 b/db/schema_migrations/20201112195322
new file mode 100644
index 00000000000..ba4c7e9d50f
--- /dev/null
+++ b/db/schema_migrations/20201112195322
@@ -0,0 +1 @@
+644bf793b3b62330bfb1f4dc406e6dd01cbcf4651ebfd2873fb551c757c8a3b4 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 4e6fc7e9260..f29f9178a26 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -8953,6 +8953,43 @@ CREATE SEQUENCE analytics_cycle_analytics_project_stages_id_seq
ALTER SEQUENCE analytics_cycle_analytics_project_stages_id_seq OWNED BY analytics_cycle_analytics_project_stages.id;
+CREATE TABLE analytics_devops_adoption_segment_selections (
+ id bigint NOT NULL,
+ segment_id bigint NOT NULL,
+ group_id bigint,
+ project_id bigint,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ CONSTRAINT segment_selection_project_id_or_group_id_required CHECK ((((project_id <> NULL::bigint) AND (group_id IS NULL)) OR ((group_id <> NULL::bigint) AND (project_id IS NULL))))
+);
+
+CREATE SEQUENCE analytics_devops_adoption_segment_selections_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE analytics_devops_adoption_segment_selections_id_seq OWNED BY analytics_devops_adoption_segment_selections.id;
+
+CREATE TABLE analytics_devops_adoption_segments (
+ id bigint NOT NULL,
+ name text NOT NULL,
+ last_recorded_at timestamp with time zone,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ CONSTRAINT check_4be7a006fd CHECK ((char_length(name) <= 255))
+);
+
+CREATE SEQUENCE analytics_devops_adoption_segments_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE analytics_devops_adoption_segments_id_seq OWNED BY analytics_devops_adoption_segments.id;
+
CREATE TABLE analytics_instance_statistics_measurements (
id bigint NOT NULL,
count bigint NOT NULL,
@@ -9046,7 +9083,6 @@ CREATE TABLE application_settings (
max_attachment_size integer DEFAULT 10 NOT NULL,
default_project_visibility integer DEFAULT 0 NOT NULL,
default_snippet_visibility integer DEFAULT 0 NOT NULL,
- domain_whitelist text,
user_oauth_applications boolean DEFAULT true,
after_sign_out_path character varying,
session_expire_delay integer DEFAULT 10080 NOT NULL,
@@ -9082,8 +9118,6 @@ CREATE TABLE application_settings (
elasticsearch_search boolean DEFAULT false NOT NULL,
repository_storages character varying DEFAULT 'default'::character varying,
enabled_git_access_protocol character varying,
- domain_blacklist_enabled boolean DEFAULT false,
- domain_blacklist text,
usage_ping_enabled boolean DEFAULT true NOT NULL,
sign_in_text_html text,
help_page_text_html text,
@@ -9171,7 +9205,7 @@ CREATE TABLE application_settings (
custom_project_templates_group_id integer,
usage_stats_set_by_user_id integer,
receive_max_input_size integer,
- diff_max_patch_bytes integer DEFAULT 102400 NOT NULL,
+ diff_max_patch_bytes integer DEFAULT 204800 NOT NULL,
archive_builds_in_seconds integer,
commit_email_hostname character varying,
protected_ci_variables boolean DEFAULT true NOT NULL,
@@ -9257,7 +9291,6 @@ CREATE TABLE application_settings (
email_restrictions_enabled boolean DEFAULT false NOT NULL,
email_restrictions text,
npm_package_requests_forwarding boolean DEFAULT true NOT NULL,
- namespace_storage_size_limit bigint DEFAULT 0 NOT NULL,
seat_link_enabled boolean DEFAULT true NOT NULL,
container_expiration_policies_enable_historic_entries boolean DEFAULT false NOT NULL,
issues_create_limit integer DEFAULT 0 NOT NULL,
@@ -9291,16 +9324,39 @@ CREATE TABLE application_settings (
gitpod_enabled boolean DEFAULT false NOT NULL,
gitpod_url text DEFAULT 'https://gitpod.io/'::text,
abuse_notification_email character varying,
- require_admin_approval_after_user_signup boolean DEFAULT false NOT NULL,
+ require_admin_approval_after_user_signup boolean DEFAULT true NOT NULL,
help_page_documentation_base_url text,
automatic_purchased_storage_allocation boolean DEFAULT false NOT NULL,
+ encrypted_ci_jwt_signing_key text,
+ encrypted_ci_jwt_signing_key_iv text,
+ container_registry_expiration_policies_worker_capacity integer DEFAULT 0 NOT NULL,
+ elasticsearch_analyzers_smartcn_enabled boolean DEFAULT false NOT NULL,
+ elasticsearch_analyzers_smartcn_search boolean DEFAULT false NOT NULL,
+ elasticsearch_analyzers_kuromoji_enabled boolean DEFAULT false NOT NULL,
+ elasticsearch_analyzers_kuromoji_search boolean DEFAULT false NOT NULL,
+ secret_detection_token_revocation_enabled boolean DEFAULT false NOT NULL,
+ secret_detection_token_revocation_url text,
+ encrypted_secret_detection_token_revocation_token text,
+ encrypted_secret_detection_token_revocation_token_iv text,
+ domain_denylist_enabled boolean DEFAULT false,
+ domain_denylist text,
+ domain_allowlist text,
+ new_user_signups_cap integer,
+ encrypted_cloud_license_auth_token text,
+ encrypted_cloud_license_auth_token_iv text,
+ secret_detection_revocation_token_types_url text,
+ CONSTRAINT app_settings_registry_exp_policies_worker_capacity_positive CHECK ((container_registry_expiration_policies_worker_capacity >= 0)),
CONSTRAINT check_2dba05b802 CHECK ((char_length(gitpod_url) <= 255)),
CONSTRAINT check_51700b31b5 CHECK ((char_length(default_branch_name) <= 255)),
CONSTRAINT check_57123c9593 CHECK ((char_length(help_page_documentation_base_url) <= 255)),
+ CONSTRAINT check_85a39b68ff CHECK ((char_length(encrypted_ci_jwt_signing_key_iv) <= 255)),
+ CONSTRAINT check_9a719834eb CHECK ((char_length(secret_detection_token_revocation_url) <= 255)),
CONSTRAINT check_9c6c447a13 CHECK ((char_length(maintenance_mode_message) <= 255)),
+ CONSTRAINT check_a5704163cc CHECK ((char_length(secret_detection_revocation_token_types_url) <= 255)),
CONSTRAINT check_d03919528d CHECK ((char_length(container_registry_vendor) <= 255)),
CONSTRAINT check_d820146492 CHECK ((char_length(spam_check_endpoint_url) <= 255)),
- CONSTRAINT check_e5aba18f02 CHECK ((char_length(container_registry_version) <= 255))
+ CONSTRAINT check_e5aba18f02 CHECK ((char_length(container_registry_version) <= 255)),
+ CONSTRAINT check_ef6176834f CHECK ((char_length(encrypted_cloud_license_auth_token_iv) <= 255))
);
CREATE SEQUENCE application_settings_id_seq
@@ -9608,7 +9664,9 @@ CREATE TABLE aws_roles (
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
role_arn character varying(2048),
- role_external_id character varying(64) NOT NULL
+ role_external_id character varying(64) NOT NULL,
+ region text,
+ CONSTRAINT check_57adedab55 CHECK ((char_length(region) <= 255))
);
CREATE TABLE background_migration_jobs (
@@ -9865,6 +9923,26 @@ CREATE SEQUENCE bulk_import_entities_id_seq
ALTER SEQUENCE bulk_import_entities_id_seq OWNED BY bulk_import_entities.id;
+CREATE TABLE bulk_import_trackers (
+ id bigint NOT NULL,
+ bulk_import_entity_id bigint NOT NULL,
+ relation text NOT NULL,
+ next_page text,
+ has_next_page boolean DEFAULT false NOT NULL,
+ CONSTRAINT check_2d45cae629 CHECK ((char_length(relation) <= 255)),
+ CONSTRAINT check_40aeaa600b CHECK ((char_length(next_page) <= 255)),
+ CONSTRAINT check_next_page_requirement CHECK (((has_next_page IS FALSE) OR (next_page IS NOT NULL)))
+);
+
+CREATE SEQUENCE bulk_import_trackers_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE bulk_import_trackers_id_seq OWNED BY bulk_import_trackers.id;
+
CREATE TABLE bulk_imports (
id bigint NOT NULL,
user_id integer NOT NULL,
@@ -10129,7 +10207,8 @@ CREATE TABLE ci_daily_build_group_report_results (
last_pipeline_id bigint NOT NULL,
ref_path text NOT NULL,
group_name text NOT NULL,
- data jsonb NOT NULL
+ data jsonb NOT NULL,
+ default_branch boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE ci_daily_build_group_report_results_id_seq
@@ -10653,6 +10732,38 @@ CREATE SEQUENCE ci_subscriptions_projects_id_seq
ALTER SEQUENCE ci_subscriptions_projects_id_seq OWNED BY ci_subscriptions_projects.id;
+CREATE TABLE ci_test_case_failures (
+ id bigint NOT NULL,
+ failed_at timestamp with time zone,
+ test_case_id bigint NOT NULL,
+ build_id bigint NOT NULL
+);
+
+CREATE SEQUENCE ci_test_case_failures_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE ci_test_case_failures_id_seq OWNED BY ci_test_case_failures.id;
+
+CREATE TABLE ci_test_cases (
+ id bigint NOT NULL,
+ project_id bigint NOT NULL,
+ key_hash text NOT NULL,
+ CONSTRAINT check_dd3c5d1c15 CHECK ((char_length(key_hash) <= 64))
+);
+
+CREATE SEQUENCE ci_test_cases_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE ci_test_cases_id_seq OWNED BY ci_test_cases.id;
+
CREATE TABLE ci_trigger_requests (
id integer NOT NULL,
trigger_id integer NOT NULL,
@@ -10883,7 +10994,8 @@ CREATE TABLE clusters (
namespace_per_environment boolean DEFAULT true NOT NULL,
management_project_id integer,
cleanup_status smallint DEFAULT 1 NOT NULL,
- cleanup_status_reason text
+ cleanup_status_reason text,
+ helm_major_version integer DEFAULT 2 NOT NULL
);
CREATE TABLE clusters_applications_cert_managers (
@@ -11197,11 +11309,11 @@ CREATE TABLE container_expiration_policies (
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
next_run_at timestamp with time zone,
- name_regex character varying(255),
+ name_regex character varying(255) DEFAULT '.*'::character varying,
cadence character varying(12) DEFAULT '1d'::character varying NOT NULL,
older_than character varying(12) DEFAULT '90d'::character varying,
keep_n integer DEFAULT 10,
- enabled boolean DEFAULT true NOT NULL,
+ enabled boolean DEFAULT false NOT NULL,
name_regex_keep text,
CONSTRAINT container_expiration_policies_name_regex_keep CHECK ((char_length(name_regex_keep) <= 255))
);
@@ -11213,7 +11325,8 @@ CREATE TABLE container_repositories (
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
status smallint,
- expiration_policy_started_at timestamp with time zone
+ expiration_policy_started_at timestamp with time zone,
+ expiration_policy_cleanup_status smallint DEFAULT 0 NOT NULL
);
CREATE SEQUENCE container_repositories_id_seq
@@ -11270,6 +11383,23 @@ CREATE SEQUENCE conversational_development_index_metrics_id_seq
ALTER SEQUENCE conversational_development_index_metrics_id_seq OWNED BY conversational_development_index_metrics.id;
+CREATE TABLE csv_issue_imports (
+ id bigint NOT NULL,
+ project_id bigint NOT NULL,
+ user_id bigint NOT NULL,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL
+);
+
+CREATE SEQUENCE csv_issue_imports_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE csv_issue_imports_id_seq OWNED BY csv_issue_imports.id;
+
CREATE TABLE custom_emoji (
id bigint NOT NULL,
namespace_id bigint NOT NULL,
@@ -11547,7 +11677,9 @@ CREATE TABLE design_management_designs (
issue_id integer,
filename character varying NOT NULL,
relative_position integer,
- CONSTRAINT check_07155e2715 CHECK ((char_length((filename)::text) <= 255))
+ iid integer,
+ CONSTRAINT check_07155e2715 CHECK ((char_length((filename)::text) <= 255)),
+ CONSTRAINT check_cfb92df01a CHECK ((iid IS NOT NULL))
);
CREATE SEQUENCE design_management_designs_id_seq
@@ -12647,10 +12779,12 @@ CREATE TABLE group_wiki_repositories (
CREATE TABLE historical_data (
id integer NOT NULL,
- date date NOT NULL,
+ date date,
active_user_count integer,
created_at timestamp without time zone,
- updated_at timestamp without time zone
+ updated_at timestamp without time zone,
+ recorded_at timestamp with time zone,
+ CONSTRAINT check_640e8cf66c CHECK ((recorded_at IS NOT NULL))
);
CREATE SEQUENCE historical_data_id_seq
@@ -13063,6 +13197,9 @@ CREATE TABLE jira_tracker_data (
project_key text,
issues_enabled boolean DEFAULT false NOT NULL,
deployment_type smallint DEFAULT 0 NOT NULL,
+ vulnerabilities_issuetype text,
+ vulnerabilities_enabled boolean DEFAULT false NOT NULL,
+ CONSTRAINT check_0bf84b76e9 CHECK ((char_length(vulnerabilities_issuetype) <= 255)),
CONSTRAINT check_214cf6a48b CHECK ((char_length(project_key) <= 255))
);
@@ -13354,6 +13491,23 @@ CREATE SEQUENCE merge_request_blocks_id_seq
ALTER SEQUENCE merge_request_blocks_id_seq OWNED BY merge_request_blocks.id;
+CREATE TABLE merge_request_cleanup_schedules (
+ merge_request_id bigint NOT NULL,
+ scheduled_at timestamp with time zone NOT NULL,
+ completed_at timestamp with time zone,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL
+);
+
+CREATE SEQUENCE merge_request_cleanup_schedules_merge_request_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE merge_request_cleanup_schedules_merge_request_id_seq OWNED BY merge_request_cleanup_schedules.merge_request_id;
+
CREATE TABLE merge_request_context_commit_diff_files (
sha bytea NOT NULL,
relative_order integer NOT NULL,
@@ -13724,7 +13878,8 @@ CREATE TABLE namespace_root_storage_statistics (
storage_size bigint DEFAULT 0 NOT NULL,
packages_size bigint DEFAULT 0 NOT NULL,
snippets_size bigint DEFAULT 0 NOT NULL,
- pipeline_artifacts_size bigint DEFAULT 0 NOT NULL
+ pipeline_artifacts_size bigint DEFAULT 0 NOT NULL,
+ uploads_size bigint DEFAULT 0 NOT NULL
);
CREATE TABLE namespace_settings (
@@ -14298,6 +14453,21 @@ CREATE TABLE packages_nuget_metadata (
CONSTRAINT packages_nuget_metadata_project_url_constraint CHECK ((char_length(project_url) <= 255))
);
+CREATE TABLE packages_package_file_build_infos (
+ id bigint NOT NULL,
+ package_file_id bigint NOT NULL,
+ pipeline_id bigint
+);
+
+CREATE SEQUENCE packages_package_file_build_infos_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE packages_package_file_build_infos_id_seq OWNED BY packages_package_file_build_infos.id;
+
CREATE TABLE packages_package_files (
id bigint NOT NULL,
package_id bigint NOT NULL,
@@ -14380,6 +14550,8 @@ CREATE TABLE pages_deployments (
file_store smallint NOT NULL,
size integer NOT NULL,
file text NOT NULL,
+ file_count integer NOT NULL,
+ file_sha256 bytea NOT NULL,
CONSTRAINT check_f0fe8032dd CHECK ((char_length(file) <= 255))
);
@@ -14524,7 +14696,7 @@ CREATE TABLE plan_limits (
offset_pagination_limit integer DEFAULT 50000 NOT NULL,
ci_instance_level_variables integer DEFAULT 25 NOT NULL,
storage_size_limit integer DEFAULT 0 NOT NULL,
- ci_max_artifact_size_lsif integer DEFAULT 20 NOT NULL,
+ ci_max_artifact_size_lsif integer DEFAULT 100 NOT NULL,
ci_max_artifact_size_archive integer DEFAULT 0 NOT NULL,
ci_max_artifact_size_metadata integer DEFAULT 0 NOT NULL,
ci_max_artifact_size_trace integer DEFAULT 0 NOT NULL,
@@ -14615,6 +14787,8 @@ CREATE VIEW postgres_indexes AS
pg_index.indisvalid AS valid_index,
pg_class.relispartition AS partitioned,
pg_index.indisexclusion AS exclusion,
+ (pg_index.indexprs IS NOT NULL) AS expression,
+ (pg_index.indpred IS NOT NULL) AS partial,
pg_indexes.indexdef AS definition,
pg_relation_size((pg_class.oid)::regclass) AS ondisk_size_bytes
FROM (((pg_index
@@ -14623,6 +14797,48 @@ CREATE VIEW postgres_indexes AS
JOIN pg_indexes ON ((pg_class.relname = pg_indexes.indexname)))
WHERE ((pg_namespace.nspname <> 'pg_catalog'::name) AND (pg_namespace.nspname = ANY (ARRAY["current_schema"(), 'gitlab_partitions_dynamic'::name, 'gitlab_partitions_static'::name])));
+CREATE VIEW postgres_partitioned_tables AS
+ SELECT (((pg_namespace.nspname)::text || '.'::text) || (pg_class.relname)::text) AS identifier,
+ pg_class.oid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ CASE partitioned_tables.partstrat
+ WHEN 'l'::"char" THEN 'list'::text
+ WHEN 'r'::"char" THEN 'range'::text
+ WHEN 'h'::"char" THEN 'hash'::text
+ ELSE NULL::text
+ END AS strategy,
+ array_agg(pg_attribute.attname) AS key_columns
+ FROM (((( SELECT pg_partitioned_table.partrelid,
+ pg_partitioned_table.partstrat,
+ unnest(pg_partitioned_table.partattrs) AS column_position
+ FROM pg_partitioned_table) partitioned_tables
+ JOIN pg_class ON ((partitioned_tables.partrelid = pg_class.oid)))
+ JOIN pg_namespace ON ((pg_class.relnamespace = pg_namespace.oid)))
+ JOIN pg_attribute ON (((pg_attribute.attrelid = pg_class.oid) AND (pg_attribute.attnum = partitioned_tables.column_position))))
+ WHERE (pg_namespace.nspname = "current_schema"())
+ GROUP BY (((pg_namespace.nspname)::text || '.'::text) || (pg_class.relname)::text), pg_class.oid, pg_namespace.nspname, pg_class.relname,
+ CASE partitioned_tables.partstrat
+ WHEN 'l'::"char" THEN 'list'::text
+ WHEN 'r'::"char" THEN 'range'::text
+ WHEN 'h'::"char" THEN 'hash'::text
+ ELSE NULL::text
+ END;
+
+CREATE VIEW postgres_partitions AS
+ SELECT (((pg_namespace.nspname)::text || '.'::text) || (pg_class.relname)::text) AS identifier,
+ pg_class.oid,
+ pg_namespace.nspname AS schema,
+ pg_class.relname AS name,
+ (((parent_namespace.nspname)::text || '.'::text) || (parent_class.relname)::text) AS parent_identifier,
+ pg_get_expr(pg_class.relpartbound, pg_inherits.inhrelid) AS condition
+ FROM ((((pg_class
+ JOIN pg_namespace ON ((pg_namespace.oid = pg_class.relnamespace)))
+ JOIN pg_inherits ON ((pg_class.oid = pg_inherits.inhrelid)))
+ JOIN pg_class parent_class ON ((pg_inherits.inhparent = parent_class.oid)))
+ JOIN pg_namespace parent_namespace ON ((parent_class.relnamespace = parent_namespace.oid)))
+ WHERE (pg_class.relispartition AND (pg_namespace.nspname = ANY (ARRAY["current_schema"(), 'gitlab_partitions_dynamic'::name, 'gitlab_partitions_static'::name])));
+
CREATE TABLE postgres_reindex_actions (
id bigint NOT NULL,
action_start timestamp with time zone NOT NULL,
@@ -14717,7 +14933,9 @@ CREATE TABLE project_ci_cd_settings (
group_runners_enabled boolean DEFAULT true NOT NULL,
merge_pipelines_enabled boolean,
default_git_depth integer,
- forward_deployment_enabled boolean
+ forward_deployment_enabled boolean,
+ merge_trains_enabled boolean DEFAULT false,
+ auto_rollback_enabled boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE project_ci_cd_settings_id_seq
@@ -14731,7 +14949,7 @@ ALTER SEQUENCE project_ci_cd_settings_id_seq OWNED BY project_ci_cd_settings.id;
CREATE TABLE project_compliance_framework_settings (
project_id bigint NOT NULL,
- framework smallint NOT NULL,
+ framework smallint,
framework_id bigint,
CONSTRAINT check_d348de9e2d CHECK ((framework_id IS NOT NULL))
);
@@ -14842,7 +15060,8 @@ CREATE TABLE project_features (
repository_access_level integer DEFAULT 20 NOT NULL,
pages_access_level integer NOT NULL,
forking_access_level integer,
- metrics_dashboard_access_level integer
+ metrics_dashboard_access_level integer,
+ requirements_access_level integer DEFAULT 20 NOT NULL
);
CREATE SEQUENCE project_features_id_seq
@@ -15041,6 +15260,7 @@ CREATE TABLE project_settings (
allow_merge_on_skipped_pipeline boolean,
squash_option smallint DEFAULT 3,
has_confluence boolean DEFAULT false NOT NULL,
+ has_vulnerabilities boolean DEFAULT false NOT NULL,
CONSTRAINT check_bde223416c CHECK ((show_default_award_emojis IS NOT NULL))
);
@@ -15058,7 +15278,8 @@ CREATE TABLE project_statistics (
packages_size bigint DEFAULT 0 NOT NULL,
wiki_size bigint,
snippets_size bigint,
- pipeline_artifacts_size bigint DEFAULT 0 NOT NULL
+ pipeline_artifacts_size bigint DEFAULT 0 NOT NULL,
+ uploads_size bigint DEFAULT 0 NOT NULL
);
CREATE SEQUENCE project_statistics_id_seq
@@ -15840,6 +16061,7 @@ CREATE TABLE security_findings (
confidence smallint NOT NULL,
project_fingerprint text NOT NULL,
deduplicated boolean DEFAULT false NOT NULL,
+ "position" integer,
CONSTRAINT check_b9508c6df8 CHECK ((char_length(project_fingerprint) <= 40))
);
@@ -15857,8 +16079,7 @@ CREATE TABLE security_scans (
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
build_id bigint NOT NULL,
- scan_type smallint NOT NULL,
- scanned_resources_count integer
+ scan_type smallint NOT NULL
);
CREATE SEQUENCE security_scans_id_seq
@@ -16049,6 +16270,27 @@ CREATE TABLE snippet_repositories (
CONSTRAINT snippet_repositories_verification_failure_text_limit CHECK ((char_length(verification_failure) <= 255))
);
+CREATE TABLE snippet_repository_storage_moves (
+ id bigint NOT NULL,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ snippet_id bigint NOT NULL,
+ state smallint DEFAULT 1 NOT NULL,
+ source_storage_name text NOT NULL,
+ destination_storage_name text NOT NULL,
+ CONSTRAINT snippet_repository_storage_moves_destination_storage_name CHECK ((char_length(destination_storage_name) <= 255)),
+ CONSTRAINT snippet_repository_storage_moves_source_storage_name CHECK ((char_length(source_storage_name) <= 255))
+);
+
+CREATE SEQUENCE snippet_repository_storage_moves_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE snippet_repository_storage_moves_id_seq OWNED BY snippet_repository_storage_moves.id;
+
CREATE TABLE snippet_statistics (
snippet_id bigint NOT NULL,
repository_size bigint DEFAULT 0 NOT NULL,
@@ -16092,7 +16334,8 @@ CREATE TABLE snippets (
description_html text,
encrypted_secret_token character varying(255),
encrypted_secret_token_iv character varying(255),
- secret boolean DEFAULT false NOT NULL
+ secret boolean DEFAULT false NOT NULL,
+ repository_read_only boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE snippets_id_seq
@@ -16356,6 +16599,7 @@ CREATE TABLE terraform_state_versions (
verified_at timestamp with time zone,
verification_checksum bytea,
verification_failure text,
+ ci_build_id bigint,
CONSTRAINT check_0824bb7bbd CHECK ((char_length(file) <= 255)),
CONSTRAINT tf_state_versions_verification_failure_text_limit CHECK ((char_length(verification_failure) <= 255))
);
@@ -16381,13 +16625,7 @@ CREATE TABLE terraform_states (
locked_by_user_id bigint,
uuid character varying(32) NOT NULL,
name character varying(255),
- verification_retry_at timestamp with time zone,
- verified_at timestamp with time zone,
- verification_retry_count smallint,
- verification_checksum bytea,
- verification_failure text,
- versioning_enabled boolean DEFAULT false NOT NULL,
- CONSTRAINT check_21a47163ea CHECK ((char_length(verification_failure) <= 255))
+ versioning_enabled boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE terraform_states_id_seq
@@ -16649,7 +16887,8 @@ CREATE TABLE user_statuses (
cached_markdown_version integer,
emoji character varying DEFAULT 'speech_balloon'::character varying NOT NULL,
message character varying(100),
- message_html character varying
+ message_html character varying,
+ availability smallint DEFAULT 0 NOT NULL
);
CREATE SEQUENCE user_statuses_user_id_seq
@@ -16929,6 +17168,26 @@ CREATE SEQUENCE vulnerability_feedback_id_seq
ALTER SEQUENCE vulnerability_feedback_id_seq OWNED BY vulnerability_feedback.id;
+CREATE TABLE vulnerability_finding_links (
+ id bigint NOT NULL,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ vulnerability_occurrence_id bigint NOT NULL,
+ name text,
+ url text NOT NULL,
+ CONSTRAINT check_55f0a95439 CHECK ((char_length(name) <= 255)),
+ CONSTRAINT check_b7fe886df6 CHECK ((char_length(url) <= 2048))
+);
+
+CREATE SEQUENCE vulnerability_finding_links_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE vulnerability_finding_links_id_seq OWNED BY vulnerability_finding_links.id;
+
CREATE TABLE vulnerability_historical_statistics (
id bigint NOT NULL,
created_at timestamp with time zone NOT NULL,
@@ -17166,7 +17425,9 @@ CREATE TABLE web_hooks (
encrypted_token_iv character varying,
encrypted_url character varying,
encrypted_url_iv character varying,
- deployment_events boolean DEFAULT false NOT NULL
+ deployment_events boolean DEFAULT false NOT NULL,
+ releases_events boolean DEFAULT false NOT NULL,
+ feature_flag_events boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE web_hooks_id_seq
@@ -17333,6 +17594,10 @@ ALTER TABLE ONLY analytics_cycle_analytics_group_value_streams ALTER COLUMN id S
ALTER TABLE ONLY analytics_cycle_analytics_project_stages ALTER COLUMN id SET DEFAULT nextval('analytics_cycle_analytics_project_stages_id_seq'::regclass);
+ALTER TABLE ONLY analytics_devops_adoption_segment_selections ALTER COLUMN id SET DEFAULT nextval('analytics_devops_adoption_segment_selections_id_seq'::regclass);
+
+ALTER TABLE ONLY analytics_devops_adoption_segments ALTER COLUMN id SET DEFAULT nextval('analytics_devops_adoption_segments_id_seq'::regclass);
+
ALTER TABLE ONLY analytics_instance_statistics_measurements ALTER COLUMN id SET DEFAULT nextval('analytics_instance_statistics_measurements_id_seq'::regclass);
ALTER TABLE ONLY appearances ALTER COLUMN id SET DEFAULT nextval('appearances_id_seq'::regclass);
@@ -17395,6 +17660,8 @@ ALTER TABLE ONLY bulk_import_configurations ALTER COLUMN id SET DEFAULT nextval(
ALTER TABLE ONLY bulk_import_entities ALTER COLUMN id SET DEFAULT nextval('bulk_import_entities_id_seq'::regclass);
+ALTER TABLE ONLY bulk_import_trackers ALTER COLUMN id SET DEFAULT nextval('bulk_import_trackers_id_seq'::regclass);
+
ALTER TABLE ONLY bulk_imports ALTER COLUMN id SET DEFAULT nextval('bulk_imports_id_seq'::regclass);
ALTER TABLE ONLY chat_names ALTER COLUMN id SET DEFAULT nextval('chat_names_id_seq'::regclass);
@@ -17469,6 +17736,10 @@ ALTER TABLE ONLY ci_stages ALTER COLUMN id SET DEFAULT nextval('ci_stages_id_seq
ALTER TABLE ONLY ci_subscriptions_projects ALTER COLUMN id SET DEFAULT nextval('ci_subscriptions_projects_id_seq'::regclass);
+ALTER TABLE ONLY ci_test_case_failures ALTER COLUMN id SET DEFAULT nextval('ci_test_case_failures_id_seq'::regclass);
+
+ALTER TABLE ONLY ci_test_cases ALTER COLUMN id SET DEFAULT nextval('ci_test_cases_id_seq'::regclass);
+
ALTER TABLE ONLY ci_trigger_requests ALTER COLUMN id SET DEFAULT nextval('ci_trigger_requests_id_seq'::regclass);
ALTER TABLE ONLY ci_triggers ALTER COLUMN id SET DEFAULT nextval('ci_triggers_id_seq'::regclass);
@@ -17523,6 +17794,8 @@ ALTER TABLE ONLY container_repositories ALTER COLUMN id SET DEFAULT nextval('con
ALTER TABLE ONLY conversational_development_index_metrics ALTER COLUMN id SET DEFAULT nextval('conversational_development_index_metrics_id_seq'::regclass);
+ALTER TABLE ONLY csv_issue_imports ALTER COLUMN id SET DEFAULT nextval('csv_issue_imports_id_seq'::regclass);
+
ALTER TABLE ONLY custom_emoji ALTER COLUMN id SET DEFAULT nextval('custom_emoji_id_seq'::regclass);
ALTER TABLE ONLY dast_scanner_profiles ALTER COLUMN id SET DEFAULT nextval('dast_scanner_profiles_id_seq'::regclass);
@@ -17719,6 +17992,8 @@ ALTER TABLE ONLY merge_request_assignees ALTER COLUMN id SET DEFAULT nextval('me
ALTER TABLE ONLY merge_request_blocks ALTER COLUMN id SET DEFAULT nextval('merge_request_blocks_id_seq'::regclass);
+ALTER TABLE ONLY merge_request_cleanup_schedules ALTER COLUMN merge_request_id SET DEFAULT nextval('merge_request_cleanup_schedules_merge_request_id_seq'::regclass);
+
ALTER TABLE ONLY merge_request_context_commits ALTER COLUMN id SET DEFAULT nextval('merge_request_context_commits_id_seq'::regclass);
ALTER TABLE ONLY merge_request_diff_details ALTER COLUMN merge_request_diff_id SET DEFAULT nextval('merge_request_diff_details_merge_request_diff_id_seq'::regclass);
@@ -17793,6 +18068,8 @@ ALTER TABLE ONLY packages_events ALTER COLUMN id SET DEFAULT nextval('packages_e
ALTER TABLE ONLY packages_maven_metadata ALTER COLUMN id SET DEFAULT nextval('packages_maven_metadata_id_seq'::regclass);
+ALTER TABLE ONLY packages_package_file_build_infos ALTER COLUMN id SET DEFAULT nextval('packages_package_file_build_infos_id_seq'::regclass);
+
ALTER TABLE ONLY packages_package_files ALTER COLUMN id SET DEFAULT nextval('packages_package_files_id_seq'::regclass);
ALTER TABLE ONLY packages_packages ALTER COLUMN id SET DEFAULT nextval('packages_packages_id_seq'::regclass);
@@ -17943,6 +18220,8 @@ ALTER TABLE ONLY slack_integrations ALTER COLUMN id SET DEFAULT nextval('slack_i
ALTER TABLE ONLY smartcard_identities ALTER COLUMN id SET DEFAULT nextval('smartcard_identities_id_seq'::regclass);
+ALTER TABLE ONLY snippet_repository_storage_moves ALTER COLUMN id SET DEFAULT nextval('snippet_repository_storage_moves_id_seq'::regclass);
+
ALTER TABLE ONLY snippet_user_mentions ALTER COLUMN id SET DEFAULT nextval('snippet_user_mentions_id_seq'::regclass);
ALTER TABLE ONLY snippets ALTER COLUMN id SET DEFAULT nextval('snippets_id_seq'::regclass);
@@ -18015,6 +18294,8 @@ ALTER TABLE ONLY vulnerability_exports ALTER COLUMN id SET DEFAULT nextval('vuln
ALTER TABLE ONLY vulnerability_feedback ALTER COLUMN id SET DEFAULT nextval('vulnerability_feedback_id_seq'::regclass);
+ALTER TABLE ONLY vulnerability_finding_links ALTER COLUMN id SET DEFAULT nextval('vulnerability_finding_links_id_seq'::regclass);
+
ALTER TABLE ONLY vulnerability_historical_statistics ALTER COLUMN id SET DEFAULT nextval('vulnerability_historical_statistics_id_seq'::regclass);
ALTER TABLE ONLY vulnerability_identifiers ALTER COLUMN id SET DEFAULT nextval('vulnerability_identifiers_id_seq'::regclass);
@@ -18276,9 +18557,18 @@ ALTER TABLE ONLY analytics_cycle_analytics_group_value_streams
ALTER TABLE ONLY analytics_cycle_analytics_project_stages
ADD CONSTRAINT analytics_cycle_analytics_project_stages_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY analytics_devops_adoption_segment_selections
+ ADD CONSTRAINT analytics_devops_adoption_segment_selections_pkey PRIMARY KEY (id);
+
+ALTER TABLE ONLY analytics_devops_adoption_segments
+ ADD CONSTRAINT analytics_devops_adoption_segments_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY analytics_instance_statistics_measurements
ADD CONSTRAINT analytics_instance_statistics_measurements_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY analytics_language_trend_repository_languages
+ ADD CONSTRAINT analytics_language_trend_repository_languages_pkey PRIMARY KEY (programming_language_id, project_id, snapshot_date);
+
ALTER TABLE ONLY appearances
ADD CONSTRAINT appearances_pkey PRIMARY KEY (id);
@@ -18309,6 +18599,9 @@ ALTER TABLE ONLY approval_project_rules_groups
ALTER TABLE ONLY approval_project_rules
ADD CONSTRAINT approval_project_rules_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY approval_project_rules_protected_branches
+ ADD CONSTRAINT approval_project_rules_protected_branches_pkey PRIMARY KEY (approval_project_rule_id, protected_branch_id);
+
ALTER TABLE ONLY approval_project_rules_users
ADD CONSTRAINT approval_project_rules_users_pkey PRIMARY KEY (id);
@@ -18381,6 +18674,9 @@ ALTER TABLE ONLY bulk_import_configurations
ALTER TABLE ONLY bulk_import_entities
ADD CONSTRAINT bulk_import_entities_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY bulk_import_trackers
+ ADD CONSTRAINT bulk_import_trackers_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY bulk_imports
ADD CONSTRAINT bulk_imports_pkey PRIMARY KEY (id);
@@ -18411,6 +18707,9 @@ ALTER TABLE ONLY ci_build_trace_chunks
ALTER TABLE ONLY ci_build_trace_section_names
ADD CONSTRAINT ci_build_trace_section_names_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY ci_build_trace_sections
+ ADD CONSTRAINT ci_build_trace_sections_pkey PRIMARY KEY (build_id, section_name_id);
+
ALTER TABLE ONLY ci_builds_metadata
ADD CONSTRAINT ci_builds_metadata_pkey PRIMARY KEY (id);
@@ -18498,6 +18797,12 @@ ALTER TABLE ONLY ci_stages
ALTER TABLE ONLY ci_subscriptions_projects
ADD CONSTRAINT ci_subscriptions_projects_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY ci_test_case_failures
+ ADD CONSTRAINT ci_test_case_failures_pkey PRIMARY KEY (id);
+
+ALTER TABLE ONLY ci_test_cases
+ ADD CONSTRAINT ci_test_cases_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY ci_trigger_requests
ADD CONSTRAINT ci_trigger_requests_pkey PRIMARY KEY (id);
@@ -18582,6 +18887,9 @@ ALTER TABLE ONLY container_repositories
ALTER TABLE ONLY conversational_development_index_metrics
ADD CONSTRAINT conversational_development_index_metrics_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY csv_issue_imports
+ ADD CONSTRAINT csv_issue_imports_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY custom_emoji
ADD CONSTRAINT custom_emoji_pkey PRIMARY KEY (id);
@@ -18615,6 +18923,9 @@ ALTER TABLE ONLY deploy_tokens
ALTER TABLE ONLY deployment_clusters
ADD CONSTRAINT deployment_clusters_pkey PRIMARY KEY (deployment_id);
+ALTER TABLE ONLY deployment_merge_requests
+ ADD CONSTRAINT deployment_merge_requests_pkey PRIMARY KEY (deployment_id, merge_request_id);
+
ALTER TABLE ONLY deployments
ADD CONSTRAINT deployments_pkey PRIMARY KEY (id);
@@ -18813,6 +19124,9 @@ ALTER TABLE ONLY issuable_severities
ALTER TABLE ONLY issuable_slas
ADD CONSTRAINT issuable_slas_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY issue_assignees
+ ADD CONSTRAINT issue_assignees_pkey PRIMARY KEY (issue_id, user_id);
+
ALTER TABLE ONLY issue_email_participants
ADD CONSTRAINT issue_email_participants_pkey PRIMARY KEY (id);
@@ -18831,6 +19145,12 @@ ALTER TABLE ONLY issue_user_mentions
ALTER TABLE ONLY issues
ADD CONSTRAINT issues_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY issues_prometheus_alert_events
+ ADD CONSTRAINT issues_prometheus_alert_events_pkey PRIMARY KEY (issue_id, prometheus_alert_event_id);
+
+ALTER TABLE ONLY issues_self_managed_prometheus_alert_events
+ ADD CONSTRAINT issues_self_managed_prometheus_alert_events_pkey PRIMARY KEY (issue_id, self_managed_prometheus_alert_event_id);
+
ALTER TABLE ONLY sprints
ADD CONSTRAINT iteration_start_and_due_daterange_group_id_constraint EXCLUDE USING gist (group_id WITH =, daterange(start_date, due_date, '[]'::text) WITH &&) WHERE ((group_id IS NOT NULL));
@@ -18891,12 +19211,21 @@ ALTER TABLE ONLY merge_request_assignees
ALTER TABLE ONLY merge_request_blocks
ADD CONSTRAINT merge_request_blocks_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY merge_request_cleanup_schedules
+ ADD CONSTRAINT merge_request_cleanup_schedules_pkey PRIMARY KEY (merge_request_id);
+
ALTER TABLE ONLY merge_request_context_commits
ADD CONSTRAINT merge_request_context_commits_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY merge_request_diff_commits
+ ADD CONSTRAINT merge_request_diff_commits_pkey PRIMARY KEY (merge_request_diff_id, relative_order);
+
ALTER TABLE ONLY merge_request_diff_details
ADD CONSTRAINT merge_request_diff_details_pkey PRIMARY KEY (merge_request_diff_id);
+ALTER TABLE ONLY merge_request_diff_files
+ ADD CONSTRAINT merge_request_diff_files_pkey PRIMARY KEY (merge_request_diff_id, relative_order);
+
ALTER TABLE ONLY merge_request_diffs
ADD CONSTRAINT merge_request_diffs_pkey PRIMARY KEY (id);
@@ -18924,6 +19253,9 @@ ALTER TABLE ONLY metrics_dashboard_annotations
ALTER TABLE ONLY metrics_users_starred_dashboards
ADD CONSTRAINT metrics_users_starred_dashboards_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY milestone_releases
+ ADD CONSTRAINT milestone_releases_pkey PRIMARY KEY (milestone_id, release_id);
+
ALTER TABLE ONLY milestones
ADD CONSTRAINT milestones_pkey PRIMARY KEY (id);
@@ -19023,6 +19355,9 @@ ALTER TABLE ONLY packages_nuget_dependency_link_metadata
ALTER TABLE ONLY packages_nuget_metadata
ADD CONSTRAINT packages_nuget_metadata_pkey PRIMARY KEY (package_id);
+ALTER TABLE ONLY packages_package_file_build_infos
+ ADD CONSTRAINT packages_package_file_build_infos_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY packages_package_files
ADD CONSTRAINT packages_package_files_pkey PRIMARY KEY (id);
@@ -19077,6 +19412,9 @@ ALTER TABLE ONLY project_alerting_settings
ALTER TABLE ONLY project_aliases
ADD CONSTRAINT project_aliases_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY project_authorizations
+ ADD CONSTRAINT project_authorizations_pkey PRIMARY KEY (user_id, project_id, access_level);
+
ALTER TABLE ONLY project_auto_devops
ADD CONSTRAINT project_auto_devops_pkey PRIMARY KEY (id);
@@ -19122,6 +19460,9 @@ ALTER TABLE ONLY project_metrics_settings
ALTER TABLE ONLY project_mirror_data
ADD CONSTRAINT project_mirror_data_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY project_pages_metadata
+ ADD CONSTRAINT project_pages_metadata_pkey PRIMARY KEY (project_id);
+
ALTER TABLE ONLY project_repositories
ADD CONSTRAINT project_repositories_pkey PRIMARY KEY (id);
@@ -19179,6 +19520,9 @@ ALTER TABLE ONLY protected_tag_create_access_levels
ALTER TABLE ONLY protected_tags
ADD CONSTRAINT protected_tags_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY push_event_payloads
+ ADD CONSTRAINT push_event_payloads_pkey PRIMARY KEY (event_id);
+
ALTER TABLE ONLY push_rules
ADD CONSTRAINT push_rules_pkey PRIMARY KEY (id);
@@ -19197,6 +19541,9 @@ ALTER TABLE ONLY releases
ALTER TABLE ONLY remote_mirrors
ADD CONSTRAINT remote_mirrors_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY repository_languages
+ ADD CONSTRAINT repository_languages_pkey PRIMARY KEY (project_id, programming_language_id);
+
ALTER TABLE ONLY required_code_owners_sections
ADD CONSTRAINT required_code_owners_sections_pkey PRIMARY KEY (id);
@@ -19278,6 +19625,9 @@ ALTER TABLE ONLY smartcard_identities
ALTER TABLE ONLY snippet_repositories
ADD CONSTRAINT snippet_repositories_pkey PRIMARY KEY (snippet_id);
+ALTER TABLE ONLY snippet_repository_storage_moves
+ ADD CONSTRAINT snippet_repository_storage_moves_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY snippet_statistics
ADD CONSTRAINT snippet_statistics_pkey PRIMARY KEY (snippet_id);
@@ -19362,6 +19712,9 @@ ALTER TABLE ONLY user_details
ALTER TABLE ONLY user_highest_roles
ADD CONSTRAINT user_highest_roles_pkey PRIMARY KEY (user_id);
+ALTER TABLE ONLY user_interacted_projects
+ ADD CONSTRAINT user_interacted_projects_pkey PRIMARY KEY (project_id, user_id);
+
ALTER TABLE ONLY user_preferences
ADD CONSTRAINT user_preferences_pkey PRIMARY KEY (id);
@@ -19377,6 +19730,9 @@ ALTER TABLE ONLY users_ops_dashboard_projects
ALTER TABLE ONLY users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY users_security_dashboard_projects
+ ADD CONSTRAINT users_security_dashboard_projects_pkey PRIMARY KEY (project_id, user_id);
+
ALTER TABLE ONLY users_star_projects
ADD CONSTRAINT users_star_projects_pkey PRIMARY KEY (id);
@@ -19392,6 +19748,9 @@ ALTER TABLE ONLY vulnerability_exports
ALTER TABLE ONLY vulnerability_feedback
ADD CONSTRAINT vulnerability_feedback_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY vulnerability_finding_links
+ ADD CONSTRAINT vulnerability_finding_links_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY vulnerability_historical_statistics
ADD CONSTRAINT vulnerability_historical_statistics_pkey PRIMARY KEY (id);
@@ -19576,14 +19935,14 @@ CREATE INDEX product_analytics_events_exper_project_id_collector_tstamp_idx9 ON
CREATE INDEX product_analytics_events_experi_project_id_collector_tstamp_idx ON gitlab_partitions_static.product_analytics_events_experimental_00 USING btree (project_id, collector_tstamp);
+CREATE INDEX active_billable_users ON users USING btree (id) WHERE (((state)::text = 'active'::text) AND ((user_type IS NULL) OR (user_type = ANY (ARRAY[NULL::integer, 6, 4]))) AND ((user_type IS NULL) OR (user_type <> ALL ('{2,6,1,3,7,8}'::smallint[]))));
+
CREATE INDEX analytics_index_audit_events_on_created_at_and_author_id ON audit_events USING btree (created_at, author_id);
CREATE INDEX analytics_index_events_on_created_at_and_author_id ON events USING btree (created_at, author_id);
CREATE INDEX analytics_repository_languages_on_project_id ON analytics_language_trend_repository_languages USING btree (project_id);
-CREATE UNIQUE INDEX analytics_repository_languages_unique_index ON analytics_language_trend_repository_languages USING btree (programming_language_id, project_id, snapshot_date);
-
CREATE UNIQUE INDEX any_approver_merge_request_rule_type_unique_index ON approval_merge_request_rules USING btree (merge_request_id, rule_type) WHERE (rule_type = 4);
CREATE UNIQUE INDEX any_approver_project_rule_type_unique_index ON approval_project_rules USING btree (project_id) WHERE (rule_type = 3);
@@ -19604,6 +19963,8 @@ CREATE INDEX backup_labels_title_idx ON backup_labels USING btree (title);
CREATE INDEX backup_labels_type_project_id_idx ON backup_labels USING btree (type, project_id);
+CREATE UNIQUE INDEX bulk_import_trackers_uniq_relation_by_entity ON bulk_import_trackers USING btree (bulk_import_entity_id, relation);
+
CREATE INDEX ci_builds_gitlab_monitor_metrics ON ci_builds USING btree (status, created_at, project_id) WHERE ((type)::text = 'Ci::Build'::text);
CREATE INDEX code_owner_approval_required ON protected_branches USING btree (project_id, code_owner_approval_required) WHERE (code_owner_approval_required = true);
@@ -19618,15 +19979,17 @@ CREATE UNIQUE INDEX epic_user_mentions_on_epic_id_and_note_id_index ON epic_user
CREATE UNIQUE INDEX epic_user_mentions_on_epic_id_index ON epic_user_mentions USING btree (epic_id) WHERE (note_id IS NULL);
+CREATE INDEX finding_links_on_vulnerability_occurrence_id ON vulnerability_finding_links USING btree (vulnerability_occurrence_id);
+
CREATE INDEX idx_audit_events_on_entity_id_desc_author_id_created_at ON audit_events USING btree (entity_id, entity_type, id DESC, author_id, created_at);
CREATE INDEX idx_ci_pipelines_artifacts_locked ON ci_pipelines USING btree (ci_ref_id, id) WHERE (locked = 1);
CREATE INDEX idx_container_exp_policies_on_project_id_next_run_at_enabled ON container_expiration_policies USING btree (project_id, next_run_at, enabled);
-CREATE INDEX idx_deployment_clusters_on_cluster_id_and_kubernetes_namespace ON deployment_clusters USING btree (cluster_id, kubernetes_namespace);
+CREATE INDEX idx_container_repositories_on_exp_cleanup_status_and_start_date ON container_repositories USING btree (expiration_policy_cleanup_status, expiration_policy_started_at);
-CREATE UNIQUE INDEX idx_deployment_merge_requests_unique_index ON deployment_merge_requests USING btree (deployment_id, merge_request_id);
+CREATE INDEX idx_deployment_clusters_on_cluster_id_and_kubernetes_namespace ON deployment_clusters USING btree (cluster_id, kubernetes_namespace);
CREATE UNIQUE INDEX idx_environment_merge_requests_unique_index ON deployment_merge_requests USING btree (environment_id, merge_request_id);
@@ -19668,6 +20031,8 @@ CREATE INDEX idx_mr_cc_diff_files_on_mr_cc_id_and_sha ON merge_request_context_c
CREATE UNIQUE INDEX idx_on_compliance_management_frameworks_namespace_id_name ON compliance_management_frameworks USING btree (namespace_id, name);
+CREATE INDEX idx_packages_build_infos_on_package_id ON packages_build_infos USING btree (package_id);
+
CREATE INDEX idx_packages_packages_on_project_id_name_version_package_type ON packages_packages USING btree (project_id, name, version, package_type);
CREATE UNIQUE INDEX idx_pkgs_dep_links_on_pkg_id_dependency_id_dependency_type ON packages_dependency_links USING btree (package_id, dependency_id, dependency_type);
@@ -19756,6 +20121,8 @@ CREATE INDEX index_analytics_ca_project_stages_on_start_event_label_id ON analyt
CREATE INDEX index_analytics_cycle_analytics_group_stages_custom_only ON analytics_cycle_analytics_group_stages USING btree (id) WHERE (custom = true);
+CREATE UNIQUE INDEX index_analytics_devops_adoption_segments_on_name ON analytics_devops_adoption_segments USING btree (name);
+
CREATE INDEX index_application_settings_on_custom_project_templates_group_id ON application_settings USING btree (custom_project_templates_group_id);
CREATE INDEX index_application_settings_on_file_template_project_id ON application_settings USING btree (file_template_project_id);
@@ -19796,8 +20163,6 @@ CREATE INDEX index_approval_project_rules_on_rule_type ON approval_project_rules
CREATE INDEX index_approval_project_rules_protected_branches_pb_id ON approval_project_rules_protected_branches USING btree (protected_branch_id);
-CREATE UNIQUE INDEX index_approval_project_rules_protected_branches_unique ON approval_project_rules_protected_branches USING btree (approval_project_rule_id, protected_branch_id);
-
CREATE UNIQUE INDEX index_approval_project_rules_users_1 ON approval_project_rules_users USING btree (approval_project_rule_id, user_id);
CREATE INDEX index_approval_project_rules_users_2 ON approval_project_rules_users USING btree (user_id);
@@ -19922,8 +20287,6 @@ CREATE UNIQUE INDEX index_ci_build_trace_chunks_on_build_id_and_chunk_index ON c
CREATE UNIQUE INDEX index_ci_build_trace_section_names_on_project_id_and_name ON ci_build_trace_section_names USING btree (project_id, name);
-CREATE UNIQUE INDEX index_ci_build_trace_sections_on_build_id_and_section_name_id ON ci_build_trace_sections USING btree (build_id, section_name_id);
-
CREATE INDEX index_ci_build_trace_sections_on_project_id ON ci_build_trace_sections USING btree (project_id);
CREATE INDEX index_ci_build_trace_sections_on_section_name_id ON ci_build_trace_sections USING btree (section_name_id);
@@ -19984,6 +20347,8 @@ CREATE UNIQUE INDEX index_ci_builds_runner_session_on_build_id ON ci_builds_runn
CREATE INDEX index_ci_daily_build_group_report_results_on_last_pipeline_id ON ci_daily_build_group_report_results USING btree (last_pipeline_id);
+CREATE INDEX index_ci_daily_build_group_report_results_on_project_and_date ON ci_daily_build_group_report_results USING btree (project_id, date DESC) WHERE ((default_branch = true) AND ((data -> 'coverage'::text) IS NOT NULL));
+
CREATE INDEX index_ci_deleted_objects_on_pick_up_at ON ci_deleted_objects USING btree (pick_up_at);
CREATE INDEX index_ci_freeze_periods_on_project_id ON ci_freeze_periods USING btree (project_id);
@@ -20002,8 +20367,6 @@ CREATE INDEX index_ci_job_artifacts_on_file_store ON ci_job_artifacts USING btre
CREATE UNIQUE INDEX index_ci_job_artifacts_on_job_id_and_file_type ON ci_job_artifacts USING btree (job_id, file_type);
-CREATE INDEX index_ci_job_artifacts_on_license_compliance_file_types ON ci_job_artifacts USING btree (job_id, file_type) WHERE ((file_type = 10) OR (file_type = 101));
-
CREATE INDEX index_ci_job_artifacts_on_project_id ON ci_job_artifacts USING btree (project_id);
CREATE INDEX index_ci_job_artifacts_on_project_id_for_security_reports ON ci_job_artifacts USING btree (project_id) WHERE (file_type = ANY (ARRAY[5, 6, 7, 8]));
@@ -20064,6 +20427,8 @@ CREATE INDEX index_ci_pipelines_on_project_id_and_source ON ci_pipelines USING b
CREATE INDEX index_ci_pipelines_on_project_id_and_status_and_config_source ON ci_pipelines USING btree (project_id, status, config_source);
+CREATE INDEX index_ci_pipelines_on_project_id_and_status_and_created_at ON ci_pipelines USING btree (project_id, status, created_at);
+
CREATE INDEX index_ci_pipelines_on_project_id_and_status_and_updated_at ON ci_pipelines USING btree (project_id, status, updated_at);
CREATE INDEX index_ci_pipelines_on_project_id_and_user_id_and_status_and_ref ON ci_pipelines USING btree (project_id, user_id, status, ref) WHERE (source <> 12);
@@ -20130,6 +20495,10 @@ CREATE INDEX index_ci_subscriptions_projects_on_upstream_project_id ON ci_subscr
CREATE UNIQUE INDEX index_ci_subscriptions_projects_unique_subscription ON ci_subscriptions_projects USING btree (downstream_project_id, upstream_project_id);
+CREATE INDEX index_ci_test_case_failures_on_build_id ON ci_test_case_failures USING btree (build_id);
+
+CREATE UNIQUE INDEX index_ci_test_cases_on_project_id_and_key_hash ON ci_test_cases USING btree (project_id, key_hash);
+
CREATE INDEX index_ci_trigger_requests_on_commit_id ON ci_trigger_requests USING btree (commit_id);
CREATE INDEX index_ci_trigger_requests_on_trigger_id_and_id ON ci_trigger_requests USING btree (trigger_id, id DESC);
@@ -20216,12 +20585,18 @@ CREATE INDEX index_container_expiration_policies_on_next_run_at_and_enabled ON c
CREATE INDEX index_container_repositories_on_project_id ON container_repositories USING btree (project_id);
+CREATE INDEX index_container_repositories_on_project_id_and_id ON container_repositories USING btree (project_id, id);
+
CREATE UNIQUE INDEX index_container_repositories_on_project_id_and_name ON container_repositories USING btree (project_id, name);
CREATE INDEX index_container_repository_on_name_trigram ON container_repositories USING gin (name gin_trgm_ops);
CREATE INDEX index_created_at_on_codeowner_approval_merge_request_rules ON approval_merge_request_rules USING btree (created_at) WHERE ((rule_type = 2) AND (section <> 'codeowners'::text));
+CREATE INDEX index_csv_issue_imports_on_project_id ON csv_issue_imports USING btree (project_id);
+
+CREATE INDEX index_csv_issue_imports_on_user_id ON csv_issue_imports USING btree (user_id);
+
CREATE UNIQUE INDEX index_custom_emoji_on_namespace_id_and_name ON custom_emoji USING btree (namespace_id, name);
CREATE UNIQUE INDEX index_daily_build_group_report_results_unique_columns ON ci_daily_build_group_report_results USING btree (project_id, ref_path, date, group_name);
@@ -20236,7 +20611,7 @@ CREATE INDEX index_dast_site_tokens_on_project_id ON dast_site_tokens USING btre
CREATE INDEX index_dast_site_validations_on_dast_site_token_id ON dast_site_validations USING btree (dast_site_token_id);
-CREATE INDEX index_dast_site_validations_on_url_base ON dast_site_validations USING btree (url_base);
+CREATE INDEX index_dast_site_validations_on_url_base_and_state ON dast_site_validations USING btree (url_base, state);
CREATE INDEX index_dast_sites_on_dast_site_validation_id ON dast_sites USING btree (dast_site_validation_id);
@@ -20302,6 +20677,8 @@ CREATE INDEX index_description_versions_on_merge_request_id ON description_versi
CREATE INDEX index_design_management_designs_issue_id_relative_position_id ON design_management_designs USING btree (issue_id, relative_position, id);
+CREATE UNIQUE INDEX index_design_management_designs_on_iid_and_project_id ON design_management_designs USING btree (project_id, iid);
+
CREATE UNIQUE INDEX index_design_management_designs_on_issue_id_and_filename ON design_management_designs USING btree (issue_id, filename);
CREATE INDEX index_design_management_designs_on_project_id ON design_management_designs USING btree (project_id);
@@ -20384,6 +20761,8 @@ CREATE INDEX index_epics_on_group_id ON epics USING btree (group_id);
CREATE UNIQUE INDEX index_epics_on_group_id_and_external_key ON epics USING btree (group_id, external_key) WHERE (external_key IS NOT NULL);
+CREATE UNIQUE INDEX index_epics_on_group_id_and_iid ON epics USING btree (group_id, iid);
+
CREATE INDEX index_epics_on_group_id_and_iid_varchar_pattern ON epics USING btree (group_id, ((iid)::character varying) varchar_pattern_ops);
CREATE INDEX index_epics_on_iid ON epics USING btree (iid);
@@ -20628,8 +21007,6 @@ CREATE UNIQUE INDEX index_issuable_severities_on_issue_id ON issuable_severities
CREATE UNIQUE INDEX index_issuable_slas_on_issue_id ON issuable_slas USING btree (issue_id);
-CREATE UNIQUE INDEX index_issue_assignees_on_issue_id_and_user_id ON issue_assignees USING btree (issue_id, user_id);
-
CREATE INDEX index_issue_assignees_on_user_id ON issue_assignees USING btree (user_id);
CREATE UNIQUE INDEX index_issue_email_participants_on_issue_id_and_email ON issue_email_participants USING btree (issue_id, email);
@@ -20670,6 +21047,10 @@ CREATE INDEX index_issues_on_milestone_id ON issues USING btree (milestone_id);
CREATE INDEX index_issues_on_moved_to_id ON issues USING btree (moved_to_id) WHERE (moved_to_id IS NOT NULL);
+CREATE INDEX index_issues_on_project_id_and_closed_at ON issues USING btree (project_id, closed_at);
+
+CREATE INDEX index_issues_on_project_id_and_created_at_issue_type_incident ON issues USING btree (project_id, created_at) WHERE (issue_type = 1);
+
CREATE UNIQUE INDEX index_issues_on_project_id_and_external_key ON issues USING btree (project_id, external_key) WHERE (external_key IS NOT NULL);
CREATE UNIQUE INDEX index_issues_on_project_id_and_iid ON issues USING btree (project_id, iid);
@@ -20684,8 +21065,6 @@ CREATE INDEX index_issues_on_updated_at ON issues USING btree (updated_at);
CREATE INDEX index_issues_on_updated_by_id ON issues USING btree (updated_by_id) WHERE (updated_by_id IS NOT NULL);
-CREATE INDEX index_issues_project_id_issue_type_incident ON issues USING btree (project_id) WHERE (issue_type = 1);
-
CREATE UNIQUE INDEX index_jira_connect_installations_on_client_key ON jira_connect_installations USING btree (client_key);
CREATE INDEX index_jira_connect_subscriptions_on_namespace_id ON jira_connect_subscriptions USING btree (namespace_id);
@@ -20786,14 +21165,12 @@ CREATE INDEX index_merge_request_assignees_on_user_id ON merge_request_assignees
CREATE INDEX index_merge_request_blocks_on_blocked_merge_request_id ON merge_request_blocks USING btree (blocked_merge_request_id);
-CREATE UNIQUE INDEX index_merge_request_diff_commits_on_mr_diff_id_and_order ON merge_request_diff_commits USING btree (merge_request_diff_id, relative_order);
+CREATE UNIQUE INDEX index_merge_request_cleanup_schedules_on_merge_request_id ON merge_request_cleanup_schedules USING btree (merge_request_id);
CREATE INDEX index_merge_request_diff_commits_on_sha ON merge_request_diff_commits USING btree (sha);
CREATE INDEX index_merge_request_diff_details_on_merge_request_diff_id ON merge_request_diff_details USING btree (merge_request_diff_id);
-CREATE UNIQUE INDEX index_merge_request_diff_files_on_mr_diff_id_and_order ON merge_request_diff_files USING btree (merge_request_diff_id, relative_order);
-
CREATE INDEX index_merge_request_diffs_by_id_partial ON merge_request_diffs USING btree (id) WHERE ((files_count > 0) AND ((NOT stored_externally) OR (stored_externally IS NULL)));
CREATE INDEX index_merge_request_diffs_on_external_diff_store ON merge_request_diffs USING btree (external_diff_store);
@@ -20816,8 +21193,6 @@ CREATE INDEX index_merge_request_metrics_on_pipeline_id ON merge_request_metrics
CREATE INDEX index_merge_request_metrics_on_target_project_id ON merge_request_metrics USING btree (target_project_id);
-CREATE INDEX index_merge_request_metrics_on_target_project_id_merged_at ON merge_request_metrics USING btree (target_project_id, merged_at);
-
CREATE UNIQUE INDEX index_merge_request_reviewers_on_merge_request_id_and_user_id ON merge_request_reviewers USING btree (merge_request_id, user_id);
CREATE INDEX index_merge_request_reviewers_on_user_id ON merge_request_reviewers USING btree (user_id);
@@ -20858,8 +21233,12 @@ CREATE UNIQUE INDEX index_merge_requests_on_target_project_id_and_iid ON merge_r
CREATE INDEX index_merge_requests_on_target_project_id_and_iid_and_state_id ON merge_requests USING btree (target_project_id, iid, state_id);
+CREATE INDEX index_merge_requests_on_target_project_id_and_iid_jira_title ON merge_requests USING btree (target_project_id, iid) WHERE ((title)::text ~ '[A-Z][A-Z_0-9]+-\d+'::text);
+
CREATE INDEX index_merge_requests_on_target_project_id_and_target_branch ON merge_requests USING btree (target_project_id, target_branch) WHERE ((state_id = 1) AND (merge_when_pipeline_succeeds = true));
+CREATE INDEX index_merge_requests_on_target_project_id_iid_jira_description ON merge_requests USING btree (target_project_id, iid) WHERE (description ~ '[A-Z][A-Z_0-9]+-\d+'::text);
+
CREATE INDEX index_merge_requests_on_title ON merge_requests USING btree (title);
CREATE INDEX index_merge_requests_on_title_trigram ON merge_requests USING gin (title gin_trgm_ops);
@@ -20896,14 +21275,16 @@ CREATE INDEX index_milestones_on_title ON milestones USING btree (title);
CREATE INDEX index_milestones_on_title_trigram ON milestones USING gin (title gin_trgm_ops);
-CREATE UNIQUE INDEX index_miletone_releases_on_milestone_and_release ON milestone_releases USING btree (milestone_id, release_id);
-
CREATE INDEX index_mirror_data_on_next_execution_and_retry_count ON project_mirror_data USING btree (next_execution_timestamp, retry_count);
CREATE UNIQUE INDEX index_mr_blocks_on_blocking_and_blocked_mr_ids ON merge_request_blocks USING btree (blocking_merge_request_id, blocked_merge_request_id);
+CREATE INDEX index_mr_cleanup_schedules_timestamps ON merge_request_cleanup_schedules USING btree (scheduled_at) WHERE (completed_at IS NULL);
+
CREATE UNIQUE INDEX index_mr_context_commits_on_merge_request_id_and_sha ON merge_request_context_commits USING btree (merge_request_id, sha);
+CREATE INDEX index_mr_metrics_on_target_project_id_merged_at_nulls_last ON merge_request_metrics USING btree (target_project_id, merged_at DESC NULLS LAST, id DESC);
+
CREATE UNIQUE INDEX index_namespace_aggregation_schedules_on_namespace_id ON namespace_aggregation_schedules USING btree (namespace_id);
CREATE UNIQUE INDEX index_namespace_root_storage_statistics_on_namespace_id ON namespace_root_storage_statistics USING btree (namespace_id);
@@ -20974,6 +21355,8 @@ CREATE INDEX index_notification_settings_on_user_id ON notification_settings USI
CREATE UNIQUE INDEX index_notifications_on_user_id_and_source_id_and_source_type ON notification_settings USING btree (user_id, source_id, source_type);
+CREATE INDEX index_oauth_access_grants_on_resource_owner_id ON oauth_access_grants USING btree (resource_owner_id, application_id, created_at);
+
CREATE UNIQUE INDEX index_oauth_access_grants_on_token ON oauth_access_grants USING btree (token);
CREATE INDEX index_oauth_access_tokens_on_application_id ON oauth_access_tokens USING btree (application_id);
@@ -21000,6 +21383,24 @@ CREATE UNIQUE INDEX index_on_instance_statistics_recorded_at_and_identifier ON a
CREATE INDEX index_on_label_links_all_columns ON label_links USING btree (target_id, label_id, target_type);
+CREATE INDEX index_on_namespaces_lower_name ON namespaces USING btree (lower((name)::text));
+
+CREATE INDEX index_on_namespaces_lower_path ON namespaces USING btree (lower((path)::text));
+
+CREATE INDEX index_on_projects_lower_path ON projects USING btree (lower((path)::text));
+
+CREATE INDEX index_on_routes_lower_path ON routes USING btree (lower((path)::text));
+
+CREATE UNIQUE INDEX index_on_segment_selections_group_id_segment_id ON analytics_devops_adoption_segment_selections USING btree (group_id, segment_id);
+
+CREATE UNIQUE INDEX index_on_segment_selections_project_id_segment_id ON analytics_devops_adoption_segment_selections USING btree (project_id, segment_id);
+
+CREATE INDEX index_on_segment_selections_segment_id ON analytics_devops_adoption_segment_selections USING btree (segment_id);
+
+CREATE INDEX index_on_users_lower_email ON users USING btree (lower((email)::text));
+
+CREATE INDEX index_on_users_lower_username ON users USING btree (lower((username)::text));
+
CREATE INDEX index_on_users_name_lower ON users USING btree (lower((name)::text));
CREATE INDEX index_open_project_tracker_data_on_service_id ON open_project_tracker_data USING btree (service_id);
@@ -21024,8 +21425,6 @@ CREATE UNIQUE INDEX index_ops_feature_flags_issues_on_feature_flag_id_and_issue_
CREATE UNIQUE INDEX index_ops_strategies_user_lists_on_strategy_id_and_user_list_id ON operations_strategies_user_lists USING btree (strategy_id, user_list_id);
-CREATE UNIQUE INDEX index_packages_build_infos_on_package_id ON packages_build_infos USING btree (package_id);
-
CREATE INDEX index_packages_build_infos_on_pipeline_id ON packages_build_infos USING btree (pipeline_id);
CREATE UNIQUE INDEX index_packages_composer_metadata_on_package_id_and_target_sha ON packages_composer_metadata USING btree (package_id, target_sha);
@@ -21046,6 +21445,10 @@ CREATE INDEX index_packages_nuget_dl_metadata_on_dependency_link_id ON packages_
CREATE UNIQUE INDEX index_packages_on_project_id_name_version_unique_when_generic ON packages_packages USING btree (project_id, name, version) WHERE (package_type = 7);
+CREATE INDEX index_packages_package_file_build_infos_on_package_file_id ON packages_package_file_build_infos USING btree (package_file_id);
+
+CREATE INDEX index_packages_package_file_build_infos_on_pipeline_id ON packages_package_file_build_infos USING btree (pipeline_id);
+
CREATE INDEX index_packages_package_files_on_file_store ON packages_package_files USING btree (file_store);
CREATE INDEX index_packages_package_files_on_package_id_and_file_name ON packages_package_files USING btree (package_id, file_name);
@@ -21140,8 +21543,6 @@ CREATE INDEX index_project_aliases_on_project_id ON project_aliases USING btree
CREATE INDEX index_project_authorizations_on_project_id ON project_authorizations USING btree (project_id);
-CREATE UNIQUE INDEX index_project_authorizations_on_user_id_project_id_access_level ON project_authorizations USING btree (user_id, project_id, access_level);
-
CREATE UNIQUE INDEX index_project_auto_devops_on_project_id ON project_auto_devops USING btree (project_id);
CREATE UNIQUE INDEX index_project_ci_cd_settings_on_project_id ON project_ci_cd_settings USING btree (project_id);
@@ -21194,8 +21595,6 @@ CREATE INDEX index_project_pages_metadata_on_artifacts_archive_id ON project_pag
CREATE INDEX index_project_pages_metadata_on_pages_deployment_id ON project_pages_metadata USING btree (pages_deployment_id);
-CREATE UNIQUE INDEX index_project_pages_metadata_on_project_id ON project_pages_metadata USING btree (project_id);
-
CREATE INDEX index_project_pages_metadata_on_project_id_and_deployed_is_true ON project_pages_metadata USING btree (project_id) WHERE (deployed = true);
CREATE UNIQUE INDEX index_project_repositories_on_disk_path ON project_repositories USING btree (disk_path);
@@ -21208,6 +21607,8 @@ CREATE UNIQUE INDEX index_project_repository_states_on_project_id ON project_rep
CREATE INDEX index_project_repository_storage_moves_on_project_id ON project_repository_storage_moves USING btree (project_id);
+CREATE INDEX index_project_settings_on_project_id_partially ON project_settings USING btree (project_id) WHERE (has_vulnerabilities IS TRUE);
+
CREATE UNIQUE INDEX index_project_settings_on_push_rule_id ON project_settings USING btree (push_rule_id);
CREATE INDEX index_project_statistics_on_namespace_id ON project_statistics USING btree (namespace_id);
@@ -21368,8 +21769,6 @@ CREATE INDEX index_protected_tags_on_project_id ON protected_tags USING btree (p
CREATE UNIQUE INDEX index_protected_tags_on_project_id_and_name ON protected_tags USING btree (project_id, name);
-CREATE UNIQUE INDEX index_push_event_payloads_on_event_id ON push_event_payloads USING btree (event_id);
-
CREATE INDEX index_push_rules_on_is_sample ON push_rules USING btree (is_sample) WHERE is_sample;
CREATE INDEX index_push_rules_on_project_id ON push_rules USING btree (project_id);
@@ -21394,8 +21793,6 @@ CREATE INDEX index_remote_mirrors_on_last_successful_update_at ON remote_mirrors
CREATE INDEX index_remote_mirrors_on_project_id ON remote_mirrors USING btree (project_id);
-CREATE UNIQUE INDEX index_repository_languages_on_project_and_languages_id ON repository_languages USING btree (project_id, programming_language_id);
-
CREATE INDEX index_required_code_owners_sections_on_protected_branch_id ON required_code_owners_sections USING btree (protected_branch_id);
CREATE INDEX index_requirements_management_test_reports_on_author_id ON requirements_management_test_reports USING btree (author_id);
@@ -21472,6 +21869,8 @@ CREATE INDEX index_reviews_on_merge_request_id ON reviews USING btree (merge_req
CREATE INDEX index_reviews_on_project_id ON reviews USING btree (project_id);
+CREATE INDEX index_route_on_name_trigram ON routes USING gin (name gin_trgm_ops);
+
CREATE UNIQUE INDEX index_routes_on_path ON routes USING btree (path);
CREATE INDEX index_routes_on_path_text_pattern_ops ON routes USING btree (path varchar_pattern_ops);
@@ -21502,6 +21901,8 @@ CREATE INDEX index_security_findings_on_project_fingerprint ON security_findings
CREATE INDEX index_security_findings_on_scan_id_and_deduplicated ON security_findings USING btree (scan_id, deduplicated);
+CREATE UNIQUE INDEX index_security_findings_on_scan_id_and_position ON security_findings USING btree (scan_id, "position");
+
CREATE INDEX index_security_findings_on_scanner_id ON security_findings USING btree (scanner_id);
CREATE INDEX index_security_findings_on_severity ON security_findings USING btree (severity);
@@ -21536,8 +21937,6 @@ CREATE UNIQUE INDEX index_services_on_type_and_template_partial ON services USIN
CREATE INDEX index_services_on_type_id_when_active_and_project_id_not_null ON services USING btree (type, id) WHERE ((active = true) AND (project_id IS NOT NULL));
-CREATE INDEX index_services_on_type_id_when_active_not_instance_not_template ON services USING btree (type, id) WHERE ((active = true) AND (instance = false) AND (template = false));
-
CREATE UNIQUE INDEX index_services_on_unique_group_id_and_type ON services USING btree (group_id, type);
CREATE UNIQUE INDEX index_shards_on_name ON shards USING btree (name);
@@ -21554,6 +21953,8 @@ CREATE UNIQUE INDEX index_snippet_repositories_on_disk_path ON snippet_repositor
CREATE INDEX index_snippet_repositories_on_shard_id ON snippet_repositories USING btree (shard_id);
+CREATE INDEX index_snippet_repository_storage_moves_on_snippet_id ON snippet_repository_storage_moves USING btree (snippet_id);
+
CREATE UNIQUE INDEX index_snippet_user_mentions_on_note_id ON snippet_user_mentions USING btree (note_id) WHERE (note_id IS NOT NULL);
CREATE INDEX index_snippets_on_author_id ON snippets USING btree (author_id);
@@ -21632,6 +22033,8 @@ CREATE INDEX index_term_agreements_on_term_id ON term_agreements USING btree (te
CREATE INDEX index_term_agreements_on_user_id ON term_agreements USING btree (user_id);
+CREATE INDEX index_terraform_state_versions_on_ci_build_id ON terraform_state_versions USING btree (ci_build_id);
+
CREATE INDEX index_terraform_state_versions_on_created_by_user_id ON terraform_state_versions USING btree (created_by_user_id);
CREATE UNIQUE INDEX index_terraform_state_versions_on_state_id_and_version ON terraform_state_versions USING btree (terraform_state_id, version);
@@ -21644,6 +22047,8 @@ CREATE UNIQUE INDEX index_terraform_states_on_project_id_and_name ON terraform_s
CREATE UNIQUE INDEX index_terraform_states_on_uuid ON terraform_states USING btree (uuid);
+CREATE UNIQUE INDEX index_test_case_failures_unique_columns ON ci_test_case_failures USING btree (test_case_id, failed_at DESC, build_id);
+
CREATE INDEX index_timelogs_on_issue_id ON timelogs USING btree (issue_id);
CREATE INDEX index_timelogs_on_merge_request_id ON timelogs USING btree (merge_request_id);
@@ -21708,8 +22113,6 @@ CREATE UNIQUE INDEX index_user_details_on_user_id ON user_details USING btree (u
CREATE INDEX index_user_highest_roles_on_user_id_and_highest_access_level ON user_highest_roles USING btree (user_id, highest_access_level);
-CREATE UNIQUE INDEX index_user_interacted_projects_on_project_id_and_user_id ON user_interacted_projects USING btree (project_id, user_id);
-
CREATE INDEX index_user_interacted_projects_on_user_id ON user_interacted_projects USING btree (user_id);
CREATE INDEX index_user_preferences_on_gitpod_enabled ON user_preferences USING btree (gitpod_enabled);
@@ -21838,6 +22241,8 @@ CREATE INDEX index_vulnerability_occurrences_for_issue_links_migration ON vulner
CREATE INDEX index_vulnerability_occurrences_on_primary_identifier_id ON vulnerability_occurrences USING btree (primary_identifier_id);
+CREATE INDEX index_vulnerability_occurrences_on_project_fingerprint ON vulnerability_occurrences USING btree (project_fingerprint);
+
CREATE INDEX index_vulnerability_occurrences_on_scanner_id ON vulnerability_occurrences USING btree (scanner_id);
CREATE UNIQUE INDEX index_vulnerability_occurrences_on_unique_keys ON vulnerability_occurrences USING btree (project_id, primary_identifier_id, location_fingerprint, scanner_id);
@@ -21904,10 +22309,6 @@ CREATE INDEX issue_id_issues_prometheus_alert_events_index ON issues_prometheus_
CREATE INDEX issue_id_issues_self_managed_rometheus_alert_events_index ON issues_self_managed_prometheus_alert_events USING btree (self_managed_prometheus_alert_event_id);
-CREATE UNIQUE INDEX issue_id_prometheus_alert_event_id_index ON issues_prometheus_alert_events USING btree (issue_id, prometheus_alert_event_id);
-
-CREATE UNIQUE INDEX issue_id_self_managed_prometheus_alert_event_id_index ON issues_self_managed_prometheus_alert_events USING btree (issue_id, self_managed_prometheus_alert_event_id);
-
CREATE UNIQUE INDEX issue_user_mentions_on_issue_id_and_note_id_index ON issue_user_mentions USING btree (issue_id, note_id);
CREATE UNIQUE INDEX issue_user_mentions_on_issue_id_index ON issue_user_mentions USING btree (issue_id) WHERE (note_id IS NULL);
@@ -21920,6 +22321,8 @@ CREATE UNIQUE INDEX merge_request_user_mentions_on_mr_id_and_note_id_index ON me
CREATE UNIQUE INDEX merge_request_user_mentions_on_mr_id_index ON merge_request_user_mentions USING btree (merge_request_id) WHERE (note_id IS NULL);
+CREATE INDEX merge_requests_state_id_temp_index ON merge_requests USING btree (id) WHERE (state_id = ANY (ARRAY[2, 3]));
+
CREATE INDEX note_mentions_temp_index ON notes USING btree (id, noteable_type) WHERE (note ~~ '%@%'::text);
CREATE UNIQUE INDEX one_canonical_wiki_page_slug_per_metadata ON wiki_page_slugs USING btree (wiki_page_meta_id) WHERE (canonical = true);
@@ -21946,6 +22349,8 @@ CREATE UNIQUE INDEX snippet_user_mentions_on_snippet_id_index ON snippet_user_me
CREATE UNIQUE INDEX taggings_idx ON taggings USING btree (tag_id, taggable_id, taggable_type, context, tagger_id, tagger_type);
+CREATE INDEX temporary_index_vulnerabilities_on_id ON vulnerabilities USING btree (id) WHERE ((state = 2) AND ((dismissed_at IS NULL) OR (dismissed_by_id IS NULL)));
+
CREATE UNIQUE INDEX term_agreements_unique_index ON term_agreements USING btree (user_id, term_id);
CREATE INDEX terraform_state_versions_verification_checksum_partial ON terraform_state_versions USING btree (verification_checksum) WHERE (verification_checksum IS NOT NULL);
@@ -21964,8 +22369,6 @@ CREATE INDEX tmp_index_for_email_unconfirmation_migration ON emails USING btree
CREATE UNIQUE INDEX unique_merge_request_metrics_by_merge_request_id ON merge_request_metrics USING btree (merge_request_id);
-CREATE UNIQUE INDEX users_security_dashboard_projects_unique_index ON users_security_dashboard_projects USING btree (project_id, user_id);
-
CREATE UNIQUE INDEX vulnerability_feedback_unique_idx ON vulnerability_feedback USING btree (project_id, category, feedback_type, project_fingerprint);
CREATE UNIQUE INDEX vulnerability_occurrence_pipelines_on_unique_keys ON vulnerability_occurrence_pipelines USING btree (occurrence_id, pipeline_id);
@@ -22240,6 +22643,12 @@ ALTER TABLE ONLY clusters_applications_runners
ALTER TABLE ONLY design_management_designs_versions
ADD CONSTRAINT fk_03c671965c FOREIGN KEY (design_id) REFERENCES design_management_designs(id) ON DELETE CASCADE;
+ALTER TABLE ONLY terraform_state_versions
+ ADD CONSTRAINT fk_04b91e4a9f FOREIGN KEY (ci_build_id) REFERENCES ci_builds(id) ON DELETE SET NULL;
+
+ALTER TABLE ONLY ci_test_cases
+ ADD CONSTRAINT fk_0526c30ded FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY issues
ADD CONSTRAINT fk_05f1e72feb FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE SET NULL;
@@ -22423,6 +22832,9 @@ ALTER TABLE ONLY deploy_keys_projects
ALTER TABLE ONLY issue_assignees
ADD CONSTRAINT fk_5e0c8d9154 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
+ALTER TABLE ONLY csv_issue_imports
+ ADD CONSTRAINT fk_5e1572387c FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY project_access_tokens
ADD CONSTRAINT fk_5f7e8450e1 FOREIGN KEY (personal_access_token_id) REFERENCES personal_access_tokens(id) ON DELETE CASCADE;
@@ -22750,6 +23162,9 @@ ALTER TABLE ONLY ci_sources_pipelines
ALTER TABLE ONLY geo_event_log
ADD CONSTRAINT fk_d5af95fcd9 FOREIGN KEY (lfs_object_deleted_event_id) REFERENCES geo_lfs_object_deleted_events(id) ON DELETE CASCADE;
+ALTER TABLE ONLY ci_test_case_failures
+ ADD CONSTRAINT fk_d69404d827 FOREIGN KEY (build_id) REFERENCES ci_builds(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY lists
ADD CONSTRAINT fk_d6cf4279f7 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
@@ -22774,6 +23189,9 @@ ALTER TABLE ONLY project_group_links
ALTER TABLE ONLY epics
ADD CONSTRAINT fk_dccd3f98fc FOREIGN KEY (assignee_id) REFERENCES users(id) ON DELETE SET NULL;
+ALTER TABLE ONLY analytics_devops_adoption_segment_selections
+ ADD CONSTRAINT fk_ded7fe0344 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY issues
ADD CONSTRAINT fk_df75a7c8b8 FOREIGN KEY (promoted_to_epic_id) REFERENCES epics(id) ON DELETE SET NULL;
@@ -22795,6 +23213,9 @@ ALTER TABLE ONLY merge_requests
ALTER TABLE ONLY issue_links
ADD CONSTRAINT fk_e71bb44f1f FOREIGN KEY (target_id) REFERENCES issues(id) ON DELETE CASCADE;
+ALTER TABLE ONLY csv_issue_imports
+ ADD CONSTRAINT fk_e71c0ae362 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY namespaces
ADD CONSTRAINT fk_e7a0b20a6b FOREIGN KEY (custom_project_templates_group_id) REFERENCES namespaces(id) ON DELETE SET NULL;
@@ -22834,6 +23255,9 @@ ALTER TABLE ONLY clusters
ALTER TABLE ONLY epics
ADD CONSTRAINT fk_f081aa4489 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
+ALTER TABLE ONLY analytics_devops_adoption_segment_selections
+ ADD CONSTRAINT fk_f1472b95f3 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY boards
ADD CONSTRAINT fk_f15266b5f9 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
@@ -22903,6 +23327,9 @@ ALTER TABLE ONLY ip_restrictions
ALTER TABLE ONLY terraform_state_versions
ADD CONSTRAINT fk_rails_04f176e239 FOREIGN KEY (terraform_state_id) REFERENCES terraform_states(id) ON DELETE CASCADE;
+ALTER TABLE ONLY analytics_devops_adoption_segment_selections
+ ADD CONSTRAINT fk_rails_053f00a9da FOREIGN KEY (segment_id) REFERENCES analytics_devops_adoption_segments(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY ci_build_report_results
ADD CONSTRAINT fk_rails_056d298d48 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
@@ -23182,6 +23609,9 @@ ALTER TABLE ONLY snippet_user_mentions
ALTER TABLE ONLY clusters_applications_helm
ADD CONSTRAINT fk_rails_3e2b1c06bc FOREIGN KEY (cluster_id) REFERENCES clusters(id) ON DELETE CASCADE;
+ALTER TABLE ONLY packages_package_file_build_infos
+ ADD CONSTRAINT fk_rails_3e3f630188 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL;
+
ALTER TABLE ONLY epic_user_mentions
ADD CONSTRAINT fk_rails_3eaf4d88cc FOREIGN KEY (epic_id) REFERENCES epics(id) ON DELETE CASCADE;
@@ -23251,6 +23681,9 @@ ALTER TABLE ONLY ci_pipeline_artifacts
ALTER TABLE ONLY group_deletion_schedules
ADD CONSTRAINT fk_rails_4b8c694a6c FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
+ALTER TABLE ONLY snippet_repository_storage_moves
+ ADD CONSTRAINT fk_rails_4b950f5b94 FOREIGN KEY (snippet_id) REFERENCES snippets(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY design_management_designs
ADD CONSTRAINT fk_rails_4bb1073360 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
@@ -23563,6 +23996,9 @@ ALTER TABLE ONLY merge_request_diff_details
ALTER TABLE ONLY clusters_applications_crossplane
ADD CONSTRAINT fk_rails_87186702df FOREIGN KEY (cluster_id) REFERENCES clusters(id) ON DELETE CASCADE;
+ALTER TABLE ONLY packages_package_file_build_infos
+ ADD CONSTRAINT fk_rails_871ca3ae21 FOREIGN KEY (package_file_id) REFERENCES packages_package_files(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY ci_runner_namespaces
ADD CONSTRAINT fk_rails_8767676b7a FOREIGN KEY (runner_id) REFERENCES ci_runners(id) ON DELETE CASCADE;
@@ -23632,6 +24068,9 @@ ALTER TABLE ONLY project_error_tracking_settings
ALTER TABLE ONLY list_user_preferences
ADD CONSTRAINT fk_rails_916d72cafd FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
+ALTER TABLE ONLY merge_request_cleanup_schedules
+ ADD CONSTRAINT fk_rails_92dd0e705c FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY board_labels
ADD CONSTRAINT fk_rails_9374a16edd FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE;
@@ -23764,6 +24203,9 @@ ALTER TABLE ONLY analytics_cycle_analytics_group_stages
ALTER TABLE ONLY metrics_dashboard_annotations
ADD CONSTRAINT fk_rails_aeb11a7643 FOREIGN KEY (environment_id) REFERENCES environments(id) ON DELETE CASCADE;
+ALTER TABLE ONLY bulk_import_trackers
+ ADD CONSTRAINT fk_rails_aed566d3f3 FOREIGN KEY (bulk_import_entity_id) REFERENCES bulk_import_entities(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY pool_repositories
ADD CONSTRAINT fk_rails_af3f8c5d62 FOREIGN KEY (shard_id) REFERENCES shards(id) ON DELETE RESTRICT;
@@ -23914,6 +24356,9 @@ ALTER TABLE ONLY gpg_signatures
ALTER TABLE ONLY board_group_recent_visits
ADD CONSTRAINT fk_rails_ca04c38720 FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE;
+ALTER TABLE ONLY vulnerability_finding_links
+ ADD CONSTRAINT fk_rails_cbdfde27ce FOREIGN KEY (vulnerability_occurrence_id) REFERENCES vulnerability_occurrences(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY issues_self_managed_prometheus_alert_events
ADD CONSTRAINT fk_rails_cc5d88bbb0 FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE;
@@ -24040,6 +24485,9 @@ ALTER TABLE ONLY merge_request_blocks
ALTER TABLE ONLY protected_branch_unprotect_access_levels
ADD CONSTRAINT fk_rails_e9eb8dc025 FOREIGN KEY (protected_branch_id) REFERENCES protected_branches(id) ON DELETE CASCADE;
+ALTER TABLE ONLY ci_test_case_failures
+ ADD CONSTRAINT fk_rails_eab6349715 FOREIGN KEY (test_case_id) REFERENCES ci_test_cases(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY alert_management_alert_user_mentions
ADD CONSTRAINT fk_rails_eb2de0cdef FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE;