diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-18 09:45:46 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-18 09:45:46 +0000 |
commit | a7b3560714b4d9cc4ab32dffcd1f74a284b93580 (patch) | |
tree | 7452bd5c3545c2fa67a28aa013835fb4fa071baf /db | |
parent | ee9173579ae56a3dbfe5afe9f9410c65bb327ca7 (diff) | |
download | gitlab-ce-a7b3560714b4d9cc4ab32dffcd1f74a284b93580.tar.gz |
Add latest changes from gitlab-org/gitlab@14-8-stable-eev14.8.0-rc42
Diffstat (limited to 'db')
215 files changed, 2476 insertions, 160 deletions
diff --git a/db/migrate/20210316171009_create_packages_helm_file_metadata.rb b/db/migrate/20210316171009_create_packages_helm_file_metadata.rb index f5a9c5f1146..47a9b808e63 100644 --- a/db/migrate/20210316171009_create_packages_helm_file_metadata.rb +++ b/db/migrate/20210316171009_create_packages_helm_file_metadata.rb @@ -5,7 +5,7 @@ class CreatePackagesHelmFileMetadata < ActiveRecord::Migration[6.0] DOWNTIME = false - def change + def up create_table_with_constraints :packages_helm_file_metadata, id: false do |t| t.timestamps_with_timezone t.references :package_file, primary_key: true, index: false, default: nil, null: false, foreign_key: { to_table: :packages_package_files, on_delete: :cascade }, type: :bigint @@ -17,4 +17,10 @@ class CreatePackagesHelmFileMetadata < ActiveRecord::Migration[6.0] t.index :channel end end + + def down + with_lock_retries do + drop_table :packages_helm_file_metadata + end + end end diff --git a/db/migrate/20210504153354_create_clusters_integration_elasticstack.rb b/db/migrate/20210504153354_create_clusters_integration_elasticstack.rb index 5868325e701..79680821060 100644 --- a/db/migrate/20210504153354_create_clusters_integration_elasticstack.rb +++ b/db/migrate/20210504153354_create_clusters_integration_elasticstack.rb @@ -3,7 +3,7 @@ class CreateClustersIntegrationElasticstack < ActiveRecord::Migration[6.0] include Gitlab::Database::MigrationHelpers - def change + def up create_table_with_constraints :clusters_integration_elasticstack, id: false do |t| t.timestamps_with_timezone null: false t.references :cluster, primary_key: true, default: nil, index: false, foreign_key: { on_delete: :cascade } @@ -12,4 +12,10 @@ class CreateClustersIntegrationElasticstack < ActiveRecord::Migration[6.0] t.text_limit :chart_version, 10 end end + + def down + with_lock_retries do + drop_table :clusters_integration_elasticstack + end + end end diff --git a/db/migrate/20210628154900_create_detached_partitions_table.rb b/db/migrate/20210628154900_create_detached_partitions_table.rb index 05290f4dfb9..cf31d71835a 100644 --- a/db/migrate/20210628154900_create_detached_partitions_table.rb +++ b/db/migrate/20210628154900_create_detached_partitions_table.rb @@ -3,7 +3,7 @@ class CreateDetachedPartitionsTable < ActiveRecord::Migration[6.1] include Gitlab::Database::MigrationHelpers - def change + def up create_table_with_constraints :detached_partitions do |t| t.timestamps_with_timezone null: false t.datetime_with_timezone :drop_after, null: false @@ -14,4 +14,10 @@ class CreateDetachedPartitionsTable < ActiveRecord::Migration[6.1] t.text_limit :table_name, 63 end end + + def down + with_lock_retries do + drop_table :detached_partitions + end + end end diff --git a/db/migrate/20210720140841_create_postgres_async_indexes_table.rb b/db/migrate/20210720140841_create_postgres_async_indexes_table.rb index 707367e5f6c..99025149840 100644 --- a/db/migrate/20210720140841_create_postgres_async_indexes_table.rb +++ b/db/migrate/20210720140841_create_postgres_async_indexes_table.rb @@ -3,7 +3,7 @@ class CreatePostgresAsyncIndexesTable < ActiveRecord::Migration[6.1] include Gitlab::Database::MigrationHelpers - def change + def up create_table_with_constraints :postgres_async_indexes do |t| t.timestamps_with_timezone null: false @@ -18,4 +18,10 @@ class CreatePostgresAsyncIndexesTable < ActiveRecord::Migration[6.1] t.index :name, unique: true end end + + def down + with_lock_retries do + drop_table :postgres_async_indexes + end + end end diff --git a/db/migrate/20210729081351_create_topics.rb b/db/migrate/20210729081351_create_topics.rb index c6fdc6bb98a..13ed2dc7ccc 100644 --- a/db/migrate/20210729081351_create_topics.rb +++ b/db/migrate/20210729081351_create_topics.rb @@ -3,7 +3,7 @@ class CreateTopics < ActiveRecord::Migration[6.1] include Gitlab::Database::MigrationHelpers - def change + def up create_table_with_constraints :topics do |t| t.text :name, null: false t.text_limit :name, 255 @@ -13,4 +13,10 @@ class CreateTopics < ActiveRecord::Migration[6.1] t.timestamps_with_timezone end end + + def down + with_lock_retries do + drop_table :topics + end + end end diff --git a/db/migrate/20210811193033_add_unique_index_to_vulnerability_finding_links.rb b/db/migrate/20210811193033_add_unique_index_to_vulnerability_finding_links.rb index 1bcee89ae57..cf51bca630a 100644 --- a/db/migrate/20210811193033_add_unique_index_to_vulnerability_finding_links.rb +++ b/db/migrate/20210811193033_add_unique_index_to_vulnerability_finding_links.rb @@ -1,18 +1,14 @@ # frozen_string_literal: true class AddUniqueIndexToVulnerabilityFindingLinks < Gitlab::Database::Migration[1.0] - disable_ddl_transaction! - - NAME_URL_INDEX_NAME = 'finding_link_name_url_idx' - URL_INDEX_NAME = 'finding_link_url_idx' + # This migration has been moved to db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb + # Previously, this was causing an bug where there was a conflict between the table cleanup and the index creation. def up - add_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :name, :url], unique: true, name: NAME_URL_INDEX_NAME - add_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :url], unique: true, where: 'name is null', name: URL_INDEX_NAME + # no op end def down - remove_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :name, :url], name: NAME_URL_INDEX_NAME - remove_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :url], name: URL_INDEX_NAME + # no op end end diff --git a/db/migrate/20211119111006_create_job_artifact_states.rb b/db/migrate/20211119111006_create_job_artifact_states.rb new file mode 100644 index 00000000000..44dffed58ee --- /dev/null +++ b/db/migrate/20211119111006_create_job_artifact_states.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class CreateJobArtifactStates < Gitlab::Database::Migration[1.0] + VERIFICATION_STATE_INDEX_NAME = "index_job_artifact_states_on_verification_state" + PENDING_VERIFICATION_INDEX_NAME = "index_job_artifact_states_pending_verification" + FAILED_VERIFICATION_INDEX_NAME = "index_job_artifact_states_failed_verification" + NEEDS_VERIFICATION_INDEX_NAME = "index_job_artifact_states_needs_verification" + + enable_lock_retries! + + def up + create_table :ci_job_artifact_states, id: false do |t| + t.datetime_with_timezone :verification_started_at + t.datetime_with_timezone :verification_retry_at + t.datetime_with_timezone :verified_at + t.references :job_artifact, primary_key: true, null: false, foreign_key: { on_delete: :cascade, to_table: :ci_job_artifacts } + t.integer :verification_state, default: 0, limit: 2, null: false + t.integer :verification_retry_count, limit: 2 + t.binary :verification_checksum, using: 'verification_checksum::bytea' + t.text :verification_failure, limit: 255 + + t.index :verification_state, name: VERIFICATION_STATE_INDEX_NAME + t.index :verified_at, where: "(verification_state = 0)", order: { verified_at: 'ASC NULLS FIRST' }, name: PENDING_VERIFICATION_INDEX_NAME + t.index :verification_retry_at, where: "(verification_state = 3)", order: { verification_retry_at: 'ASC NULLS FIRST' }, name: FAILED_VERIFICATION_INDEX_NAME + t.index :verification_state, where: "(verification_state = 0 OR verification_state = 3)", name: NEEDS_VERIFICATION_INDEX_NAME + end + end + + def down + drop_table :ci_job_artifact_states + end +end diff --git a/db/migrate/20211122103051_add_line_code_to_draft_notes.rb b/db/migrate/20211122103051_add_line_code_to_draft_notes.rb new file mode 100644 index 00000000000..c78b75f3a33 --- /dev/null +++ b/db/migrate/20211122103051_add_line_code_to_draft_notes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddLineCodeToDraftNotes < Gitlab::Database::Migration[1.0] + # rubocop:disable Migration/AddLimitToTextColumns + # limit is added in db/migrate/20211124095704_add_draft_notes_line_code_text_limit.rb + def change + add_column :draft_notes, :line_code, :text + end + # rubocop:enable Migration/AddLimitToTextColumns +end diff --git a/db/migrate/20211123135255_create_batched_background_migration_job_transition_logs.rb b/db/migrate/20211123135255_create_batched_background_migration_job_transition_logs.rb new file mode 100644 index 00000000000..280626c5d3b --- /dev/null +++ b/db/migrate/20211123135255_create_batched_background_migration_job_transition_logs.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +class CreateBatchedBackgroundMigrationJobTransitionLogs < Gitlab::Database::Migration[1.0] + include Gitlab::Database::PartitioningMigrationHelpers + + def up + execute(<<~SQL) + CREATE TABLE batched_background_migration_job_transition_logs ( + id bigserial NOT NULL, + batched_background_migration_job_id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + previous_status smallint NOT NULL, + next_status smallint NOT NULL, + exception_class text, + exception_message text, + CONSTRAINT check_50e580811a CHECK ((char_length(exception_message) <= 1000)), + CONSTRAINT check_76e202c37a CHECK ((char_length(exception_class) <= 100)), + PRIMARY KEY (id, created_at) + ) PARTITION BY RANGE (created_at); + + CREATE INDEX i_batched_background_migration_job_transition_logs_on_job_id + ON batched_background_migration_job_transition_logs USING btree (batched_background_migration_job_id); + + ALTER TABLE batched_background_migration_job_transition_logs ADD CONSTRAINT fk_rails_b7523a175b + FOREIGN KEY (batched_background_migration_job_id) REFERENCES batched_background_migration_jobs(id) ON DELETE CASCADE; + SQL + + min_date = Date.today + max_date = Date.today + 6.months + + create_daterange_partitions('batched_background_migration_job_transition_logs', 'created_at', min_date, max_date) + end + + def down + drop_table :batched_background_migration_job_transition_logs + end +end diff --git a/db/migrate/20211124095704_add_draft_notes_line_code_text_limit.rb b/db/migrate/20211124095704_add_draft_notes_line_code_text_limit.rb new file mode 100644 index 00000000000..b3567d6b873 --- /dev/null +++ b/db/migrate/20211124095704_add_draft_notes_line_code_text_limit.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddDraftNotesLineCodeTextLimit < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + add_text_limit :draft_notes, :line_code, 255 + end + + def down + remove_text_limit :draft_notes, :line_code + end +end diff --git a/db/migrate/20220105082217_add_verification_token_to_external_ae_destinations.rb b/db/migrate/20220105082217_add_verification_token_to_external_ae_destinations.rb new file mode 100644 index 00000000000..046a628b8ae --- /dev/null +++ b/db/migrate/20220105082217_add_verification_token_to_external_ae_destinations.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddVerificationTokenToExternalAeDestinations < Gitlab::Database::Migration[1.0] + def up + # rubocop:disable Migration/AddLimitToTextColumns + add_column :audit_events_external_audit_event_destinations, :verification_token, :text + # rubocop:enable Migration/AddLimitToTextColumns + end + + def down + remove_column :audit_events_external_audit_event_destinations, :verification_token + end +end diff --git a/db/migrate/20220106111958_add_insert_or_update_vulnerability_reads_trigger.rb b/db/migrate/20220106111958_add_insert_or_update_vulnerability_reads_trigger.rb new file mode 100644 index 00000000000..0049f4e00a2 --- /dev/null +++ b/db/migrate/20220106111958_add_insert_or_update_vulnerability_reads_trigger.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +class AddInsertOrUpdateVulnerabilityReadsTrigger < Gitlab::Database::Migration[1.0] + include Gitlab::Database::SchemaHelpers + + FUNCTION_NAME = 'insert_or_update_vulnerability_reads' + TRIGGER_NAME = 'trigger_insert_or_update_vulnerability_reads_from_occurrences' + + def up + execute(<<~SQL) + CREATE OR REPLACE FUNCTION #{FUNCTION_NAME}() + RETURNS TRIGGER + LANGUAGE plpgsql + AS $$ + DECLARE + severity smallint; + state smallint; + report_type smallint; + resolved_on_default_branch boolean; + BEGIN + IF (NEW.vulnerability_id IS NULL AND (TG_OP = 'INSERT' OR TG_OP = 'UPDATE')) THEN + RETURN NULL; + END IF; + + IF (TG_OP = 'UPDATE' AND OLD.vulnerability_id IS NOT NULL AND NEW.vulnerability_id IS NOT NULL) THEN + RETURN NULL; + END IF; + + SELECT + vulnerabilities.severity, vulnerabilities.state, vulnerabilities.report_type, vulnerabilities.resolved_on_default_branch + INTO + severity, state, report_type, resolved_on_default_branch + FROM + vulnerabilities + WHERE + vulnerabilities.id = NEW.vulnerability_id; + + INSERT INTO vulnerability_reads (vulnerability_id, project_id, scanner_id, report_type, severity, state, resolved_on_default_branch, uuid, location_image, cluster_agent_id) + VALUES (NEW.vulnerability_id, NEW.project_id, NEW.scanner_id, report_type, severity, state, resolved_on_default_branch, NEW.uuid::uuid, NEW.location->>'image', NEW.location->'kubernetes_resource'->>'agent_id') + ON CONFLICT(vulnerability_id) DO NOTHING; + RETURN NULL; + END + $$; + SQL + + execute(<<~SQL) + CREATE TRIGGER #{TRIGGER_NAME} + AFTER INSERT OR UPDATE ON vulnerability_occurrences + FOR EACH ROW + EXECUTE PROCEDURE #{FUNCTION_NAME}(); + SQL + end + + def down + drop_trigger(:vulnerability_occurrences, TRIGGER_NAME) + drop_function(FUNCTION_NAME) + end +end diff --git a/db/migrate/20220106112043_add_update_vulnerability_reads_trigger.rb b/db/migrate/20220106112043_add_update_vulnerability_reads_trigger.rb new file mode 100644 index 00000000000..940ec638924 --- /dev/null +++ b/db/migrate/20220106112043_add_update_vulnerability_reads_trigger.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class AddUpdateVulnerabilityReadsTrigger < Gitlab::Database::Migration[1.0] + include Gitlab::Database::SchemaHelpers + + TRIGGER_NAME = 'trigger_update_vulnerability_reads_on_vulnerability_update' + FUNCTION_NAME = 'update_vulnerability_reads_from_vulnerability' + + def up + create_trigger_function(FUNCTION_NAME, replace: true) do + <<~SQL + UPDATE + vulnerability_reads + SET + severity = NEW.severity, + state = NEW.state, + resolved_on_default_branch = NEW.resolved_on_default_branch + WHERE vulnerability_id = NEW.id; + RETURN NULL; + SQL + end + + execute(<<~SQL) + CREATE TRIGGER #{TRIGGER_NAME} + AFTER UPDATE ON vulnerabilities + FOR EACH ROW + WHEN ( + OLD.severity IS DISTINCT FROM NEW.severity OR + OLD.state IS DISTINCT FROM NEW.state OR + OLD.resolved_on_default_branch IS DISTINCT FROM NEW.resolved_on_default_branch + ) + EXECUTE PROCEDURE #{FUNCTION_NAME}(); + SQL + end + + def down + drop_trigger(:vulnerabilities, TRIGGER_NAME) + drop_function(FUNCTION_NAME) + end +end diff --git a/db/migrate/20220106112085_add_update_vulnerability_reads_location_trigger.rb b/db/migrate/20220106112085_add_update_vulnerability_reads_location_trigger.rb new file mode 100644 index 00000000000..a863fe8b7b8 --- /dev/null +++ b/db/migrate/20220106112085_add_update_vulnerability_reads_location_trigger.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +class AddUpdateVulnerabilityReadsLocationTrigger < Gitlab::Database::Migration[1.0] + include Gitlab::Database::SchemaHelpers + + TRIGGER_NAME = 'trigger_update_location_on_vulnerability_occurrences_update' + FUNCTION_NAME = 'update_location_from_vulnerability_occurrences' + + def up + create_trigger_function(FUNCTION_NAME, replace: true) do + <<~SQL + UPDATE + vulnerability_reads + SET + location_image = NEW.location->>'image', + cluster_agent_id = NEW.location->'kubernetes_resource'->>'agent_id' + WHERE + vulnerability_id = NEW.vulnerability_id; + RETURN NULL; + SQL + end + + execute(<<~SQL) + CREATE TRIGGER #{TRIGGER_NAME} + AFTER UPDATE ON vulnerability_occurrences + FOR EACH ROW + WHEN ( + NEW.report_type IN (2, 7) AND ( + OLD.location->>'image' IS DISTINCT FROM NEW.location->>'image' OR + OLD.location->'kubernetes_resource'->>'agent_id' IS DISTINCT FROM NEW.location->'kubernetes_resource'->>'agent_id' + ) + ) + EXECUTE PROCEDURE #{FUNCTION_NAME}(); + SQL + end + + def down + drop_trigger(:vulnerability_occurrences, TRIGGER_NAME) + drop_function(FUNCTION_NAME) + end +end diff --git a/db/migrate/20220106163326_add_has_issues_on_vulnerability_reads_trigger.rb b/db/migrate/20220106163326_add_has_issues_on_vulnerability_reads_trigger.rb new file mode 100644 index 00000000000..b3023a1f915 --- /dev/null +++ b/db/migrate/20220106163326_add_has_issues_on_vulnerability_reads_trigger.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +class AddHasIssuesOnVulnerabilityReadsTrigger < Gitlab::Database::Migration[1.0] + include Gitlab::Database::SchemaHelpers + + TRIGGER_ON_INSERT = 'trigger_update_has_issues_on_vulnerability_issue_links_update' + INSERT_FUNCTION_NAME = 'set_has_issues_on_vulnerability_reads' + + TRIGGER_ON_DELETE = 'trigger_update_has_issues_on_vulnerability_issue_links_delete' + DELETE_FUNCTION_NAME = 'unset_has_issues_on_vulnerability_reads' + + def up + create_trigger_function(INSERT_FUNCTION_NAME, replace: true) do + <<~SQL + UPDATE + vulnerability_reads + SET + has_issues = true + WHERE + vulnerability_id = NEW.vulnerability_id AND has_issues IS FALSE; + RETURN NULL; + SQL + end + + execute(<<~SQL) + CREATE OR REPLACE FUNCTION #{DELETE_FUNCTION_NAME}() + RETURNS TRIGGER + LANGUAGE plpgsql + AS $$ + DECLARE + has_issue_links integer; + BEGIN + PERFORM 1 + FROM + vulnerability_reads + WHERE + vulnerability_id = OLD.vulnerability_id + FOR UPDATE; + + SELECT 1 INTO has_issue_links FROM vulnerability_issue_links WHERE vulnerability_id = OLD.vulnerability_id LIMIT 1; + + IF (has_issue_links = 1) THEN + RETURN NULL; + END IF; + + UPDATE + vulnerability_reads + SET + has_issues = false + WHERE + vulnerability_id = OLD.vulnerability_id; + + RETURN NULL; + END + $$; + SQL + + execute(<<~SQL) + CREATE TRIGGER #{TRIGGER_ON_INSERT} + AFTER INSERT ON vulnerability_issue_links + FOR EACH ROW + EXECUTE FUNCTION #{INSERT_FUNCTION_NAME}(); + SQL + + execute(<<~SQL) + CREATE TRIGGER #{TRIGGER_ON_DELETE} + AFTER DELETE ON vulnerability_issue_links + FOR EACH ROW + EXECUTE FUNCTION #{DELETE_FUNCTION_NAME}(); + SQL + end + + def down + drop_trigger(:vulnerability_issue_links, TRIGGER_ON_INSERT) + drop_function(INSERT_FUNCTION_NAME) + drop_trigger(:vulnerability_issue_links, TRIGGER_ON_DELETE) + drop_function(DELETE_FUNCTION_NAME) + end +end diff --git a/db/migrate/20220111154950_add_token_expires_at_to_ci_runners.rb b/db/migrate/20220111154950_add_token_expires_at_to_ci_runners.rb new file mode 100644 index 00000000000..b4d7c63d24b --- /dev/null +++ b/db/migrate/20220111154950_add_token_expires_at_to_ci_runners.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddTokenExpiresAtToCiRunners < Gitlab::Database::Migration[1.0] + def change + add_column :ci_runners, :token_expires_at, :datetime_with_timezone + end +end diff --git a/db/migrate/20220111154951_add_index_to_ci_runners_token_expires_at.rb b/db/migrate/20220111154951_add_index_to_ci_runners_token_expires_at.rb new file mode 100644 index 00000000000..53623198f51 --- /dev/null +++ b/db/migrate/20220111154951_add_index_to_ci_runners_token_expires_at.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddIndexToCiRunnersTokenExpiresAt < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + add_concurrent_index :ci_runners, [:token_expires_at, :id], order: { token_expires_at: :asc, id: :desc }, name: 'index_ci_runners_on_token_expires_at_and_id_desc' + add_concurrent_index :ci_runners, [:token_expires_at, :id], order: { token_expires_at: :desc, id: :desc }, name: 'index_ci_runners_on_token_expires_at_desc_and_id_desc' + end + + def down + remove_concurrent_index_by_name :ci_runners, 'index_ci_runners_on_token_expires_at_desc_and_id_desc' + remove_concurrent_index_by_name :ci_runners, 'index_ci_runners_on_token_expires_at_and_id_desc' + end +end diff --git a/db/migrate/20220117082611_add_text_limit_to_exad_verification_tokens.rb b/db/migrate/20220117082611_add_text_limit_to_exad_verification_tokens.rb new file mode 100644 index 00000000000..9978e87a1e3 --- /dev/null +++ b/db/migrate/20220117082611_add_text_limit_to_exad_verification_tokens.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddTextLimitToExadVerificationTokens < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + add_text_limit :audit_events_external_audit_event_destinations, :verification_token, 24 + end + + def down + remove_text_limit :audit_events_external_audit_event_destinations, :verification_token + end +end diff --git a/db/migrate/20220118015633_add_url_text_to_issuable_metric_images.rb b/db/migrate/20220118015633_add_url_text_to_issuable_metric_images.rb new file mode 100644 index 00000000000..55d820c1256 --- /dev/null +++ b/db/migrate/20220118015633_add_url_text_to_issuable_metric_images.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddUrlTextToIssuableMetricImages < Gitlab::Database::Migration[1.0] + # rubocop:disable Migration/AddLimitToTextColumns + # limit is added in 20220118020026_add_url_text_limit_to_issuable_metric_images + def change + add_column :issuable_metric_images, :url_text, :text + end + # rubocop:enable Migration/AddLimitToTextColumns +end diff --git a/db/migrate/20220118020026_add_url_text_limit_to_issuable_metric_images.rb b/db/migrate/20220118020026_add_url_text_limit_to_issuable_metric_images.rb new file mode 100644 index 00000000000..2f0f27681cd --- /dev/null +++ b/db/migrate/20220118020026_add_url_text_limit_to_issuable_metric_images.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddUrlTextLimitToIssuableMetricImages < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + add_text_limit :issuable_metric_images, :url_text, 128 + end + + def down + remove_text_limit :issuable_metric_images, :url_text + end +end diff --git a/db/migrate/20220119094023_add_unique_index_to_aed_verification_token.rb b/db/migrate/20220119094023_add_unique_index_to_aed_verification_token.rb new file mode 100644 index 00000000000..bd40fe2203e --- /dev/null +++ b/db/migrate/20220119094023_add_unique_index_to_aed_verification_token.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddUniqueIndexToAedVerificationToken < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + INDEX_NAME = 'index_audit_events_external_audit_on_verification_token' + + def up + add_concurrent_index :audit_events_external_audit_event_destinations, :verification_token, unique: true, name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :audit_events_external_audit_event_destinations, INDEX_NAME + end +end diff --git a/db/migrate/20220119141407_add_dependency_proxy_size_to_namespace_statistics.rb b/db/migrate/20220119141407_add_dependency_proxy_size_to_namespace_statistics.rb new file mode 100644 index 00000000000..d8107ad8e21 --- /dev/null +++ b/db/migrate/20220119141407_add_dependency_proxy_size_to_namespace_statistics.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddDependencyProxySizeToNamespaceStatistics < Gitlab::Database::Migration[1.0] + def change + add_column :namespace_statistics, :dependency_proxy_size, :bigint, default: 0, null: false + end +end diff --git a/db/migrate/20220119144253_add_dependency_proxy_size_to_namespace_root_storage_statistics.rb b/db/migrate/20220119144253_add_dependency_proxy_size_to_namespace_root_storage_statistics.rb new file mode 100644 index 00000000000..8218f869ce6 --- /dev/null +++ b/db/migrate/20220119144253_add_dependency_proxy_size_to_namespace_root_storage_statistics.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddDependencyProxySizeToNamespaceRootStorageStatistics < Gitlab::Database::Migration[1.0] + def change + add_column :namespace_root_storage_statistics, :dependency_proxy_size, :bigint, default: 0, null: false + end +end diff --git a/db/migrate/20220119170426_remove_temporary_vulnerability_occurrences_deduplication_index.rb b/db/migrate/20220119170426_remove_temporary_vulnerability_occurrences_deduplication_index.rb new file mode 100644 index 00000000000..26859beb671 --- /dev/null +++ b/db/migrate/20220119170426_remove_temporary_vulnerability_occurrences_deduplication_index.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class RemoveTemporaryVulnerabilityOccurrencesDeduplicationIndex < Gitlab::Database::Migration[1.0] + MIGRATION = 'RecalculateVulnerabilitiesOccurrencesUuid' + INDEX_NAME = 'tmp_idx_deduplicate_vulnerability_occurrences' + + disable_ddl_transaction! + + def up + finalize_background_migration(MIGRATION) + + remove_concurrent_index_by_name(:vulnerability_occurrences, INDEX_NAME) + end + + def down + add_concurrent_index :vulnerability_occurrences, + %i[project_id report_type location_fingerprint primary_identifier_id id], + name: INDEX_NAME + end +end diff --git a/db/migrate/20220119220620_add_scan_method_to_dast_site_profile.rb b/db/migrate/20220119220620_add_scan_method_to_dast_site_profile.rb new file mode 100644 index 00000000000..f7b7580d673 --- /dev/null +++ b/db/migrate/20220119220620_add_scan_method_to_dast_site_profile.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddScanMethodToDastSiteProfile < Gitlab::Database::Migration[1.0] + def up + add_column :dast_site_profiles, :scan_method, :integer, limit: 2, default: 0, null: false + end + + def down + remove_column :dast_site_profiles, :scan_method + end +end diff --git a/db/migrate/20220120033115_create_alert_management_alert_metric_images.rb b/db/migrate/20220120033115_create_alert_management_alert_metric_images.rb new file mode 100644 index 00000000000..e98392190f4 --- /dev/null +++ b/db/migrate/20220120033115_create_alert_management_alert_metric_images.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CreateAlertManagementAlertMetricImages < Gitlab::Database::Migration[1.0] + def up + create_table :alert_management_alert_metric_images do |t| + t.references :alert, null: false, index: true, foreign_key: { to_table: :alert_management_alerts, on_delete: :cascade } + t.timestamps_with_timezone + t.integer :file_store, limit: 2 + t.text :file, limit: 255, null: false + t.text :url, limit: 255 + t.text :url_text, limit: 128 + end + end + + def down + drop_table :alert_management_alert_metric_images, if_exists: true + end +end diff --git a/db/migrate/20220120085655_add_ci_runner_project_index_to_runner_id_and_project_id.rb b/db/migrate/20220120085655_add_ci_runner_project_index_to_runner_id_and_project_id.rb new file mode 100644 index 00000000000..bcf32d2abd0 --- /dev/null +++ b/db/migrate/20220120085655_add_ci_runner_project_index_to_runner_id_and_project_id.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddCiRunnerProjectIndexToRunnerIdAndProjectId < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + OLD_INDEX_NAME = 'index_ci_runner_projects_on_runner_id' + NEW_INDEX_NAME = 'index_ci_runner_projects_on_runner_id_and_project_id' + TABLE_NAME = :ci_runner_projects + + def up + add_concurrent_index(TABLE_NAME, [:runner_id, :project_id], name: NEW_INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, OLD_INDEX_NAME) + end + + def down + add_concurrent_index(TABLE_NAME, :runner_id, name: OLD_INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, NEW_INDEX_NAME) + end +end diff --git a/db/migrate/20220125084127_add_cleanup_attempts_to_loose_foreign_keys_deleted_records.rb b/db/migrate/20220125084127_add_cleanup_attempts_to_loose_foreign_keys_deleted_records.rb new file mode 100644 index 00000000000..e0c80ad79e5 --- /dev/null +++ b/db/migrate/20220125084127_add_cleanup_attempts_to_loose_foreign_keys_deleted_records.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddCleanupAttemptsToLooseForeignKeysDeletedRecords < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def up + add_column :loose_foreign_keys_deleted_records, :cleanup_attempts, :smallint, default: 0 + end + + def down + remove_column :loose_foreign_keys_deleted_records, :cleanup_attempts + end +end diff --git a/db/migrate/20220125122228_add_topics_non_private_projects_count.rb b/db/migrate/20220125122228_add_topics_non_private_projects_count.rb new file mode 100644 index 00000000000..8c7b750d5ff --- /dev/null +++ b/db/migrate/20220125122228_add_topics_non_private_projects_count.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddTopicsNonPrivateProjectsCount < Gitlab::Database::Migration[1.0] + def up + add_column :topics, :non_private_projects_count, :bigint, null: false, default: 0 + end + + def down + remove_column :topics, :non_private_projects_count + end +end diff --git a/db/migrate/20220125122725_add_topics_non_private_projects_count_index.rb b/db/migrate/20220125122725_add_topics_non_private_projects_count_index.rb new file mode 100644 index 00000000000..46b4d298a2e --- /dev/null +++ b/db/migrate/20220125122725_add_topics_non_private_projects_count_index.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddTopicsNonPrivateProjectsCountIndex < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_topics_non_private_projects_count' + + disable_ddl_transaction! + + def up + add_concurrent_index :topics, [:non_private_projects_count, :id], order: { non_private_projects_count: :desc }, name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :topics, INDEX_NAME + end +end diff --git a/db/migrate/20220125230538_add_compound_index_on_project_id_and_id_for_vulnerabilities.rb b/db/migrate/20220125230538_add_compound_index_on_project_id_and_id_for_vulnerabilities.rb new file mode 100644 index 00000000000..c745fa51328 --- /dev/null +++ b/db/migrate/20220125230538_add_compound_index_on_project_id_and_id_for_vulnerabilities.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddCompoundIndexOnProjectIdAndIdForVulnerabilities < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_vulnerabilities_on_project_id_and_id' + + disable_ddl_transaction! + + def up + add_concurrent_index :vulnerabilities, [:project_id, :id], name: INDEX_NAME + end + + def down + remove_concurrent_index :vulnerabilities, [:project_id, :id], name: INDEX_NAME + end +end diff --git a/db/migrate/20220128093756_add_ecdsa_sk_and_ed25519_sk_key_restrictions_to_application_settings.rb b/db/migrate/20220128093756_add_ecdsa_sk_and_ed25519_sk_key_restrictions_to_application_settings.rb new file mode 100644 index 00000000000..1acd9599da4 --- /dev/null +++ b/db/migrate/20220128093756_add_ecdsa_sk_and_ed25519_sk_key_restrictions_to_application_settings.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddEcdsaSkAndEd25519SkKeyRestrictionsToApplicationSettings < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def change + add_column :application_settings, :ecdsa_sk_key_restriction, :integer, default: 0, null: false + add_column :application_settings, :ed25519_sk_key_restriction, :integer, default: 0, null: false + end +end diff --git a/db/migrate/20220128194722_add_index_on_migration_state_and_import_done_at_to_container_repositories.rb b/db/migrate/20220128194722_add_index_on_migration_state_and_import_done_at_to_container_repositories.rb new file mode 100644 index 00000000000..6c9fb20bbbd --- /dev/null +++ b/db/migrate/20220128194722_add_index_on_migration_state_and_import_done_at_to_container_repositories.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class AddIndexOnMigrationStateAndImportDoneAtToContainerRepositories < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_container_repositories_on_migration_state_import_done_at' + disable_ddl_transaction! + + def up + add_concurrent_index :container_repositories, [:migration_state, :migration_import_done_at], name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :container_repositories, INDEX_NAME + end +end diff --git a/db/migrate/20220131135725_add_severity_level_to_merge_requests_compliance_violations.rb b/db/migrate/20220131135725_add_severity_level_to_merge_requests_compliance_violations.rb new file mode 100644 index 00000000000..50aa0121055 --- /dev/null +++ b/db/migrate/20220131135725_add_severity_level_to_merge_requests_compliance_violations.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddSeverityLevelToMergeRequestsComplianceViolations < Gitlab::Database::Migration[1.0] + def change + add_column :merge_requests_compliance_violations, :severity_level, :integer, limit: 2, null: false, default: 0 + end +end diff --git a/db/migrate/20220131192643_add_show_diff_preview_in_email_to_project_settings.rb b/db/migrate/20220131192643_add_show_diff_preview_in_email_to_project_settings.rb new file mode 100644 index 00000000000..1811bf04ee4 --- /dev/null +++ b/db/migrate/20220131192643_add_show_diff_preview_in_email_to_project_settings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddShowDiffPreviewInEmailToProjectSettings < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def change + add_column :project_settings, :show_diff_preview_in_email, :boolean, default: true, null: false + end +end diff --git a/db/migrate/20220201205300_remove_index_for_vulnerability_occurrences.rb b/db/migrate/20220201205300_remove_index_for_vulnerability_occurrences.rb new file mode 100644 index 00000000000..89591d14aae --- /dev/null +++ b/db/migrate/20220201205300_remove_index_for_vulnerability_occurrences.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveIndexForVulnerabilityOccurrences < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_vulnerability_occurrences_on_unique_keys' + + disable_ddl_transaction! + + def up + remove_concurrent_index_by_name :vulnerability_occurrences, INDEX_NAME + end + + def down + # no-op + + # The index is UNIQUE so we cannot add it back again + end +end diff --git a/db/migrate/20220202034409_add_tmp_index_on_id_and_migration_state_to_container_repositories.rb b/db/migrate/20220202034409_add_tmp_index_on_id_and_migration_state_to_container_repositories.rb new file mode 100644 index 00000000000..b999c871a3e --- /dev/null +++ b/db/migrate/20220202034409_add_tmp_index_on_id_and_migration_state_to_container_repositories.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddTmpIndexOnIdAndMigrationStateToContainerRepositories < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'tmp_index_container_repositories_on_id_migration_state' + + disable_ddl_transaction! + + # Temporary index to be removed https://gitlab.com/gitlab-org/gitlab/-/issues/351783 + def up + add_concurrent_index :container_repositories, [:id, :migration_state], name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :container_repositories, INDEX_NAME + end +end diff --git a/db/migrate/20220202115350_add_migration_indexes_to_container_repositories.rb b/db/migrate/20220202115350_add_migration_indexes_to_container_repositories.rb new file mode 100644 index 00000000000..673d066e3c0 --- /dev/null +++ b/db/migrate/20220202115350_add_migration_indexes_to_container_repositories.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class AddMigrationIndexesToContainerRepositories < Gitlab::Database::Migration[1.0] + PRE_IMPORTING_INDEX = 'idx_container_repos_on_pre_import_started_at_when_pre_importing' + PRE_IMPORT_DONE_INDEX = 'idx_container_repos_on_pre_import_done_at_when_pre_import_done' + IMPORTING_INDEX = 'idx_container_repos_on_import_started_at_when_importing' + + disable_ddl_transaction! + + def up + add_concurrent_index :container_repositories, :migration_pre_import_started_at, name: PRE_IMPORTING_INDEX, where: "migration_state = 'pre_importing'" + add_concurrent_index :container_repositories, :migration_pre_import_done_at, name: PRE_IMPORT_DONE_INDEX, where: "migration_state = 'pre_import_done'" + add_concurrent_index :container_repositories, :migration_import_started_at, name: IMPORTING_INDEX, where: "migration_state = 'importing'" + end + + def down + remove_concurrent_index_by_name :container_repositories, IMPORTING_INDEX + remove_concurrent_index_by_name :container_repositories, PRE_IMPORT_DONE_INDEX + remove_concurrent_index_by_name :container_repositories, PRE_IMPORTING_INDEX + end +end diff --git a/db/migrate/20220203123333_add_batched_migration_max_batch.rb b/db/migrate/20220203123333_add_batched_migration_max_batch.rb new file mode 100644 index 00000000000..d16c6dd4110 --- /dev/null +++ b/db/migrate/20220203123333_add_batched_migration_max_batch.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddBatchedMigrationMaxBatch < Gitlab::Database::Migration[1.0] + def change + add_column :batched_background_migrations, :max_batch_size, :integer + end +end diff --git a/db/migrate/20220203133652_add_legacy_open_source_license_available_to_project_settings.rb b/db/migrate/20220203133652_add_legacy_open_source_license_available_to_project_settings.rb new file mode 100644 index 00000000000..47f92fae496 --- /dev/null +++ b/db/migrate/20220203133652_add_legacy_open_source_license_available_to_project_settings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddLegacyOpenSourceLicenseAvailableToProjectSettings < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def change + add_column :project_settings, :legacy_open_source_license_available, :boolean, default: true, null: false + end +end diff --git a/db/migrate/20220204154220_add_index_on_greatest_done_at_to_container_repositories.rb b/db/migrate/20220204154220_add_index_on_greatest_done_at_to_container_repositories.rb new file mode 100644 index 00000000000..455a8478cc4 --- /dev/null +++ b/db/migrate/20220204154220_add_index_on_greatest_done_at_to_container_repositories.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexOnGreatestDoneAtToContainerRepositories < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_container_repositories_on_greatest_done_at' + disable_ddl_transaction! + + def up + add_concurrent_index :container_repositories, + 'GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at)', + where: "migration_state IN ('import_done', 'pre_import_done', 'import_aborted')", + name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :container_repositories, INDEX_NAME + end +end diff --git a/db/migrate/20220207083129_add_users_get_by_id_limit_to_application_setting.rb b/db/migrate/20220207083129_add_users_get_by_id_limit_to_application_setting.rb new file mode 100644 index 00000000000..cdf2aced213 --- /dev/null +++ b/db/migrate/20220207083129_add_users_get_by_id_limit_to_application_setting.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddUsersGetByIdLimitToApplicationSetting < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def up + add_column :application_settings, :users_get_by_id_limit, :integer, null: false, default: 300 + add_column :application_settings, :users_get_by_id_limit_allowlist, :text, array: true, limit: 255, null: false, default: [] + end + + def down + remove_column :application_settings, :users_get_by_id_limit + remove_column :application_settings, :users_get_by_id_limit_allowlist + end +end diff --git a/db/migrate/20220208170445_add_not_valid_foreign_key_to_ci_builds_runner_id.rb b/db/migrate/20220208170445_add_not_valid_foreign_key_to_ci_builds_runner_id.rb new file mode 100644 index 00000000000..9b2ba17e068 --- /dev/null +++ b/db/migrate/20220208170445_add_not_valid_foreign_key_to_ci_builds_runner_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddNotValidForeignKeyToCiBuildsRunnerId < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :ci_builds, :ci_runners, column: :runner_id, on_delete: :nullify, validate: false + end + + def down + with_lock_retries do + remove_foreign_key_if_exists :ci_builds, column: :runner_id + end + end +end diff --git a/db/migrate/20220208171826_update_default_scan_method_of_dast_site_profile.rb b/db/migrate/20220208171826_update_default_scan_method_of_dast_site_profile.rb new file mode 100644 index 00000000000..b01dbe642e2 --- /dev/null +++ b/db/migrate/20220208171826_update_default_scan_method_of_dast_site_profile.rb @@ -0,0 +1,24 @@ +# 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 UpdateDefaultScanMethodOfDastSiteProfile < Gitlab::Database::Migration[1.0] + BATCH_SIZE = 500 + + disable_ddl_transaction! + + def up + each_batch_range('dast_site_profiles', scope: ->(table) { table.where(target_type: 1) }, of: BATCH_SIZE) do |min, max| + execute <<~SQL + UPDATE dast_site_profiles + SET scan_method = 1 + WHERE id BETWEEN #{min} AND #{max} + SQL + end + end + + def down + # noop + end +end diff --git a/db/migrate/20220211214605_update_integrations_trigger_type_new_on_insert_null_safe.rb b/db/migrate/20220211214605_update_integrations_trigger_type_new_on_insert_null_safe.rb new file mode 100644 index 00000000000..7a60ea48f40 --- /dev/null +++ b/db/migrate/20220211214605_update_integrations_trigger_type_new_on_insert_null_safe.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class UpdateIntegrationsTriggerTypeNewOnInsertNullSafe < Gitlab::Database::Migration[1.0] + include Gitlab::Database::SchemaHelpers + + FUNCTION_NAME = 'integrations_set_type_new' + + def up + # Update `type_new` dynamically based on `type`, if `type_new` is null + # and `type` dynamically based on `type_new`, if `type` is null. + # + # The old class names are in the format `AbcService`, and the new ones `Integrations::Abc`. + create_trigger_function(FUNCTION_NAME, replace: true) do + <<~SQL.squish + UPDATE integrations + SET type_new = COALESCE(NEW.type_new, regexp_replace(NEW.type, '\\A(.+)Service\\Z', 'Integrations::\\1')) + , type = COALESCE(NEW.type, regexp_replace(NEW.type_new, '\\AIntegrations::(.+)\\Z', '\\1Service')) + WHERE integrations.id = NEW.id; + RETURN NULL; + SQL + end + end + + def down + # Update `type_new` dynamically based on `type`. + # + # The old class names are in the format `AbcService`, and the new ones `Integrations::Abc`. + create_trigger_function(FUNCTION_NAME, replace: true) do + <<~SQL + UPDATE integrations SET type_new = regexp_replace(NEW.type, '\\A(.+)Service\\Z', 'Integrations::\\1') + WHERE integrations.id = NEW.id; + RETURN NULL; + SQL + end + end +end diff --git a/db/post_migrate/20210415155043_move_container_registry_enabled_to_project_features3.rb b/db/post_migrate/20210415155043_move_container_registry_enabled_to_project_features3.rb index 6fd8d280c97..f63d7c5138b 100644 --- a/db/post_migrate/20210415155043_move_container_registry_enabled_to_project_features3.rb +++ b/db/post_migrate/20210415155043_move_container_registry_enabled_to_project_features3.rb @@ -2,7 +2,6 @@ class MoveContainerRegistryEnabledToProjectFeatures3 < ActiveRecord::Migration[6.0] include Gitlab::Database::MigrationHelpers - include Gitlab::Database::DynamicModelHelpers BATCH_SIZE = 21_000 MIGRATION = 'MoveContainerRegistryEnabledToProjectFeature' diff --git a/db/post_migrate/20210525075724_clean_up_pending_builds_table.rb b/db/post_migrate/20210525075724_clean_up_pending_builds_table.rb index c380f15188a..59b41dd2008 100644 --- a/db/post_migrate/20210525075724_clean_up_pending_builds_table.rb +++ b/db/post_migrate/20210525075724_clean_up_pending_builds_table.rb @@ -10,7 +10,7 @@ class CleanUpPendingBuildsTable < ActiveRecord::Migration[6.0] def up return unless Gitlab.dev_or_test_env? || Gitlab.com? - each_batch_range('ci_pending_builds', of: BATCH_SIZE) do |min, max| + each_batch_range('ci_pending_builds', connection: connection, of: BATCH_SIZE) do |min, max| execute <<~SQL DELETE FROM ci_pending_builds USING ci_builds diff --git a/db/post_migrate/20210610102413_migrate_protected_attribute_to_pending_builds.rb b/db/post_migrate/20210610102413_migrate_protected_attribute_to_pending_builds.rb index f47ff244d7a..47a6e39e87a 100644 --- a/db/post_migrate/20210610102413_migrate_protected_attribute_to_pending_builds.rb +++ b/db/post_migrate/20210610102413_migrate_protected_attribute_to_pending_builds.rb @@ -8,7 +8,7 @@ class MigrateProtectedAttributeToPendingBuilds < ActiveRecord::Migration[6.1] def up return unless Gitlab.dev_or_test_env? || Gitlab.com? - each_batch_range('ci_pending_builds', of: 1000) do |min, max| + each_batch_range('ci_pending_builds', connection: connection, of: 1000) do |min, max| execute <<~SQL UPDATE ci_pending_builds SET protected = true diff --git a/db/post_migrate/20211022214523_schedule_recalculate_vulnerability_finding_signatures_for_findings.rb b/db/post_migrate/20211022214523_schedule_recalculate_vulnerability_finding_signatures_for_findings.rb index bccbc4e3209..105d5ec98f4 100644 --- a/db/post_migrate/20211022214523_schedule_recalculate_vulnerability_finding_signatures_for_findings.rb +++ b/db/post_migrate/20211022214523_schedule_recalculate_vulnerability_finding_signatures_for_findings.rb @@ -8,15 +8,7 @@ class ScheduleRecalculateVulnerabilityFindingSignaturesForFindings < Gitlab::Dat disable_ddl_transaction! def up - return unless Gitlab.ee? - - queue_background_migration_jobs_by_range_at_intervals( - define_batchable_model('vulnerability_finding_signatures'), - MIGRATION, - DELAY_INTERVAL, - batch_size: BATCH_SIZE, - track_jobs: true - ) + # no-op based on https://docs.gitlab.com/ee/development/background_migrations.html#rescheduling-background-migrations end def down diff --git a/db/post_migrate/20211104165220_remove_vulnerability_finding_links.rb b/db/post_migrate/20211104165220_remove_vulnerability_finding_links.rb index fc50aa812a7..1625d24ef92 100644 --- a/db/post_migrate/20211104165220_remove_vulnerability_finding_links.rb +++ b/db/post_migrate/20211104165220_remove_vulnerability_finding_links.rb @@ -1,21 +1,14 @@ # frozen_string_literal: true class RemoveVulnerabilityFindingLinks < Gitlab::Database::Migration[1.0] - BATCH_SIZE = 50_000 - MIGRATION = 'RemoveVulnerabilityFindingLinks' - - disable_ddl_transaction! + # This migration has been moved to a TRUNCATE in db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb + # Previously, this was causing an bug where there was a conflict between the table cleanup and the index creation. def up - queue_background_migration_jobs_by_range_at_intervals( - define_batchable_model('vulnerability_finding_links'), - MIGRATION, - 2.minutes, - batch_size: BATCH_SIZE - ) + # no op end def down - # no ops + # no op end end diff --git a/db/post_migrate/20211209103048_backfill_project_namespaces_for_group.rb b/db/post_migrate/20211209103048_backfill_project_namespaces_for_group.rb new file mode 100644 index 00000000000..0b65db7aab4 --- /dev/null +++ b/db/post_migrate/20211209103048_backfill_project_namespaces_for_group.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +class BackfillProjectNamespacesForGroup < Gitlab::Database::Migration[1.0] + MIGRATION = 'ProjectNamespaces::BackfillProjectNamespaces' + DELAY_INTERVAL = 2.minutes + GROUP_ID = 9970 # picking gitlab-org group. + + disable_ddl_transaction! + + def up + return unless Gitlab.com? || Gitlab.staging? + + projects_table = ::Gitlab::BackgroundMigration::ProjectNamespaces::Models::Project.arel_table + hierarchy_cte_sql = Arel.sql(::Gitlab::BackgroundMigration::ProjectNamespaces::BackfillProjectNamespaces.hierarchy_cte(GROUP_ID)) + group_projects = ::Gitlab::BackgroundMigration::ProjectNamespaces::Models::Project.where(projects_table[:namespace_id].in(hierarchy_cte_sql)) + + min_id = group_projects.minimum(:id) + max_id = group_projects.maximum(:id) + + return if min_id.blank? || max_id.blank? + + queue_batched_background_migration( + MIGRATION, + :projects, + :id, + GROUP_ID, + 'up', + job_interval: DELAY_INTERVAL, + batch_min_value: min_id, + batch_max_value: max_id, + sub_batch_size: 25, + batch_class_name: 'BackfillProjectNamespacePerGroupBatchingStrategy' + ) + end + + def down + return unless Gitlab.com? || Gitlab.staging? + + Gitlab::Database::BackgroundMigration::BatchedMigration + .for_configuration(MIGRATION, :projects, :id, [GROUP_ID, 'up']).delete_all + end +end diff --git a/db/post_migrate/20211210173137_remove_vulnerability_finding_links_again.rb b/db/post_migrate/20211210173137_remove_vulnerability_finding_links_again.rb index 98ac4433193..ffe8bf0d794 100644 --- a/db/post_migrate/20211210173137_remove_vulnerability_finding_links_again.rb +++ b/db/post_migrate/20211210173137_remove_vulnerability_finding_links_again.rb @@ -1,21 +1,14 @@ # frozen_string_literal: true class RemoveVulnerabilityFindingLinksAgain < Gitlab::Database::Migration[1.0] - BATCH_SIZE = 50_000 - MIGRATION = 'RemoveVulnerabilityFindingLinks' - - disable_ddl_transaction! + # This migration has been moved to a TRUNCATE in db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb + # Previously, this was causing an bug where there was a conflict between the table cleanup and the index creation. def up - queue_background_migration_jobs_by_range_at_intervals( - define_batchable_model('vulnerability_finding_links'), - MIGRATION, - 2.minutes, - batch_size: BATCH_SIZE - ) + # no op end def down - # no ops + # no op end end diff --git a/db/post_migrate/20220106185033_remove_finding_evidence_summary.rb b/db/post_migrate/20220106185033_remove_finding_evidence_summary.rb new file mode 100644 index 00000000000..d28e8bb81f6 --- /dev/null +++ b/db/post_migrate/20220106185033_remove_finding_evidence_summary.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RemoveFindingEvidenceSummary < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + remove_column :vulnerability_finding_evidences, :summary, :text + end + + def down + add_column :vulnerability_finding_evidences, :summary, :text + + add_text_limit :vulnerability_finding_evidences, :summary, 8_000_000 + end +end diff --git a/db/post_migrate/20220107064845_populate_vulnerability_reads.rb b/db/post_migrate/20220107064845_populate_vulnerability_reads.rb new file mode 100644 index 00000000000..58826c5f929 --- /dev/null +++ b/db/post_migrate/20220107064845_populate_vulnerability_reads.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class PopulateVulnerabilityReads < Gitlab::Database::Migration[1.0] + BATCH_SIZE = 10_000 + DELAY_INTERVAL = 2.minutes + MIGRATION_NAME = 'PopulateVulnerabilityReads' + SUB_BATCH_SIZE = 1_000 + + disable_ddl_transaction! + + def up + queue_background_migration_jobs_by_range_at_intervals( + define_batchable_model('vulnerabilities'), + MIGRATION_NAME, + DELAY_INTERVAL, + batch_size: BATCH_SIZE, + track_jobs: true, + other_job_arguments: [SUB_BATCH_SIZE] + ) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220111093534_remove_index_on_auto_stop_in.rb b/db/post_migrate/20220111093534_remove_index_on_auto_stop_in.rb new file mode 100644 index 00000000000..bcb78b28376 --- /dev/null +++ b/db/post_migrate/20220111093534_remove_index_on_auto_stop_in.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveIndexOnAutoStopIn < Gitlab::Database::Migration[1.0] + TABLE = :environments + INDEX_NAME = 'index_environments_on_auto_stop_at' + COLUMN = :auto_stop_at + + disable_ddl_transaction! + + def up + remove_concurrent_index TABLE, COLUMN, where: 'auto_stop_at IS NOT NULL', name: INDEX_NAME + end + + def down + add_concurrent_index TABLE, COLUMN, where: 'auto_stop_at IS NOT NULL', name: INDEX_NAME + end +end diff --git a/db/post_migrate/20220111101421_remove_index_on_merge_request_id.rb b/db/post_migrate/20220111101421_remove_index_on_merge_request_id.rb new file mode 100644 index 00000000000..38cc259312d --- /dev/null +++ b/db/post_migrate/20220111101421_remove_index_on_merge_request_id.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveIndexOnMergeRequestId < Gitlab::Database::Migration[1.0] + TABLE = :merge_request_context_commits + INDEX_NAME = 'index_merge_request_context_commits_on_merge_request_id' + COLUMN = :merge_request_id + + disable_ddl_transaction! + + def up + remove_concurrent_index TABLE, COLUMN, name: INDEX_NAME + end + + def down + add_concurrent_index TABLE, COLUMN, name: INDEX_NAME + end +end diff --git a/db/post_migrate/20220113111440_schedule_fix_incorrect_max_seats_used.rb b/db/post_migrate/20220113111440_schedule_fix_incorrect_max_seats_used.rb new file mode 100644 index 00000000000..f39b026bd77 --- /dev/null +++ b/db/post_migrate/20220113111440_schedule_fix_incorrect_max_seats_used.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class ScheduleFixIncorrectMaxSeatsUsed < Gitlab::Database::Migration[1.0] + DOWNTIME = false + TMP_IDX_NAME = 'tmp_gitlab_subscriptions_max_seats_used_migration' + + disable_ddl_transaction! + + def up + add_concurrent_index :gitlab_subscriptions, :id, where: "start_date >= '2021-08-02' AND start_date <= '2021-11-20' AND max_seats_used != 0 AND max_seats_used > seats_in_use AND max_seats_used > seats", name: TMP_IDX_NAME + + return unless Gitlab.com? + + migrate_in(1.hour, 'FixIncorrectMaxSeatsUsed') + end + + def down + remove_concurrent_index_by_name :gitlab_subscriptions, TMP_IDX_NAME + end +end diff --git a/db/post_migrate/20220117034056_remove_index_cluster_agent_tokens_on_agent_id_and_last_used_at.rb b/db/post_migrate/20220117034056_remove_index_cluster_agent_tokens_on_agent_id_and_last_used_at.rb new file mode 100644 index 00000000000..5e306be016a --- /dev/null +++ b/db/post_migrate/20220117034056_remove_index_cluster_agent_tokens_on_agent_id_and_last_used_at.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RemoveIndexClusterAgentTokensOnAgentIdAndLastUsedAt < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + INDEX = 'index_cluster_agent_tokens_on_agent_id_and_last_used_at' + + def up + remove_concurrent_index_by_name :cluster_agent_tokens, name: INDEX + end + + def down + add_concurrent_index :cluster_agent_tokens, 'agent_id, last_used_at DESC NULLS LAST', name: INDEX + end +end diff --git a/db/post_migrate/20220118204039_self_managed_reschedule_recalculate_vulnerability_finding_signatures_for_findings.rb b/db/post_migrate/20220118204039_self_managed_reschedule_recalculate_vulnerability_finding_signatures_for_findings.rb new file mode 100644 index 00000000000..18f68150e45 --- /dev/null +++ b/db/post_migrate/20220118204039_self_managed_reschedule_recalculate_vulnerability_finding_signatures_for_findings.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class SelfManagedRescheduleRecalculateVulnerabilityFindingSignaturesForFindings < Gitlab::Database::Migration[1.0] + MIGRATION = 'RecalculateVulnerabilityFindingSignaturesForFindings' + BATCH_SIZE = 1_000 + DELAY_INTERVAL = 2.minutes + + disable_ddl_transaction! + + def up + # Only run migration for self-managed + return if ::Gitlab.com? + + # Vulnerability Finding Signatures is an EE only feature + return unless Gitlab.ee? + + delete_queued_jobs(MIGRATION) + + requeue_background_migration_jobs_by_range_at_intervals( + MIGRATION, + DELAY_INTERVAL, + batch_size: BATCH_SIZE + ) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220119094503_populate_audit_event_streaming_verification_token.rb b/db/post_migrate/20220119094503_populate_audit_event_streaming_verification_token.rb new file mode 100644 index 00000000000..482f873739a --- /dev/null +++ b/db/post_migrate/20220119094503_populate_audit_event_streaming_verification_token.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class PopulateAuditEventStreamingVerificationToken < Gitlab::Database::Migration[1.0] + class ExternalAuditEventDestination < ActiveRecord::Base + self.table_name = 'audit_events_external_audit_event_destinations' + + def regenerate_verification_token + update!(verification_token: SecureRandom.base58(24)) + end + end + + def up + ExternalAuditEventDestination.all.each { |destination| destination.regenerate_verification_token } + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220119143130_remove_projects_ci_sources_pipelines_source_project_id_fk.rb b/db/post_migrate/20220119143130_remove_projects_ci_sources_pipelines_source_project_id_fk.rb new file mode 100644 index 00000000000..7fe9f1c856b --- /dev/null +++ b/db/post_migrate/20220119143130_remove_projects_ci_sources_pipelines_source_project_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveProjectsCiSourcesPipelinesSourceProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK projects, ci_sources_pipelines IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:ci_sources_pipelines, :projects, name: "fk_acd9737679") + end + end + + def down + add_concurrent_foreign_key(:ci_sources_pipelines, :projects, name: "fk_acd9737679", column: :source_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220119144458_remove_users_ci_triggers_owner_id_fk.rb b/db/post_migrate/20220119144458_remove_users_ci_triggers_owner_id_fk.rb new file mode 100644 index 00000000000..9acf53a6ea2 --- /dev/null +++ b/db/post_migrate/20220119144458_remove_users_ci_triggers_owner_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveUsersCiTriggersOwnerIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK users, ci_triggers IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:ci_triggers, :users, name: "fk_e8e10d1964") + end + end + + def down + add_concurrent_foreign_key(:ci_triggers, :users, name: "fk_e8e10d1964", column: :owner_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220119151221_remove_merge_requests_ci_pipelines_merge_request_id_fk.rb b/db/post_migrate/20220119151221_remove_merge_requests_ci_pipelines_merge_request_id_fk.rb new file mode 100644 index 00000000000..c7ced0ae3b7 --- /dev/null +++ b/db/post_migrate/20220119151221_remove_merge_requests_ci_pipelines_merge_request_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveMergeRequestsCiPipelinesMergeRequestIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_pipelines, :merge_requests, name: "fk_a23be95014") + + with_lock_retries do + execute('LOCK merge_requests, ci_pipelines IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_pipelines, :merge_requests, name: "fk_a23be95014") + end + end + + def down + add_concurrent_foreign_key(:ci_pipelines, :merge_requests, name: "fk_a23be95014", column: :merge_request_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220119153706_remove_ci_pipelines_merge_trains_pipeline_id_fk.rb b/db/post_migrate/20220119153706_remove_ci_pipelines_merge_trains_pipeline_id_fk.rb new file mode 100644 index 00000000000..92d68ff4fbb --- /dev/null +++ b/db/post_migrate/20220119153706_remove_ci_pipelines_merge_trains_pipeline_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesMergeTrainsPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK ci_pipelines, merge_trains IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:merge_trains, :ci_pipelines, name: "fk_rails_f90820cb08") + end + end + + def down + add_concurrent_foreign_key(:merge_trains, :ci_pipelines, name: "fk_rails_f90820cb08", column: :pipeline_id, target_column: :id, on_delete: :nullify) + end +end diff --git a/db/post_migrate/20220119154442_remove_ci_pipelines_merge_requests_head_pipeline_id_fk.rb b/db/post_migrate/20220119154442_remove_ci_pipelines_merge_requests_head_pipeline_id_fk.rb new file mode 100644 index 00000000000..6a978ce2ab1 --- /dev/null +++ b/db/post_migrate/20220119154442_remove_ci_pipelines_merge_requests_head_pipeline_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesMergeRequestsHeadPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK ci_pipelines, merge_requests IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:merge_requests, :ci_pipelines, name: "fk_fd82eae0b9") + end + end + + def down + add_concurrent_foreign_key(:merge_requests, :ci_pipelines, name: "fk_fd82eae0b9", column: :head_pipeline_id, target_column: :id, on_delete: :nullify) + end +end diff --git a/db/post_migrate/20220119193130_remove_ci_pipelines_dast_profiles_pipelines_ci_pipeline_id_fk.rb b/db/post_migrate/20220119193130_remove_ci_pipelines_dast_profiles_pipelines_ci_pipeline_id_fk.rb new file mode 100644 index 00000000000..f4eedd0fa70 --- /dev/null +++ b/db/post_migrate/20220119193130_remove_ci_pipelines_dast_profiles_pipelines_ci_pipeline_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesDastProfilesPipelinesCiPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK ci_pipelines, dast_profiles_pipelines IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:dast_profiles_pipelines, :ci_pipelines, name: "fk_a60cad829d") + end + end + + def down + add_concurrent_foreign_key(:dast_profiles_pipelines, :ci_pipelines, name: "fk_a60cad829d", column: :ci_pipeline_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220119201340_remove_ci_pipelines_vulnerability_statistics_latest_pipeline_id_fk.rb b/db/post_migrate/20220119201340_remove_ci_pipelines_vulnerability_statistics_latest_pipeline_id_fk.rb new file mode 100644 index 00000000000..bd80767cf6a --- /dev/null +++ b/db/post_migrate/20220119201340_remove_ci_pipelines_vulnerability_statistics_latest_pipeline_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesVulnerabilityStatisticsLatestPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK ci_pipelines, vulnerability_statistics IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:vulnerability_statistics, :ci_pipelines, name: "fk_e8b13c928f") + end + end + + def down + add_concurrent_foreign_key(:vulnerability_statistics, :ci_pipelines, name: "fk_e8b13c928f", column: :latest_pipeline_id, target_column: :id, on_delete: :nullify) + end +end diff --git a/db/post_migrate/20220119203119_remove_ci_pipelines_vulnerability_occurrence_pipelines_pipeline_id_fk.rb b/db/post_migrate/20220119203119_remove_ci_pipelines_vulnerability_occurrence_pipelines_pipeline_id_fk.rb new file mode 100644 index 00000000000..b6397486dd0 --- /dev/null +++ b/db/post_migrate/20220119203119_remove_ci_pipelines_vulnerability_occurrence_pipelines_pipeline_id_fk.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesVulnerabilityOccurrencePipelinesPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + with_lock_retries do + execute('LOCK ci_pipelines, vulnerability_occurrence_pipelines IN ACCESS EXCLUSIVE MODE') + + remove_foreign_key_if_exists(:vulnerability_occurrence_pipelines, :ci_pipelines, name: "fk_rails_6421e35d7d") + end + end + + def down + add_concurrent_foreign_key(:vulnerability_occurrence_pipelines, :ci_pipelines, name: "fk_rails_6421e35d7d", column: :pipeline_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220120094340_drop_position_from_security_findings.rb b/db/post_migrate/20220120094340_drop_position_from_security_findings.rb new file mode 100644 index 00000000000..56af346ad1b --- /dev/null +++ b/db/post_migrate/20220120094340_drop_position_from_security_findings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class DropPositionFromSecurityFindings < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def change + remove_column :security_findings, :position, :integer + end +end diff --git a/db/post_migrate/20220120123700_add_tmp_index_routes_id_for_namespaces.rb b/db/post_migrate/20220120123700_add_tmp_index_routes_id_for_namespaces.rb new file mode 100644 index 00000000000..2b8cecd0e57 --- /dev/null +++ b/db/post_migrate/20220120123700_add_tmp_index_routes_id_for_namespaces.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddTmpIndexRoutesIdForNamespaces < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'tmp_index_for_namespace_id_migration_on_routes' + + disable_ddl_transaction! + + def up + # Temporary index to be removed in 14.9 + # https://gitlab.com/gitlab-org/gitlab/-/issues/352353 + add_concurrent_index :routes, :id, where: "routes.namespace_id is null and routes.source_type = 'Namespace'", name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :routes, INDEX_NAME + end +end diff --git a/db/post_migrate/20220120123800_backfill_namespace_id_for_namespace_routes.rb b/db/post_migrate/20220120123800_backfill_namespace_id_for_namespace_routes.rb new file mode 100644 index 00000000000..4aac0903502 --- /dev/null +++ b/db/post_migrate/20220120123800_backfill_namespace_id_for_namespace_routes.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class BackfillNamespaceIdForNamespaceRoutes < Gitlab::Database::Migration[1.0] + MIGRATION = 'BackfillNamespaceIdForNamespaceRoute' + INTERVAL = 2.minutes + BATCH_SIZE = 1_000 + MAX_BATCH_SIZE = 10_000 + SUB_BATCH_SIZE = 200 + + def up + queue_batched_background_migration( + MIGRATION, + :routes, + :id, + job_interval: INTERVAL, + batch_size: BATCH_SIZE, + max_batch_size: MAX_BATCH_SIZE, + sub_batch_size: SUB_BATCH_SIZE + ) + end + + def down + Gitlab::Database::BackgroundMigration::BatchedMigration + .for_configuration(MIGRATION, :routes, :id, []) + .delete_all + end +end diff --git a/db/post_migrate/20220121214752_remove_projects_ci_stages_project_id_fk.rb b/db/post_migrate/20220121214752_remove_projects_ci_stages_project_id_fk.rb new file mode 100644 index 00000000000..93f0b30571a --- /dev/null +++ b/db/post_migrate/20220121214752_remove_projects_ci_stages_project_id_fk.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class RemoveProjectsCiStagesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return if Gitlab.com? # unsafe migration, skip on GitLab.com due to https://gitlab.com/groups/gitlab-org/-/epics/7249#note_819625526 + return unless foreign_key_exists?(:ci_stages, :projects, name: "fk_2360681d1d") + + with_lock_retries do + execute('LOCK projects, ci_stages IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_stages, :projects, name: "fk_2360681d1d") + end + end + + def down + add_concurrent_foreign_key(:ci_stages, :projects, name: "fk_2360681d1d", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220121214753_re_remove_projects_ci_stages_project_id_fk.rb b/db/post_migrate/20220121214753_re_remove_projects_ci_stages_project_id_fk.rb new file mode 100644 index 00000000000..45dec15a5a7 --- /dev/null +++ b/db/post_migrate/20220121214753_re_remove_projects_ci_stages_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class ReRemoveProjectsCiStagesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_stages, :projects, name: "fk_2360681d1d") + + with_lock_retries do + execute('LOCK projects, ci_stages IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_stages, :projects, name: "fk_2360681d1d") + end + end + + def down + # no-op, since the FK will be added via rollback by prior-migration + end +end diff --git a/db/post_migrate/20220121221651_remove_projects_ci_variables_project_id_fk.rb b/db/post_migrate/20220121221651_remove_projects_ci_variables_project_id_fk.rb new file mode 100644 index 00000000000..f647d4376ac --- /dev/null +++ b/db/post_migrate/20220121221651_remove_projects_ci_variables_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiVariablesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_variables, :projects, name: "fk_ada5eb64b3") + + with_lock_retries do + execute('LOCK projects, ci_variables IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_variables, :projects, name: "fk_ada5eb64b3") + end + end + + def down + add_concurrent_foreign_key(:ci_variables, :projects, name: "fk_ada5eb64b3", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124130028_dedup_runner_projects.rb b/db/post_migrate/20220124130028_dedup_runner_projects.rb new file mode 100644 index 00000000000..1a4c895f1c4 --- /dev/null +++ b/db/post_migrate/20220124130028_dedup_runner_projects.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +class DedupRunnerProjects < Gitlab::Database::Migration[1.0] + TABLE_NAME = :ci_runner_projects + TMP_INDEX_NAME = 'tmp_unique_ci_runner_projects_by_runner_id_and_project_id' + OLD_INDEX_NAME = 'index_ci_runner_projects_on_runner_id_and_project_id' + INDEX_NAME = 'index_unique_ci_runner_projects_on_runner_id_and_project_id' + BATCH_SIZE = 5000 + + disable_ddl_transaction! + + module Ci + class RunnerProject < ActiveRecord::Base + include EachBatch + + self.table_name = 'ci_runner_projects' + end + end + + def up + last_runner_project_record_id = Ci::RunnerProject.maximum(:id) || 0 + + # This index will disallow further duplicates while we're deduplicating the data. + add_concurrent_index(TABLE_NAME, [:runner_id, :project_id], where: "id > #{Integer(last_runner_project_record_id)}", unique: true, name: TMP_INDEX_NAME) + + Ci::RunnerProject.each_batch(of: BATCH_SIZE) do |relation| + duplicated_runner_projects = Ci::RunnerProject + .select('COUNT(*)', :runner_id, :project_id) + .where('(runner_id, project_id) IN (?)', relation.select(:runner_id, :project_id)) + .group(:runner_id, :project_id) + .having('COUNT(*) > 1') + + duplicated_runner_projects.each do |runner_project| + deduplicate_item(runner_project) + end + end + + add_concurrent_index(TABLE_NAME, [:runner_id, :project_id], unique: true, name: INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, TMP_INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, OLD_INDEX_NAME) + end + + def down + add_concurrent_index(TABLE_NAME, [:runner_id, :project_id], name: OLD_INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, TMP_INDEX_NAME) + remove_concurrent_index_by_name(TABLE_NAME, INDEX_NAME) + end + + private + + def deduplicate_item(runner_project) + runner_projects_records = Ci::RunnerProject + .where(project_id: runner_project.project_id, runner_id: runner_project.runner_id) + .order(updated_at: :asc) + .to_a + + attributes = {} + runner_projects_records.each do |runner_projects_record| + params = runner_projects_record.attributes.except('id') + attributes.merge!(params.compact) + end + + ApplicationRecord.transaction do + record_to_keep = runner_projects_records.pop + records_to_delete = runner_projects_records + + Ci::RunnerProject.where(id: records_to_delete.map(&:id)).delete_all + record_to_keep.update!(attributes) + end + end +end diff --git a/db/post_migrate/20220124145019_remove_projects_external_pull_requests_project_id_fk.rb b/db/post_migrate/20220124145019_remove_projects_external_pull_requests_project_id_fk.rb new file mode 100644 index 00000000000..b16234fc812 --- /dev/null +++ b/db/post_migrate/20220124145019_remove_projects_external_pull_requests_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsExternalPullRequestsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:external_pull_requests, :projects, name: "fk_rails_bcae9b5c7b") + + with_lock_retries do + execute('LOCK projects, external_pull_requests IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:external_pull_requests, :projects, name: "fk_rails_bcae9b5c7b") + end + end + + def down + add_concurrent_foreign_key(:external_pull_requests, :projects, name: "fk_rails_bcae9b5c7b", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124151456_remove_projects_ci_triggers_project_id_fk.rb b/db/post_migrate/20220124151456_remove_projects_ci_triggers_project_id_fk.rb new file mode 100644 index 00000000000..684d363eb96 --- /dev/null +++ b/db/post_migrate/20220124151456_remove_projects_ci_triggers_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiTriggersProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_triggers, :projects, name: "fk_e3e63f966e") + + with_lock_retries do + execute('LOCK projects, ci_triggers IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_triggers, :projects, name: "fk_e3e63f966e") + end + end + + def down + add_concurrent_foreign_key(:ci_triggers, :projects, name: "fk_e3e63f966e", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124151949_remove_projects_ci_runner_projects_project_id_fk.rb b/db/post_migrate/20220124151949_remove_projects_ci_runner_projects_project_id_fk.rb new file mode 100644 index 00000000000..de8feb96a06 --- /dev/null +++ b/db/post_migrate/20220124151949_remove_projects_ci_runner_projects_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiRunnerProjectsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_runner_projects, :projects, name: "fk_4478a6f1e4") + + with_lock_retries do + execute('LOCK projects, ci_runner_projects IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_runner_projects, :projects, name: "fk_4478a6f1e4") + end + end + + def down + add_concurrent_foreign_key(:ci_runner_projects, :projects, name: "fk_4478a6f1e4", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124152824_remove_projects_ci_subscriptions_projects_downstream_project_id_fk.rb b/db/post_migrate/20220124152824_remove_projects_ci_subscriptions_projects_downstream_project_id_fk.rb new file mode 100644 index 00000000000..8596b1f14ba --- /dev/null +++ b/db/post_migrate/20220124152824_remove_projects_ci_subscriptions_projects_downstream_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiSubscriptionsProjectsDownstreamProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_subscriptions_projects, :projects, name: "fk_rails_0818751483") + + with_lock_retries do + execute('LOCK projects, ci_subscriptions_projects IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_subscriptions_projects, :projects, name: "fk_rails_0818751483") + end + end + + def down + add_concurrent_foreign_key(:ci_subscriptions_projects, :projects, name: "fk_rails_0818751483", column: :downstream_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124153233_remove_projects_ci_job_artifacts_project_id_fk.rb b/db/post_migrate/20220124153233_remove_projects_ci_job_artifacts_project_id_fk.rb new file mode 100644 index 00000000000..1948a78916d --- /dev/null +++ b/db/post_migrate/20220124153233_remove_projects_ci_job_artifacts_project_id_fk.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class RemoveProjectsCiJobArtifactsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return if Gitlab.com? # unsafe migration, skip on GitLab.com due to https://gitlab.com/groups/gitlab-org/-/epics/7249#note_819625526 + return unless foreign_key_exists?(:ci_job_artifacts, :projects, name: "fk_rails_9862d392f9") + + with_lock_retries do + execute('LOCK projects, ci_job_artifacts IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_job_artifacts, :projects, name: "fk_rails_9862d392f9") + end + end + + def down + add_concurrent_foreign_key(:ci_job_artifacts, :projects, name: "fk_rails_9862d392f9", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124153234_re_remove_projects_ci_job_artifacts_project_id_fk.rb b/db/post_migrate/20220124153234_re_remove_projects_ci_job_artifacts_project_id_fk.rb new file mode 100644 index 00000000000..bb59134b927 --- /dev/null +++ b/db/post_migrate/20220124153234_re_remove_projects_ci_job_artifacts_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class ReRemoveProjectsCiJobArtifactsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_job_artifacts, :projects, name: "fk_rails_9862d392f9") + + with_lock_retries do + execute('LOCK projects, ci_job_artifacts IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_job_artifacts, :projects, name: "fk_rails_9862d392f9") + end + end + + def down + # no-op, since the FK will be added via rollback by prior-migration + end +end diff --git a/db/post_migrate/20220124180704_remove_projects_ci_builds_metadata_project_id_fk.rb b/db/post_migrate/20220124180704_remove_projects_ci_builds_metadata_project_id_fk.rb new file mode 100644 index 00000000000..fc9dc2cc6dc --- /dev/null +++ b/db/post_migrate/20220124180704_remove_projects_ci_builds_metadata_project_id_fk.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class RemoveProjectsCiBuildsMetadataProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return if Gitlab.com? # unsafe migration, skip on GitLab.com due to https://gitlab.com/groups/gitlab-org/-/epics/7249#note_819625526 + return unless foreign_key_exists?(:ci_builds_metadata, :projects, name: "fk_rails_ffcf702a02") + + with_lock_retries do + execute('LOCK projects, ci_builds_metadata IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_builds_metadata, :projects, name: "fk_rails_ffcf702a02") + end + end + + def down + add_concurrent_foreign_key(:ci_builds_metadata, :projects, name: "fk_rails_ffcf702a02", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124180705_re_remove_projects_ci_builds_metadata_project_id_fk.rb b/db/post_migrate/20220124180705_re_remove_projects_ci_builds_metadata_project_id_fk.rb new file mode 100644 index 00000000000..6483b8e0643 --- /dev/null +++ b/db/post_migrate/20220124180705_re_remove_projects_ci_builds_metadata_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class ReRemoveProjectsCiBuildsMetadataProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_builds_metadata, :projects, name: "fk_rails_ffcf702a02") + + with_lock_retries do + execute('LOCK projects, ci_builds_metadata IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_builds_metadata, :projects, name: "fk_rails_ffcf702a02") + end + end + + def down + # no-op, since the FK will be added via rollback by prior-migration + end +end diff --git a/db/post_migrate/20220124184338_remove_projects_ci_subscriptions_projects_upstream_project_id_fk.rb b/db/post_migrate/20220124184338_remove_projects_ci_subscriptions_projects_upstream_project_id_fk.rb new file mode 100644 index 00000000000..50448f4a884 --- /dev/null +++ b/db/post_migrate/20220124184338_remove_projects_ci_subscriptions_projects_upstream_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiSubscriptionsProjectsUpstreamProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_subscriptions_projects, :projects, name: "fk_rails_7871f9a97b") + + with_lock_retries do + execute('LOCK projects, ci_subscriptions_projects IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_subscriptions_projects, :projects, name: "fk_rails_7871f9a97b") + end + end + + def down + add_concurrent_foreign_key(:ci_subscriptions_projects, :projects, name: "fk_rails_7871f9a97b", column: :upstream_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124204046_remove_projects_ci_sources_pipelines_project_id_fk.rb b/db/post_migrate/20220124204046_remove_projects_ci_sources_pipelines_project_id_fk.rb new file mode 100644 index 00000000000..e15d337045e --- /dev/null +++ b/db/post_migrate/20220124204046_remove_projects_ci_sources_pipelines_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiSourcesPipelinesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_sources_pipelines, :projects, name: "fk_1e53c97c0a") + + with_lock_retries do + execute('LOCK projects, ci_sources_pipelines IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_sources_pipelines, :projects, name: "fk_1e53c97c0a") + end + end + + def down + add_concurrent_foreign_key(:ci_sources_pipelines, :projects, name: "fk_1e53c97c0a", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124214131_remove_projects_ci_refs_project_id_fk.rb b/db/post_migrate/20220124214131_remove_projects_ci_refs_project_id_fk.rb new file mode 100644 index 00000000000..f90d477673a --- /dev/null +++ b/db/post_migrate/20220124214131_remove_projects_ci_refs_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiRefsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_refs, :projects, name: "fk_rails_4249db8cc3") + + with_lock_retries do + execute('LOCK projects, ci_refs IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_refs, :projects, name: "fk_rails_4249db8cc3") + end + end + + def down + add_concurrent_foreign_key(:ci_refs, :projects, name: "fk_rails_4249db8cc3", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124215857_remove_projects_ci_job_token_project_scope_links_source_project_id_fk.rb b/db/post_migrate/20220124215857_remove_projects_ci_job_token_project_scope_links_source_project_id_fk.rb new file mode 100644 index 00000000000..8bfe9586a50 --- /dev/null +++ b/db/post_migrate/20220124215857_remove_projects_ci_job_token_project_scope_links_source_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiJobTokenProjectScopeLinksSourceProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_job_token_project_scope_links, :projects, name: "fk_rails_4b2ee3290b") + + with_lock_retries do + execute('LOCK projects, ci_job_token_project_scope_links IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_job_token_project_scope_links, :projects, name: "fk_rails_4b2ee3290b") + end + end + + def down + add_concurrent_foreign_key(:ci_job_token_project_scope_links, :projects, name: "fk_rails_4b2ee3290b", column: :source_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220124221521_remove_projects_ci_project_monthly_usages_project_id_fk.rb b/db/post_migrate/20220124221521_remove_projects_ci_project_monthly_usages_project_id_fk.rb new file mode 100644 index 00000000000..cff78342d21 --- /dev/null +++ b/db/post_migrate/20220124221521_remove_projects_ci_project_monthly_usages_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiProjectMonthlyUsagesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_project_monthly_usages, :projects, name: "fk_rails_508bcd4aa6") + + with_lock_retries do + execute('LOCK projects, ci_project_monthly_usages IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_project_monthly_usages, :projects, name: "fk_rails_508bcd4aa6") + end + end + + def down + add_concurrent_foreign_key(:ci_project_monthly_usages, :projects, name: "fk_rails_508bcd4aa6", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220125083520_remove_ci_pipelines_dast_site_profiles_pipelines_ci_pipeline_id_fk.rb b/db/post_migrate/20220125083520_remove_ci_pipelines_dast_site_profiles_pipelines_ci_pipeline_id_fk.rb new file mode 100644 index 00000000000..b111b95fccf --- /dev/null +++ b/db/post_migrate/20220125083520_remove_ci_pipelines_dast_site_profiles_pipelines_ci_pipeline_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesDastSiteProfilesPipelinesCiPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:dast_site_profiles_pipelines, :ci_pipelines, name: "fk_53849b0ad5") + + with_lock_retries do + execute('LOCK ci_pipelines, dast_site_profiles_pipelines IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:dast_site_profiles_pipelines, :ci_pipelines, name: "fk_53849b0ad5") + end + end + + def down + add_concurrent_foreign_key(:dast_site_profiles_pipelines, :ci_pipelines, name: "fk_53849b0ad5", column: :ci_pipeline_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220125084348_remove_ci_pipelines_vulnerability_feedback_pipeline_id_fk.rb b/db/post_migrate/20220125084348_remove_ci_pipelines_vulnerability_feedback_pipeline_id_fk.rb new file mode 100644 index 00000000000..1b932d084bb --- /dev/null +++ b/db/post_migrate/20220125084348_remove_ci_pipelines_vulnerability_feedback_pipeline_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveCiPipelinesVulnerabilityFeedbackPipelineIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:vulnerability_feedback, :ci_pipelines, name: "fk_rails_20976e6fd9") + + with_lock_retries do + execute('LOCK ci_pipelines, vulnerability_feedback IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:vulnerability_feedback, :ci_pipelines, name: "fk_rails_20976e6fd9") + end + end + + def down + add_concurrent_foreign_key(:vulnerability_feedback, :ci_pipelines, name: "fk_rails_20976e6fd9", column: :pipeline_id, target_column: :id, on_delete: :nullify) + end +end diff --git a/db/post_migrate/20220125122640_schedule_populate_topics_non_private_projects_count.rb b/db/post_migrate/20220125122640_schedule_populate_topics_non_private_projects_count.rb new file mode 100644 index 00000000000..dee86a70553 --- /dev/null +++ b/db/post_migrate/20220125122640_schedule_populate_topics_non_private_projects_count.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class SchedulePopulateTopicsNonPrivateProjectsCount < Gitlab::Database::Migration[1.0] + MIGRATION = 'PopulateTopicsNonPrivateProjectsCount' + BATCH_SIZE = 10_000 + DELAY_INTERVAL = 2.minutes + + disable_ddl_transaction! + + def up + queue_background_migration_jobs_by_range_at_intervals( + define_batchable_model('topics'), + MIGRATION, + DELAY_INTERVAL, + batch_size: BATCH_SIZE, + track_jobs: true + ) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220126201752_remove_projects_ci_job_token_project_scope_links_target_project_id_fk.rb b/db/post_migrate/20220126201752_remove_projects_ci_job_token_project_scope_links_target_project_id_fk.rb new file mode 100644 index 00000000000..a33e02f2408 --- /dev/null +++ b/db/post_migrate/20220126201752_remove_projects_ci_job_token_project_scope_links_target_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiJobTokenProjectScopeLinksTargetProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_job_token_project_scope_links, :projects, name: "fk_rails_6904b38465") + + with_lock_retries do + execute('LOCK projects, ci_job_token_project_scope_links IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_job_token_project_scope_links, :projects, name: "fk_rails_6904b38465") + end + end + + def down + add_concurrent_foreign_key(:ci_job_token_project_scope_links, :projects, name: "fk_rails_6904b38465", column: :target_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220126202654_remove_projects_ci_sources_projects_source_project_id_fk.rb b/db/post_migrate/20220126202654_remove_projects_ci_sources_projects_source_project_id_fk.rb new file mode 100644 index 00000000000..a69cd43b921 --- /dev/null +++ b/db/post_migrate/20220126202654_remove_projects_ci_sources_projects_source_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiSourcesProjectsSourceProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_sources_projects, :projects, name: "fk_rails_64b6855cbc") + + with_lock_retries do + execute('LOCK projects, ci_sources_projects IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_sources_projects, :projects, name: "fk_rails_64b6855cbc") + end + end + + def down + add_concurrent_foreign_key(:ci_sources_projects, :projects, name: "fk_rails_64b6855cbc", column: :source_project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220126203421_remove_projects_ci_pipeline_schedules_project_id_fk.rb b/db/post_migrate/20220126203421_remove_projects_ci_pipeline_schedules_project_id_fk.rb new file mode 100644 index 00000000000..870127ab168 --- /dev/null +++ b/db/post_migrate/20220126203421_remove_projects_ci_pipeline_schedules_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiPipelineSchedulesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_pipeline_schedules, :projects, name: "fk_8ead60fcc4") + + with_lock_retries do + execute('LOCK projects, ci_pipeline_schedules IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_pipeline_schedules, :projects, name: "fk_8ead60fcc4") + end + end + + def down + add_concurrent_foreign_key(:ci_pipeline_schedules, :projects, name: "fk_8ead60fcc4", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220126210021_remove_projects_ci_builds_project_id_fk.rb b/db/post_migrate/20220126210021_remove_projects_ci_builds_project_id_fk.rb new file mode 100644 index 00000000000..8caa6db7507 --- /dev/null +++ b/db/post_migrate/20220126210021_remove_projects_ci_builds_project_id_fk.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class RemoveProjectsCiBuildsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return if Gitlab.com? # unsafe migration, skip on GitLab.com due to https://gitlab.com/groups/gitlab-org/-/epics/7249#note_819625526 + return unless foreign_key_exists?(:ci_builds, :projects, name: "fk_befce0568a") + + with_lock_retries do + execute('LOCK projects, ci_builds IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_builds, :projects, name: "fk_befce0568a") + end + end + + def down + add_concurrent_foreign_key(:ci_builds, :projects, name: "fk_befce0568a", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220126210022_re_remove_projects_ci_builds_project_id_fk.rb b/db/post_migrate/20220126210022_re_remove_projects_ci_builds_project_id_fk.rb new file mode 100644 index 00000000000..2a026388bbf --- /dev/null +++ b/db/post_migrate/20220126210022_re_remove_projects_ci_builds_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class ReRemoveProjectsCiBuildsProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_builds, :projects, name: "fk_befce0568a") + + with_lock_retries do + execute('LOCK projects, ci_builds IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_builds, :projects, name: "fk_befce0568a") + end + end + + def down + # no-op, since the FK will be added via rollback by prior-migration + end +end diff --git a/db/post_migrate/20220126210657_remove_projects_ci_pipelines_project_id_fk.rb b/db/post_migrate/20220126210657_remove_projects_ci_pipelines_project_id_fk.rb new file mode 100644 index 00000000000..6867cf720f3 --- /dev/null +++ b/db/post_migrate/20220126210657_remove_projects_ci_pipelines_project_id_fk.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RemoveProjectsCiPipelinesProjectIdFk < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + def up + return unless foreign_key_exists?(:ci_pipelines, :projects, name: "fk_86635dbd80") + + with_lock_retries do + execute('LOCK projects, ci_pipelines IN ACCESS EXCLUSIVE MODE') if transaction_open? + + remove_foreign_key_if_exists(:ci_pipelines, :projects, name: "fk_86635dbd80") + end + end + + def down + add_concurrent_foreign_key(:ci_pipelines, :projects, name: "fk_86635dbd80", column: :project_id, target_column: :id, on_delete: :cascade) + end +end diff --git a/db/post_migrate/20220127112243_add_index_to_merge_request_assignees_state.rb b/db/post_migrate/20220127112243_add_index_to_merge_request_assignees_state.rb new file mode 100644 index 00000000000..e6bb43af760 --- /dev/null +++ b/db/post_migrate/20220127112243_add_index_to_merge_request_assignees_state.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddIndexToMergeRequestAssigneesState < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + INDEX_NAME = 'index_on_merge_request_assignees_state' + + def up + add_concurrent_index :merge_request_assignees, :state, where: 'state = 2', name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :merge_request_assignees, INDEX_NAME + end +end diff --git a/db/post_migrate/20220127112412_add_index_to_merge_request_reviewers_state.rb b/db/post_migrate/20220127112412_add_index_to_merge_request_reviewers_state.rb new file mode 100644 index 00000000000..13f4e05c15b --- /dev/null +++ b/db/post_migrate/20220127112412_add_index_to_merge_request_reviewers_state.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddIndexToMergeRequestReviewersState < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + INDEX_NAME = 'index_on_merge_request_reviewers_state' + + def up + add_concurrent_index :merge_request_reviewers, :state, where: 'state = 2', name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :merge_request_reviewers, INDEX_NAME + end +end diff --git a/db/post_migrate/20220127132200_cleanup_backfill_ci_namespace_mirrors.rb b/db/post_migrate/20220127132200_cleanup_backfill_ci_namespace_mirrors.rb new file mode 100644 index 00000000000..65ec2f9a282 --- /dev/null +++ b/db/post_migrate/20220127132200_cleanup_backfill_ci_namespace_mirrors.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CleanupBackfillCiNamespaceMirrors < Gitlab::Database::Migration[1.0] + MIGRATION = 'BackfillCiNamespaceMirrors' + + disable_ddl_transaction! + + def up + finalize_background_migration(MIGRATION) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220127132201_cleanup_backfill_ci_project_mirrors.rb b/db/post_migrate/20220127132201_cleanup_backfill_ci_project_mirrors.rb new file mode 100644 index 00000000000..8c7d9a945ba --- /dev/null +++ b/db/post_migrate/20220127132201_cleanup_backfill_ci_project_mirrors.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CleanupBackfillCiProjectMirrors < Gitlab::Database::Migration[1.0] + MIGRATION = 'BackfillCiProjectMirrors' + + disable_ddl_transaction! + + def up + finalize_background_migration(MIGRATION) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220128155251_remove_dangling_running_builds.rb b/db/post_migrate/20220128155251_remove_dangling_running_builds.rb new file mode 100644 index 00000000000..f86a21ced00 --- /dev/null +++ b/db/post_migrate/20220128155251_remove_dangling_running_builds.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class RemoveDanglingRunningBuilds < Gitlab::Database::Migration[1.0] + BATCH_SIZE = 100 + + disable_ddl_transaction! + + def up + each_batch_range('ci_running_builds', of: BATCH_SIZE) do |min, max| + execute <<~SQL + DELETE FROM ci_running_builds + USING ci_builds + WHERE ci_builds.id = ci_running_builds.build_id + AND ci_builds.status = 'failed' + AND ci_builds.type = 'Ci::Build' + AND ci_running_builds.id BETWEEN #{min} AND #{max} + SQL + end + end + + def down + # no-op + # This migration deletes data and it can not be reversed + end +end diff --git a/db/post_migrate/20220128155814_fix_approval_rules_code_owners_rule_type_index.rb b/db/post_migrate/20220128155814_fix_approval_rules_code_owners_rule_type_index.rb new file mode 100644 index 00000000000..eccfab25126 --- /dev/null +++ b/db/post_migrate/20220128155814_fix_approval_rules_code_owners_rule_type_index.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class FixApprovalRulesCodeOwnersRuleTypeIndex < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_approval_rules_code_owners_rule_type' + OLD_INDEX_NAME = 'index_approval_rules_code_owners_rule_type_old' + TABLE = :approval_merge_request_rules + COLUMN = :merge_request_id + WHERE_CONDITION = 'rule_type = 2' + + disable_ddl_transaction! + + def up + rename_index TABLE, INDEX_NAME, OLD_INDEX_NAME if index_exists_by_name?(TABLE, INDEX_NAME) && !index_exists_by_name?(TABLE, OLD_INDEX_NAME) + + add_concurrent_index TABLE, COLUMN, where: WHERE_CONDITION, name: INDEX_NAME + + remove_concurrent_index_by_name TABLE, OLD_INDEX_NAME + end + + def down + # No-op + end +end diff --git a/db/post_migrate/20220201034731_remove_index_clusters_kubernetes_namespaces_on_cluster_id.rb b/db/post_migrate/20220201034731_remove_index_clusters_kubernetes_namespaces_on_cluster_id.rb new file mode 100644 index 00000000000..0e2ef3b3324 --- /dev/null +++ b/db/post_migrate/20220201034731_remove_index_clusters_kubernetes_namespaces_on_cluster_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RemoveIndexClustersKubernetesNamespacesOnClusterId < Gitlab::Database::Migration[1.0] + INDEX = 'index_clusters_kubernetes_namespaces_on_cluster_id' + + disable_ddl_transaction! + + def up + remove_concurrent_index_by_name :clusters_kubernetes_namespaces, INDEX + end + + def down + add_concurrent_index :clusters_kubernetes_namespaces, :cluster_id, name: INDEX + end +end diff --git a/db/post_migrate/20220201141705_cleanup_background_migration_populate_test_reports_issue_id.rb b/db/post_migrate/20220201141705_cleanup_background_migration_populate_test_reports_issue_id.rb new file mode 100644 index 00000000000..252b4a01d04 --- /dev/null +++ b/db/post_migrate/20220201141705_cleanup_background_migration_populate_test_reports_issue_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CleanupBackgroundMigrationPopulateTestReportsIssueId < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + MIGRATION = 'PopulateTestReportsIssueId' + + def up + finalize_background_migration(MIGRATION) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220201173212_add_user_details_provisioning_index.rb b/db/post_migrate/20220201173212_add_user_details_provisioning_index.rb new file mode 100644 index 00000000000..a864ec7e395 --- /dev/null +++ b/db/post_migrate/20220201173212_add_user_details_provisioning_index.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AddUserDetailsProvisioningIndex < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + INDEX_NAME = 'idx_user_details_on_provisioned_by_group_id_user_id' + OLD_INDEX_NAME = 'index_user_details_on_provisioned_by_group_id' + + def up + add_concurrent_index :user_details, [:provisioned_by_group_id, :user_id], name: INDEX_NAME + remove_concurrent_index_by_name :user_details, OLD_INDEX_NAME + end + + def down + add_concurrent_index :user_details, :provisioned_by_group_id, name: OLD_INDEX_NAME + remove_concurrent_index_by_name :user_details, INDEX_NAME + end +end diff --git a/db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb b/db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb new file mode 100644 index 00000000000..cc9dabdf624 --- /dev/null +++ b/db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AddUniqueIndexToVulnerabilityFindingLinksWithTruncate < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + NAME_URL_INDEX_NAME = 'finding_link_name_url_idx' + URL_INDEX_NAME = 'finding_link_url_idx' + + def up + execute('TRUNCATE TABLE vulnerability_finding_links') + + add_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :name, :url], unique: true, name: NAME_URL_INDEX_NAME + add_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :url], unique: true, where: 'name is null', name: URL_INDEX_NAME + end + + def down + remove_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :name, :url], name: NAME_URL_INDEX_NAME + remove_concurrent_index :vulnerability_finding_links, [:vulnerability_occurrence_id, :url], name: URL_INDEX_NAME + end +end diff --git a/db/post_migrate/20220202105733_delete_service_template_records.rb b/db/post_migrate/20220202105733_delete_service_template_records.rb new file mode 100644 index 00000000000..b70bacc83aa --- /dev/null +++ b/db/post_migrate/20220202105733_delete_service_template_records.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class DeleteServiceTemplateRecords < Gitlab::Database::Migration[1.0] + class Integration < ActiveRecord::Base + # Disable single-table inheritance + self.inheritance_column = :_type_disabled + end + def up + Integration.where(template: true).delete_all + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220204053655_remove_index_epic_issues_on_epic_id.rb b/db/post_migrate/20220204053655_remove_index_epic_issues_on_epic_id.rb new file mode 100644 index 00000000000..7815829d36a --- /dev/null +++ b/db/post_migrate/20220204053655_remove_index_epic_issues_on_epic_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RemoveIndexEpicIssuesOnEpicId < Gitlab::Database::Migration[1.0] + INDEX = 'index_epic_issues_on_epic_id' + + disable_ddl_transaction! + + def up + remove_concurrent_index_by_name :epic_issues, name: INDEX + end + + def down + add_concurrent_index :epic_issues, :epic_id, name: INDEX + end +end diff --git a/db/post_migrate/20220208115439_start_backfill_ci_queuing_tables.rb b/db/post_migrate/20220208115439_start_backfill_ci_queuing_tables.rb new file mode 100644 index 00000000000..82e36174290 --- /dev/null +++ b/db/post_migrate/20220208115439_start_backfill_ci_queuing_tables.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class StartBackfillCiQueuingTables < Gitlab::Database::Migration[1.0] + MIGRATION = 'BackfillCiQueuingTables' + BATCH_SIZE = 500 + DELAY_INTERVAL = 2.minutes + + disable_ddl_transaction! + + def up + return if Gitlab.com? + + queue_background_migration_jobs_by_range_at_intervals( + Gitlab::BackgroundMigration::BackfillCiQueuingTables::Ci::Build.pending, + MIGRATION, + DELAY_INTERVAL, + batch_size: BATCH_SIZE, + track_jobs: true) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20220209111007_add_partial_index_for_batching_active_cluster_image_scanning_vulnerabilities.rb b/db/post_migrate/20220209111007_add_partial_index_for_batching_active_cluster_image_scanning_vulnerabilities.rb new file mode 100644 index 00000000000..d38509ed8c2 --- /dev/null +++ b/db/post_migrate/20220209111007_add_partial_index_for_batching_active_cluster_image_scanning_vulnerabilities.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddPartialIndexForBatchingActiveClusterImageScanningVulnerabilities < Gitlab::Database::Migration[1.0] + INDEX_NAME = 'index_vulnerabilities_on_project_id_and_id_active_cis' + INDEX_FILTER_CONDITION = 'report_type = 7 AND state = ANY(ARRAY[1, 4])' + + disable_ddl_transaction! + + def up + add_concurrent_index :vulnerabilities, [:project_id, :id], where: INDEX_FILTER_CONDITION, name: INDEX_NAME + end + + def down + remove_concurrent_index :vulnerabilities, [:project_id, :id], name: INDEX_NAME + end +end diff --git a/db/post_migrate/20220212120735_schedule_fix_incorrect_max_seats_used2.rb b/db/post_migrate/20220212120735_schedule_fix_incorrect_max_seats_used2.rb new file mode 100644 index 00000000000..c8a6bd0a15d --- /dev/null +++ b/db/post_migrate/20220212120735_schedule_fix_incorrect_max_seats_used2.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class ScheduleFixIncorrectMaxSeatsUsed2 < Gitlab::Database::Migration[1.0] + MIGRATION = 'FixIncorrectMaxSeatsUsed' + TMP_IDX_NAME = 'tmp_gitlab_subscriptions_max_seats_used_migration_2' + + disable_ddl_transaction! + + def up + add_concurrent_index :gitlab_subscriptions, :id, where: "start_date < '2021-08-02' AND max_seats_used != 0 AND max_seats_used > seats_in_use AND max_seats_used > seats", name: TMP_IDX_NAME + + return unless Gitlab.com? + + migrate_in(1.hour, MIGRATION, ['batch_2_for_start_date_before_02_aug_2021']) + end + + def down + remove_concurrent_index_by_name :gitlab_subscriptions, TMP_IDX_NAME + end +end diff --git a/db/post_migrate/20220213104531_create_indexes_on_integration_type_new.rb b/db/post_migrate/20220213104531_create_indexes_on_integration_type_new.rb new file mode 100644 index 00000000000..3a9f48dec44 --- /dev/null +++ b/db/post_migrate/20220213104531_create_indexes_on_integration_type_new.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +# Reproduce the indices on integrations.type on integrations.type_new +class CreateIndexesOnIntegrationTypeNew < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + TABLE_NAME = :integrations + COLUMN = :type_new + + def indices + [ + { + name: "index_integrations_on_project_and_#{COLUMN}_where_inherit_null", + columns: [:project_id, COLUMN], + where: 'inherit_from_id IS NULL' + }, + { + name: "index_integrations_on_project_id_and_#{COLUMN}_unique", + columns: [:project_id, COLUMN], + unique: true + }, + { + name: "index_integrations_on_#{COLUMN}", + columns: [COLUMN] + }, + { + name: "index_integrations_on_#{COLUMN}_and_instance_partial", + columns: [COLUMN, :instance], + where: 'instance = true' + }, + { + name: "index_integrations_on_#{COLUMN}_and_template_partial", + columns: [COLUMN, :template], + where: 'template = true' + }, + { + # column names are limited to 63 characters, so this one is re-worded for clarity + name: "index_integrations_on_#{COLUMN}_id_when_active_and_has_project", + columns: [COLUMN, :id], + where: '((active = true) AND (project_id IS NOT NULL))' + }, + { + name: "index_integrations_on_unique_group_id_and_#{COLUMN}", + columns: [:group_id, COLUMN] + } + ] + end + + def up + indices.each do |index| + add_concurrent_index TABLE_NAME, index[:columns], index.except(:columns) + end + end + + def down + indices.each do |index| + remove_concurrent_index_by_name TABLE_NAME, index[:name] + end + end +end diff --git a/db/schema_migrations/20211119111006 b/db/schema_migrations/20211119111006 new file mode 100644 index 00000000000..ebb8e460452 --- /dev/null +++ b/db/schema_migrations/20211119111006 @@ -0,0 +1 @@ +d618c28360f7716807e9727566019e269963d85164cf2f306ec9692d3b037802
\ No newline at end of file diff --git a/db/schema_migrations/20211122103051 b/db/schema_migrations/20211122103051 new file mode 100644 index 00000000000..eacca224329 --- /dev/null +++ b/db/schema_migrations/20211122103051 @@ -0,0 +1 @@ +674a44e70291d6ed04318a5f6b639d216f2c26c43d15cb00e59b06cc6f6cc401
\ No newline at end of file diff --git a/db/schema_migrations/20211123135255 b/db/schema_migrations/20211123135255 new file mode 100644 index 00000000000..e151abb0e33 --- /dev/null +++ b/db/schema_migrations/20211123135255 @@ -0,0 +1 @@ +cf6b9bb5711b6a097e399e79fdabe01a237581d99de7fed3c2b69c65ffd23a06
\ No newline at end of file diff --git a/db/schema_migrations/20211124095704 b/db/schema_migrations/20211124095704 new file mode 100644 index 00000000000..db18301ecd9 --- /dev/null +++ b/db/schema_migrations/20211124095704 @@ -0,0 +1 @@ +1f5ed9e7af3f56d0e11d1a2bb78a7430ce05af49c8102d1c75c8ff84ae4e1c6d
\ No newline at end of file diff --git a/db/schema_migrations/20211209103048 b/db/schema_migrations/20211209103048 new file mode 100644 index 00000000000..133d5fc1ed4 --- /dev/null +++ b/db/schema_migrations/20211209103048 @@ -0,0 +1 @@ +d2d270a335b3a2441a20673bf19d47553f607533d4503e3a01bc3d6d108bcdb3
\ No newline at end of file diff --git a/db/schema_migrations/20220105082217 b/db/schema_migrations/20220105082217 new file mode 100644 index 00000000000..a6232406be6 --- /dev/null +++ b/db/schema_migrations/20220105082217 @@ -0,0 +1 @@ +448481ec9f7dd58d267e3660a49161c0e14baca35e640c59b27f2ebc4367b62a
\ No newline at end of file diff --git a/db/schema_migrations/20220106111958 b/db/schema_migrations/20220106111958 new file mode 100644 index 00000000000..954db532950 --- /dev/null +++ b/db/schema_migrations/20220106111958 @@ -0,0 +1 @@ +c1af9546bdfa0f32c3c2faf362062cd300800514e5b1efd1fa8a1770753d00e5
\ No newline at end of file diff --git a/db/schema_migrations/20220106112043 b/db/schema_migrations/20220106112043 new file mode 100644 index 00000000000..34c8c5152da --- /dev/null +++ b/db/schema_migrations/20220106112043 @@ -0,0 +1 @@ +8b51ae2b13066a56d2131efb7ea746335513031e751fb231e43121552d6f2b1d
\ No newline at end of file diff --git a/db/schema_migrations/20220106112085 b/db/schema_migrations/20220106112085 new file mode 100644 index 00000000000..171f893a0ab --- /dev/null +++ b/db/schema_migrations/20220106112085 @@ -0,0 +1 @@ +f385631d0317630661d487011a228501a6cbc71de25ca457d75e6a815c598045
\ No newline at end of file diff --git a/db/schema_migrations/20220106163326 b/db/schema_migrations/20220106163326 new file mode 100644 index 00000000000..dbfb9079dc1 --- /dev/null +++ b/db/schema_migrations/20220106163326 @@ -0,0 +1 @@ +4726d84ff42e64b1c47c5ba454ff5be05f434a86bb2af4bbe27dd00e5e3da5cb
\ No newline at end of file diff --git a/db/schema_migrations/20220106185033 b/db/schema_migrations/20220106185033 new file mode 100644 index 00000000000..be45c8bab6f --- /dev/null +++ b/db/schema_migrations/20220106185033 @@ -0,0 +1 @@ +5304bc3dada6794c8f6e1082861e12fdfb059effdcd5a17e11af5300e67708bd
\ No newline at end of file diff --git a/db/schema_migrations/20220107064845 b/db/schema_migrations/20220107064845 new file mode 100644 index 00000000000..bd63da88355 --- /dev/null +++ b/db/schema_migrations/20220107064845 @@ -0,0 +1 @@ +c7c645787aadc95c77df6420f437f78aed4e7e862ea2b66e7824766b1d9f3cb5
\ No newline at end of file diff --git a/db/schema_migrations/20220111093534 b/db/schema_migrations/20220111093534 new file mode 100644 index 00000000000..5999dbdf49a --- /dev/null +++ b/db/schema_migrations/20220111093534 @@ -0,0 +1 @@ +ff0127967c3ee6e4f4af528b84024a6a838f8dbeb19cf78d7d913d4fc8e155e7
\ No newline at end of file diff --git a/db/schema_migrations/20220111101421 b/db/schema_migrations/20220111101421 new file mode 100644 index 00000000000..16d47665734 --- /dev/null +++ b/db/schema_migrations/20220111101421 @@ -0,0 +1 @@ +abbba4ccacebb825c3f9cb5b0463d457fd4a7b4396a2184a995e496aebaf4521
\ No newline at end of file diff --git a/db/schema_migrations/20220111154950 b/db/schema_migrations/20220111154950 new file mode 100644 index 00000000000..6070beb76e9 --- /dev/null +++ b/db/schema_migrations/20220111154950 @@ -0,0 +1 @@ +4719c533acaac3234ac0e131c70be49d0f98642e29e7d2e31519cc6c372056bc
\ No newline at end of file diff --git a/db/schema_migrations/20220111154951 b/db/schema_migrations/20220111154951 new file mode 100644 index 00000000000..9d18e4c4d44 --- /dev/null +++ b/db/schema_migrations/20220111154951 @@ -0,0 +1 @@ +48d6eaa68912f702be2bd38609bea4fa807eab7131f7c5e2261416820df9836a
\ No newline at end of file diff --git a/db/schema_migrations/20220113111440 b/db/schema_migrations/20220113111440 new file mode 100644 index 00000000000..e6188a9616f --- /dev/null +++ b/db/schema_migrations/20220113111440 @@ -0,0 +1 @@ +faf899c1aa99e596eb386935ee6ff17a51b7942ee4f6d4cbd1ad2283dd0d40c0
\ No newline at end of file diff --git a/db/schema_migrations/20220117034056 b/db/schema_migrations/20220117034056 new file mode 100644 index 00000000000..acf76bfb9d6 --- /dev/null +++ b/db/schema_migrations/20220117034056 @@ -0,0 +1 @@ +afc54500374602edcdc4fce5acf3673b84882da1afbb5598a6684a5ef480a2d7
\ No newline at end of file diff --git a/db/schema_migrations/20220117082611 b/db/schema_migrations/20220117082611 new file mode 100644 index 00000000000..9dead593ffb --- /dev/null +++ b/db/schema_migrations/20220117082611 @@ -0,0 +1 @@ +28df9a8b5bf73bc33275cfe47f260788fa3263680a97128e086fd1698ccac1d8
\ No newline at end of file diff --git a/db/schema_migrations/20220118015633 b/db/schema_migrations/20220118015633 new file mode 100644 index 00000000000..8ba4a376bcd --- /dev/null +++ b/db/schema_migrations/20220118015633 @@ -0,0 +1 @@ +6a73f49306de7c799a39afa3ac1f761840860833a96f1a91cf992c9a3ebfef9b
\ No newline at end of file diff --git a/db/schema_migrations/20220118020026 b/db/schema_migrations/20220118020026 new file mode 100644 index 00000000000..fe9dcccbc0c --- /dev/null +++ b/db/schema_migrations/20220118020026 @@ -0,0 +1 @@ +77374c81456f235d3afeb45cdda14552e1ef8047de5aaa3f5bb0a82e4aebe849
\ No newline at end of file diff --git a/db/schema_migrations/20220118204039 b/db/schema_migrations/20220118204039 new file mode 100644 index 00000000000..209204054ff --- /dev/null +++ b/db/schema_migrations/20220118204039 @@ -0,0 +1 @@ +9b33f6e0c13acbf1adfc1b70f75418ceabc000a748c9216328ef36f1b8716ded
\ No newline at end of file diff --git a/db/schema_migrations/20220119094023 b/db/schema_migrations/20220119094023 new file mode 100644 index 00000000000..c2bf5ce88d6 --- /dev/null +++ b/db/schema_migrations/20220119094023 @@ -0,0 +1 @@ +4eddd356d87ce8fc8168dabe678211239e8d4051804d51d3bdce8cc137fa5a0d
\ No newline at end of file diff --git a/db/schema_migrations/20220119094503 b/db/schema_migrations/20220119094503 new file mode 100644 index 00000000000..840a4d82593 --- /dev/null +++ b/db/schema_migrations/20220119094503 @@ -0,0 +1 @@ +1048b3a9744f212297c0a3aba176556e92e85f199ac861eb3ee4183eff002860
\ No newline at end of file diff --git a/db/schema_migrations/20220119141407 b/db/schema_migrations/20220119141407 new file mode 100644 index 00000000000..0ff56c63dd6 --- /dev/null +++ b/db/schema_migrations/20220119141407 @@ -0,0 +1 @@ +18b3ef459c3633ebd4b418b4436d3d50b0dc697fa7c4ef4d2e1f62b01d656bce
\ No newline at end of file diff --git a/db/schema_migrations/20220119143130 b/db/schema_migrations/20220119143130 new file mode 100644 index 00000000000..8c9092fd187 --- /dev/null +++ b/db/schema_migrations/20220119143130 @@ -0,0 +1 @@ +a375f82fe0c1ef87aa6abb2142387b852b135be6e2158fd8456b23dc9bcf2a0e
\ No newline at end of file diff --git a/db/schema_migrations/20220119144253 b/db/schema_migrations/20220119144253 new file mode 100644 index 00000000000..ee59402bbcc --- /dev/null +++ b/db/schema_migrations/20220119144253 @@ -0,0 +1 @@ +723db0d234a4dadfdad68a92c249ec0b42e519297f48bcb843e89c1ad97032c7
\ No newline at end of file diff --git a/db/schema_migrations/20220119144458 b/db/schema_migrations/20220119144458 new file mode 100644 index 00000000000..c5eb43a3730 --- /dev/null +++ b/db/schema_migrations/20220119144458 @@ -0,0 +1 @@ +85227d2aa0e984f12362484b23554a4feb1304d055d54da40e20812f2d8c5b9e
\ No newline at end of file diff --git a/db/schema_migrations/20220119151221 b/db/schema_migrations/20220119151221 new file mode 100644 index 00000000000..377170d9cb1 --- /dev/null +++ b/db/schema_migrations/20220119151221 @@ -0,0 +1 @@ +7865f26c43c79681f37ceb6e4fecf6153282856907ddfd8211d6d1d57d1fb7f3
\ No newline at end of file diff --git a/db/schema_migrations/20220119153706 b/db/schema_migrations/20220119153706 new file mode 100644 index 00000000000..446fee12b44 --- /dev/null +++ b/db/schema_migrations/20220119153706 @@ -0,0 +1 @@ +f87eec3c61cfc9dc860fe77af1fbe98c1ea2a9b0dc1b2dbdaaee4276b518af73
\ No newline at end of file diff --git a/db/schema_migrations/20220119154442 b/db/schema_migrations/20220119154442 new file mode 100644 index 00000000000..78880a0164c --- /dev/null +++ b/db/schema_migrations/20220119154442 @@ -0,0 +1 @@ +7cb06f695c7e8e733ea50f0b2e8fbb115d5ac0d7e7f000228bd5ced58ab362c9
\ No newline at end of file diff --git a/db/schema_migrations/20220119170426 b/db/schema_migrations/20220119170426 new file mode 100644 index 00000000000..51274ac5979 --- /dev/null +++ b/db/schema_migrations/20220119170426 @@ -0,0 +1 @@ +a488fecd8e6e99b8d32ac27f72c6a3575b0ed29baaf242133e5d1abbd5b64314
\ No newline at end of file diff --git a/db/schema_migrations/20220119193130 b/db/schema_migrations/20220119193130 new file mode 100644 index 00000000000..5305ff9465e --- /dev/null +++ b/db/schema_migrations/20220119193130 @@ -0,0 +1 @@ +c991eda1b3a972a7da9bdbd5e1f9957394c52246b78d793b4b35fdec9daf6acd
\ No newline at end of file diff --git a/db/schema_migrations/20220119201340 b/db/schema_migrations/20220119201340 new file mode 100644 index 00000000000..0dc36b2dfba --- /dev/null +++ b/db/schema_migrations/20220119201340 @@ -0,0 +1 @@ +62b35cc5bd0abc5b7bcf4347346de832bbbed723fee7860ec649185d4d5fb53c
\ No newline at end of file diff --git a/db/schema_migrations/20220119203119 b/db/schema_migrations/20220119203119 new file mode 100644 index 00000000000..43bdb5b0391 --- /dev/null +++ b/db/schema_migrations/20220119203119 @@ -0,0 +1 @@ +c0f29fd7f960ffd92a65a00e8dce123b91a604f4d89b7cf0bc419fa80495e2e5
\ No newline at end of file diff --git a/db/schema_migrations/20220119220620 b/db/schema_migrations/20220119220620 new file mode 100644 index 00000000000..a6a9abb2acc --- /dev/null +++ b/db/schema_migrations/20220119220620 @@ -0,0 +1 @@ +535f476a358dcb3f3472f1e0ec1afef738f995197b5d1f4fcd61e58a9c9e8e75
\ No newline at end of file diff --git a/db/schema_migrations/20220120033115 b/db/schema_migrations/20220120033115 new file mode 100644 index 00000000000..ef71ca650cd --- /dev/null +++ b/db/schema_migrations/20220120033115 @@ -0,0 +1 @@ +41b67585574f6309d8e32fe695e65fc43f15f6738db713c1a11e04558a5ec515
\ No newline at end of file diff --git a/db/schema_migrations/20220120085655 b/db/schema_migrations/20220120085655 new file mode 100644 index 00000000000..534108786ec --- /dev/null +++ b/db/schema_migrations/20220120085655 @@ -0,0 +1 @@ +966c42749e9d200f2b7295fdbb86e596c33510f0abbf431d40b09629e5e4a6aa
\ No newline at end of file diff --git a/db/schema_migrations/20220120094340 b/db/schema_migrations/20220120094340 new file mode 100644 index 00000000000..423adf5cc94 --- /dev/null +++ b/db/schema_migrations/20220120094340 @@ -0,0 +1 @@ +69d8283501ba6a4946a60e3812fe2cf3031fc4a915d6e7c6fac3bf272423f2f2
\ No newline at end of file diff --git a/db/schema_migrations/20220120123700 b/db/schema_migrations/20220120123700 new file mode 100644 index 00000000000..263901fff19 --- /dev/null +++ b/db/schema_migrations/20220120123700 @@ -0,0 +1 @@ +9e274eae18520821dd890a11c8c6192da82a6051dce9ec2934b1365e57a10fdb
\ No newline at end of file diff --git a/db/schema_migrations/20220120123800 b/db/schema_migrations/20220120123800 new file mode 100644 index 00000000000..6d271f75c08 --- /dev/null +++ b/db/schema_migrations/20220120123800 @@ -0,0 +1 @@ +9d2f0b0d2cb1a5844bdca5bcb4b82fa5cc6b465fa19177f9f6ca16574128fdc8
\ No newline at end of file diff --git a/db/schema_migrations/20220121214752 b/db/schema_migrations/20220121214752 new file mode 100644 index 00000000000..84c03a6ed90 --- /dev/null +++ b/db/schema_migrations/20220121214752 @@ -0,0 +1 @@ +c56983a489b56eb6b4a5cd5ae6947a322fd58b8e96bcdee1e38634d99727c432
\ No newline at end of file diff --git a/db/schema_migrations/20220121214753 b/db/schema_migrations/20220121214753 new file mode 100644 index 00000000000..5142044be97 --- /dev/null +++ b/db/schema_migrations/20220121214753 @@ -0,0 +1 @@ +b7b9f5e516664e7eb3f7a5307d1871bb4f58a31f4807e0298fbf9414bad567fa
\ No newline at end of file diff --git a/db/schema_migrations/20220121221651 b/db/schema_migrations/20220121221651 new file mode 100644 index 00000000000..562751c6084 --- /dev/null +++ b/db/schema_migrations/20220121221651 @@ -0,0 +1 @@ +a1681c1c619db7f4e7e5a760cee7d06a931aa1f02dccfce46be81d75a03ce8ac
\ No newline at end of file diff --git a/db/schema_migrations/20220124130028 b/db/schema_migrations/20220124130028 new file mode 100644 index 00000000000..5ee8e463a55 --- /dev/null +++ b/db/schema_migrations/20220124130028 @@ -0,0 +1 @@ +7f2b3e70e33273d75f68bd1fa33103f24a4e4cfc3f2e5777dfd258b5a2e7bf4e
\ No newline at end of file diff --git a/db/schema_migrations/20220124145019 b/db/schema_migrations/20220124145019 new file mode 100644 index 00000000000..8de01024798 --- /dev/null +++ b/db/schema_migrations/20220124145019 @@ -0,0 +1 @@ +3b1f7a7b6481a960ac25523e5e1b5abc6c1436332d64d4319d9e4112b0fa765e
\ No newline at end of file diff --git a/db/schema_migrations/20220124151456 b/db/schema_migrations/20220124151456 new file mode 100644 index 00000000000..10a7b978e2f --- /dev/null +++ b/db/schema_migrations/20220124151456 @@ -0,0 +1 @@ +5ec73b28adb027a4462ec9b268ef9c505e281f1afedce3c592d431cd90808dac
\ No newline at end of file diff --git a/db/schema_migrations/20220124151949 b/db/schema_migrations/20220124151949 new file mode 100644 index 00000000000..2d6305b9789 --- /dev/null +++ b/db/schema_migrations/20220124151949 @@ -0,0 +1 @@ +4eb33deb4c2d5ff587f8af57b8296e46911f24a6ed0b2f7ff1f36243f1a9013d
\ No newline at end of file diff --git a/db/schema_migrations/20220124152824 b/db/schema_migrations/20220124152824 new file mode 100644 index 00000000000..5a0db5859f0 --- /dev/null +++ b/db/schema_migrations/20220124152824 @@ -0,0 +1 @@ +acf680cbf06d6eb2c0da44d416ff947e0460593cad74499acda91eb4bec63894
\ No newline at end of file diff --git a/db/schema_migrations/20220124153233 b/db/schema_migrations/20220124153233 new file mode 100644 index 00000000000..bfb0d6f3c38 --- /dev/null +++ b/db/schema_migrations/20220124153233 @@ -0,0 +1 @@ +f62f3d4cc6f4704e7b4e7d0b6b8e46ed3de4407f0db4282e2ce845aa6c0b3f3f
\ No newline at end of file diff --git a/db/schema_migrations/20220124153234 b/db/schema_migrations/20220124153234 new file mode 100644 index 00000000000..dfca9995395 --- /dev/null +++ b/db/schema_migrations/20220124153234 @@ -0,0 +1 @@ +0e8559121504f1a34394b5f613ef2c5554261f6aeaeaaf5a15d018803c4e5452
\ No newline at end of file diff --git a/db/schema_migrations/20220124180704 b/db/schema_migrations/20220124180704 new file mode 100644 index 00000000000..ef59507a2e8 --- /dev/null +++ b/db/schema_migrations/20220124180704 @@ -0,0 +1 @@ +5b5f47f1d7038518fef71dd8c0758b234bb890be9aab57b78918f7b2dc39bdc4
\ No newline at end of file diff --git a/db/schema_migrations/20220124180705 b/db/schema_migrations/20220124180705 new file mode 100644 index 00000000000..c1600192af1 --- /dev/null +++ b/db/schema_migrations/20220124180705 @@ -0,0 +1 @@ +6c147287ba8436bd0231dc22195c95a71d19987d23741c1291a117407f493184
\ No newline at end of file diff --git a/db/schema_migrations/20220124184338 b/db/schema_migrations/20220124184338 new file mode 100644 index 00000000000..860b47090c2 --- /dev/null +++ b/db/schema_migrations/20220124184338 @@ -0,0 +1 @@ +ae696157794bcbe3ebd0dc41d7b3fe4dc61982ad4a96fa503fd7857e0d3dab16
\ No newline at end of file diff --git a/db/schema_migrations/20220124204046 b/db/schema_migrations/20220124204046 new file mode 100644 index 00000000000..f8de3adc215 --- /dev/null +++ b/db/schema_migrations/20220124204046 @@ -0,0 +1 @@ +90115936ede32bbf9a299582409cb0686e8072c204c4f91364dfb13195155929
\ No newline at end of file diff --git a/db/schema_migrations/20220124214131 b/db/schema_migrations/20220124214131 new file mode 100644 index 00000000000..7454bd8b3d1 --- /dev/null +++ b/db/schema_migrations/20220124214131 @@ -0,0 +1 @@ +af60c6df0fb178a4820ea8cb40b402178da7fb4b6ebeabb8739dc45b96225f89
\ No newline at end of file diff --git a/db/schema_migrations/20220124215857 b/db/schema_migrations/20220124215857 new file mode 100644 index 00000000000..495e428d2c4 --- /dev/null +++ b/db/schema_migrations/20220124215857 @@ -0,0 +1 @@ +785c2404175faef7d3d6f81ae8652ca0ced0f4b01def8d6364a4450f0db49ecf
\ No newline at end of file diff --git a/db/schema_migrations/20220124221521 b/db/schema_migrations/20220124221521 new file mode 100644 index 00000000000..8400dcbc1e2 --- /dev/null +++ b/db/schema_migrations/20220124221521 @@ -0,0 +1 @@ +4b1dad4fc34717c9b89a770e4e0682b0cee7d421da68223011bb9fde9460d1f8
\ No newline at end of file diff --git a/db/schema_migrations/20220125083520 b/db/schema_migrations/20220125083520 new file mode 100644 index 00000000000..c3fbb6beda5 --- /dev/null +++ b/db/schema_migrations/20220125083520 @@ -0,0 +1 @@ +2c3f7c587b2a20de1d8581584f7392fd81643af4eb7e25ffc8e08514b6ad83ab
\ No newline at end of file diff --git a/db/schema_migrations/20220125084127 b/db/schema_migrations/20220125084127 new file mode 100644 index 00000000000..f9ba7a4628b --- /dev/null +++ b/db/schema_migrations/20220125084127 @@ -0,0 +1 @@ +c50a21430e52fc6ccbe7ab4aba99ae3a48d1c69858f7886da115f54e19fc27ea
\ No newline at end of file diff --git a/db/schema_migrations/20220125084348 b/db/schema_migrations/20220125084348 new file mode 100644 index 00000000000..9d4cbd7c5ed --- /dev/null +++ b/db/schema_migrations/20220125084348 @@ -0,0 +1 @@ +75eb050fc789eb5775a5d3a88c2573dca5c38e16b63cd342bf46dca55d1adaef
\ No newline at end of file diff --git a/db/schema_migrations/20220125122228 b/db/schema_migrations/20220125122228 new file mode 100644 index 00000000000..2add72978c6 --- /dev/null +++ b/db/schema_migrations/20220125122228 @@ -0,0 +1 @@ +26600e01d8b31a4308d0e23564e4d4c52488ec87ad7990a410b7cc0c031f12e7
\ No newline at end of file diff --git a/db/schema_migrations/20220125122640 b/db/schema_migrations/20220125122640 new file mode 100644 index 00000000000..fdb85bb480a --- /dev/null +++ b/db/schema_migrations/20220125122640 @@ -0,0 +1 @@ +51c7ab860b952281bd7f65d68e7a539a8eee57cac3bbdaf439ff5593f5b065ed
\ No newline at end of file diff --git a/db/schema_migrations/20220125122725 b/db/schema_migrations/20220125122725 new file mode 100644 index 00000000000..7a6ef38bfbc --- /dev/null +++ b/db/schema_migrations/20220125122725 @@ -0,0 +1 @@ +7740d1e71571576a709ae5bfd46f60ea3fb4be3f48cddec2cca53f148096cdd7
\ No newline at end of file diff --git a/db/schema_migrations/20220125230538 b/db/schema_migrations/20220125230538 new file mode 100644 index 00000000000..45bd8bfb04c --- /dev/null +++ b/db/schema_migrations/20220125230538 @@ -0,0 +1 @@ +6f3a3712288c3316042426d60f087817eb57a3246b750831aa72f95f30269a5d
\ No newline at end of file diff --git a/db/schema_migrations/20220126201752 b/db/schema_migrations/20220126201752 new file mode 100644 index 00000000000..e5a1970ec9e --- /dev/null +++ b/db/schema_migrations/20220126201752 @@ -0,0 +1 @@ +7731772dfac065a60c1626707913ddf6ff632bb69dd5ed6534e8d29e4e03c573
\ No newline at end of file diff --git a/db/schema_migrations/20220126202654 b/db/schema_migrations/20220126202654 new file mode 100644 index 00000000000..341e2c6b8bf --- /dev/null +++ b/db/schema_migrations/20220126202654 @@ -0,0 +1 @@ +6067e4e22e49548496454b48171f8168f7d5bf626fedab4351e2a37a3f85731b
\ No newline at end of file diff --git a/db/schema_migrations/20220126203421 b/db/schema_migrations/20220126203421 new file mode 100644 index 00000000000..32469cd40ee --- /dev/null +++ b/db/schema_migrations/20220126203421 @@ -0,0 +1 @@ +07f837ddde21e36d1ca6a471dd96350d3020bd30204fca0e093983810c94e54d
\ No newline at end of file diff --git a/db/schema_migrations/20220126210021 b/db/schema_migrations/20220126210021 new file mode 100644 index 00000000000..edb9d9c779d --- /dev/null +++ b/db/schema_migrations/20220126210021 @@ -0,0 +1 @@ +fd7940bb6f077c91d7f9928f574443ba4bf33bb90cb702c0a2ecad14398ab1cc
\ No newline at end of file diff --git a/db/schema_migrations/20220126210022 b/db/schema_migrations/20220126210022 new file mode 100644 index 00000000000..32cb73ee3ee --- /dev/null +++ b/db/schema_migrations/20220126210022 @@ -0,0 +1 @@ +80a75bf72b40ee791bebd9ae97a793ce41fbd352841d83421525b6ad78e1c5e8
\ No newline at end of file diff --git a/db/schema_migrations/20220126210657 b/db/schema_migrations/20220126210657 new file mode 100644 index 00000000000..a3301b46756 --- /dev/null +++ b/db/schema_migrations/20220126210657 @@ -0,0 +1 @@ +853209f3babe2856481591790d9bb67145c4c0c919ed4d8365bb8d498e4f6b8e
\ No newline at end of file diff --git a/db/schema_migrations/20220127112243 b/db/schema_migrations/20220127112243 new file mode 100644 index 00000000000..2c591bdde58 --- /dev/null +++ b/db/schema_migrations/20220127112243 @@ -0,0 +1 @@ +7707b9bcdcd7ec28af31b90355905eb8971c12a90c4334b0ae214e45fac9645a
\ No newline at end of file diff --git a/db/schema_migrations/20220127112412 b/db/schema_migrations/20220127112412 new file mode 100644 index 00000000000..af58ff48473 --- /dev/null +++ b/db/schema_migrations/20220127112412 @@ -0,0 +1 @@ +350409be3f491b61a1d757dbd839b48d088339883e8e019d00ad90e6adc350e6
\ No newline at end of file diff --git a/db/schema_migrations/20220127132200 b/db/schema_migrations/20220127132200 new file mode 100644 index 00000000000..8dc7ac4ddbd --- /dev/null +++ b/db/schema_migrations/20220127132200 @@ -0,0 +1 @@ +394f1fa34ccf9188f25102ac963829ebee07dddaf02f1d5958ec14d701fb6fe8
\ No newline at end of file diff --git a/db/schema_migrations/20220127132201 b/db/schema_migrations/20220127132201 new file mode 100644 index 00000000000..f2c9cbbe38f --- /dev/null +++ b/db/schema_migrations/20220127132201 @@ -0,0 +1 @@ +f8ce7c183352ce08585eda83eb1e22c800b1b2044b93bc11858a74a8bd9a99d4
\ No newline at end of file diff --git a/db/schema_migrations/20220128093756 b/db/schema_migrations/20220128093756 new file mode 100644 index 00000000000..fd24b6cd4cd --- /dev/null +++ b/db/schema_migrations/20220128093756 @@ -0,0 +1 @@ +787b1be4b69ef0eeb049ee6a3d7126dc75094b79fba18f469fffe78b16fce6a3
\ No newline at end of file diff --git a/db/schema_migrations/20220128155251 b/db/schema_migrations/20220128155251 new file mode 100644 index 00000000000..11fa6807ed5 --- /dev/null +++ b/db/schema_migrations/20220128155251 @@ -0,0 +1 @@ +0d121aeecdd6ace1516c2e9b84fefd47d963c4cbe22a0448728241d83da3742e
\ No newline at end of file diff --git a/db/schema_migrations/20220128155814 b/db/schema_migrations/20220128155814 new file mode 100644 index 00000000000..209b0874a84 --- /dev/null +++ b/db/schema_migrations/20220128155814 @@ -0,0 +1 @@ +77cc8fc86f2c6a5ed017dde40dd4db796821a35e6ce4d8dcbe24b2cdaccbb5d9
\ No newline at end of file diff --git a/db/schema_migrations/20220128194722 b/db/schema_migrations/20220128194722 new file mode 100644 index 00000000000..9c06f452c1e --- /dev/null +++ b/db/schema_migrations/20220128194722 @@ -0,0 +1 @@ +087338f0b438d2aa33bc22bd3973d818c5d1f40948525d95181751722158605b
\ No newline at end of file diff --git a/db/schema_migrations/20220131135725 b/db/schema_migrations/20220131135725 new file mode 100644 index 00000000000..d63b24d5d6c --- /dev/null +++ b/db/schema_migrations/20220131135725 @@ -0,0 +1 @@ +a0e9bb92512b9ddb3fd718e086b0fd116ec307be6acc5789a872b1d3004fdebd
\ No newline at end of file diff --git a/db/schema_migrations/20220131192643 b/db/schema_migrations/20220131192643 new file mode 100644 index 00000000000..e947bf0cfbe --- /dev/null +++ b/db/schema_migrations/20220131192643 @@ -0,0 +1 @@ +3b9068f109685dcfa8a0a1fda886cca3909d29cbc280cf70ed9f3d927def12ac
\ No newline at end of file diff --git a/db/schema_migrations/20220201034731 b/db/schema_migrations/20220201034731 new file mode 100644 index 00000000000..59e4fd59720 --- /dev/null +++ b/db/schema_migrations/20220201034731 @@ -0,0 +1 @@ +873ff811d4f70c012785297ee8c07eb496994af69d5ae4b266e8f675c88daca4
\ No newline at end of file diff --git a/db/schema_migrations/20220201141705 b/db/schema_migrations/20220201141705 new file mode 100644 index 00000000000..92835993156 --- /dev/null +++ b/db/schema_migrations/20220201141705 @@ -0,0 +1 @@ +9eb0c4609fbec79370215d05a9a1faf4208b9dcc2bfeb861feeb7c9f354489ab
\ No newline at end of file diff --git a/db/schema_migrations/20220201173212 b/db/schema_migrations/20220201173212 new file mode 100644 index 00000000000..b07c8e371a5 --- /dev/null +++ b/db/schema_migrations/20220201173212 @@ -0,0 +1 @@ +7a48d49d576d183198df370593642419da5707d8b018a23f541c448e2aa7ad65
\ No newline at end of file diff --git a/db/schema_migrations/20220201193033 b/db/schema_migrations/20220201193033 new file mode 100644 index 00000000000..e40840c66fa --- /dev/null +++ b/db/schema_migrations/20220201193033 @@ -0,0 +1 @@ +92bbe74c6c3627dd26f709acd2a20f442212eab933f719be815701a3bc429539
\ No newline at end of file diff --git a/db/schema_migrations/20220201205300 b/db/schema_migrations/20220201205300 new file mode 100644 index 00000000000..86f6dd234fd --- /dev/null +++ b/db/schema_migrations/20220201205300 @@ -0,0 +1 @@ +79a636f33f70327206356abd1793b73a5ef5e920a41662e35cbff5597b03a365
\ No newline at end of file diff --git a/db/schema_migrations/20220202034409 b/db/schema_migrations/20220202034409 new file mode 100644 index 00000000000..4eb359f45e6 --- /dev/null +++ b/db/schema_migrations/20220202034409 @@ -0,0 +1 @@ +0efe482aa626cf80912feaa1176837253b094fc434f273bee35b5fe3e8ce4243
\ No newline at end of file diff --git a/db/schema_migrations/20220202105733 b/db/schema_migrations/20220202105733 new file mode 100644 index 00000000000..473b03d6210 --- /dev/null +++ b/db/schema_migrations/20220202105733 @@ -0,0 +1 @@ +6f2919091a6998f2f18f8dbff3c968e68dc218ab0e51341164d1fc5b8abf72ae
\ No newline at end of file diff --git a/db/schema_migrations/20220202115350 b/db/schema_migrations/20220202115350 new file mode 100644 index 00000000000..9b8148ca2d1 --- /dev/null +++ b/db/schema_migrations/20220202115350 @@ -0,0 +1 @@ +3bcc97592e8e329e39917deffae6619e69215930a688bebad2949f69155b53f9
\ No newline at end of file diff --git a/db/schema_migrations/20220203123333 b/db/schema_migrations/20220203123333 new file mode 100644 index 00000000000..9cc146c4ed7 --- /dev/null +++ b/db/schema_migrations/20220203123333 @@ -0,0 +1 @@ +87cccb30bb6f27a1acb0dd0cb905040e2a0291cefc5f26bb9a08c8be18034ca3
\ No newline at end of file diff --git a/db/schema_migrations/20220203133652 b/db/schema_migrations/20220203133652 new file mode 100644 index 00000000000..7deda2292b4 --- /dev/null +++ b/db/schema_migrations/20220203133652 @@ -0,0 +1 @@ +5642cf604a1aaf8bef6098a9918b582e0e336d79ca3b2a005cf90bb8eab0ca13
\ No newline at end of file diff --git a/db/schema_migrations/20220204053655 b/db/schema_migrations/20220204053655 new file mode 100644 index 00000000000..e096dae0c07 --- /dev/null +++ b/db/schema_migrations/20220204053655 @@ -0,0 +1 @@ +d6b7fa6e5be83aa67bb479604bf6ddb9d8caae82fc8ea1ab7f34d5c534174ecf
\ No newline at end of file diff --git a/db/schema_migrations/20220204154220 b/db/schema_migrations/20220204154220 new file mode 100644 index 00000000000..42da4e82258 --- /dev/null +++ b/db/schema_migrations/20220204154220 @@ -0,0 +1 @@ +efecc3c6468d8a5036352f5b62e8d70de835d1beb4e45ba6d3906906d0317848
\ No newline at end of file diff --git a/db/schema_migrations/20220207083129 b/db/schema_migrations/20220207083129 new file mode 100644 index 00000000000..25dca4578f4 --- /dev/null +++ b/db/schema_migrations/20220207083129 @@ -0,0 +1 @@ +01cc0139097235991fa2caf8b780ccd1c3ce580647197418424ade83ce9be77e
\ No newline at end of file diff --git a/db/schema_migrations/20220208115439 b/db/schema_migrations/20220208115439 new file mode 100644 index 00000000000..72230321625 --- /dev/null +++ b/db/schema_migrations/20220208115439 @@ -0,0 +1 @@ +dbe6760198b8fa068c30871a439298e56802867044a178baa6b8b009f8da13e6
\ No newline at end of file diff --git a/db/schema_migrations/20220208170445 b/db/schema_migrations/20220208170445 new file mode 100644 index 00000000000..3a486a586a8 --- /dev/null +++ b/db/schema_migrations/20220208170445 @@ -0,0 +1 @@ +e00dd618ca393596f3ff05b44b1a9a36183729a864a5cf4b8f1a262dfcdb932b
\ No newline at end of file diff --git a/db/schema_migrations/20220208171826 b/db/schema_migrations/20220208171826 new file mode 100644 index 00000000000..75ae0dcef61 --- /dev/null +++ b/db/schema_migrations/20220208171826 @@ -0,0 +1 @@ +e48473172d7561fb7474e16e291e555843c0ec4543300b007f86cd4a5923db85
\ No newline at end of file diff --git a/db/schema_migrations/20220209111007 b/db/schema_migrations/20220209111007 new file mode 100644 index 00000000000..f10e05b8918 --- /dev/null +++ b/db/schema_migrations/20220209111007 @@ -0,0 +1 @@ +9462258bcbe45ab80f7ef5a02f8b8d5c0ed6ac69bf04b8934ae3dee2261ba458
\ No newline at end of file diff --git a/db/schema_migrations/20220211214605 b/db/schema_migrations/20220211214605 new file mode 100644 index 00000000000..89dbee18ee7 --- /dev/null +++ b/db/schema_migrations/20220211214605 @@ -0,0 +1 @@ +add5ee0b8e090ba740ce738f66ea4f741485a0c84728fecfa5b0488564d55536
\ No newline at end of file diff --git a/db/schema_migrations/20220212120735 b/db/schema_migrations/20220212120735 new file mode 100644 index 00000000000..1ec5f9af681 --- /dev/null +++ b/db/schema_migrations/20220212120735 @@ -0,0 +1 @@ +c075ee9d6efeae4b7a9b6e310f0c3d0bdd0ac6a58dc214427d4de9ae579db50d
\ No newline at end of file diff --git a/db/schema_migrations/20220213104531 b/db/schema_migrations/20220213104531 new file mode 100644 index 00000000000..72656d85fb0 --- /dev/null +++ b/db/schema_migrations/20220213104531 @@ -0,0 +1 @@ +9ce8aa469b9469d25fbba52147e24c95f6242c2ab1e114df8baaf5a45268d2fd
\ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 8d0c7b3d693..aef55d04486 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -45,6 +45,39 @@ RETURN NULL; END $$; +CREATE FUNCTION insert_or_update_vulnerability_reads() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + severity smallint; + state smallint; + report_type smallint; + resolved_on_default_branch boolean; +BEGIN + IF (NEW.vulnerability_id IS NULL AND (TG_OP = 'INSERT' OR TG_OP = 'UPDATE')) THEN + RETURN NULL; + END IF; + + IF (TG_OP = 'UPDATE' AND OLD.vulnerability_id IS NOT NULL AND NEW.vulnerability_id IS NOT NULL) THEN + RETURN NULL; + END IF; + + SELECT + vulnerabilities.severity, vulnerabilities.state, vulnerabilities.report_type, vulnerabilities.resolved_on_default_branch + INTO + severity, state, report_type, resolved_on_default_branch + FROM + vulnerabilities + WHERE + vulnerabilities.id = NEW.vulnerability_id; + + INSERT INTO vulnerability_reads (vulnerability_id, project_id, scanner_id, report_type, severity, state, resolved_on_default_branch, uuid, location_image, cluster_agent_id) + VALUES (NEW.vulnerability_id, NEW.project_id, NEW.scanner_id, report_type, severity, state, resolved_on_default_branch, NEW.uuid::uuid, NEW.location->>'image', NEW.location->'kubernetes_resource'->>'agent_id') + ON CONFLICT(vulnerability_id) DO NOTHING; + RETURN NULL; +END +$$; + CREATE FUNCTION insert_projects_sync_event() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -60,10 +93,7 @@ CREATE FUNCTION integrations_set_type_new() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -UPDATE integrations SET type_new = regexp_replace(NEW.type, '\A(.+)Service\Z', 'Integrations::\1') -WHERE integrations.id = NEW.id; -RETURN NULL; - +UPDATE integrations SET type_new = COALESCE(NEW.type_new, regexp_replace(NEW.type, '\A(.+)Service\Z', 'Integrations::\1')) , type = COALESCE(NEW.type, regexp_replace(NEW.type_new, '\AIntegrations::(.+)\Z', '\1Service')) WHERE integrations.id = NEW.id; RETURN NULL; END $$; @@ -107,6 +137,83 @@ RETURN NULL; END $$; +CREATE FUNCTION set_has_issues_on_vulnerability_reads() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +UPDATE + vulnerability_reads +SET + has_issues = true +WHERE + vulnerability_id = NEW.vulnerability_id AND has_issues IS FALSE; +RETURN NULL; + +END +$$; + +CREATE FUNCTION unset_has_issues_on_vulnerability_reads() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + has_issue_links integer; +BEGIN + PERFORM 1 + FROM + vulnerability_reads + WHERE + vulnerability_id = OLD.vulnerability_id + FOR UPDATE; + + SELECT 1 INTO has_issue_links FROM vulnerability_issue_links WHERE vulnerability_id = OLD.vulnerability_id LIMIT 1; + + IF (has_issue_links = 1) THEN + RETURN NULL; + END IF; + + UPDATE + vulnerability_reads + SET + has_issues = false + WHERE + vulnerability_id = OLD.vulnerability_id; + + RETURN NULL; +END +$$; + +CREATE FUNCTION update_location_from_vulnerability_occurrences() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +UPDATE + vulnerability_reads +SET + location_image = NEW.location->>'image', + cluster_agent_id = NEW.location->'kubernetes_resource'->>'agent_id' +WHERE + vulnerability_id = NEW.vulnerability_id; +RETURN NULL; + +END +$$; + +CREATE FUNCTION update_vulnerability_reads_from_vulnerability() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +UPDATE + vulnerability_reads +SET + severity = NEW.severity, + state = NEW.state, + resolved_on_default_branch = NEW.resolved_on_default_branch +WHERE vulnerability_id = NEW.id; +RETURN NULL; + +END +$$; + CREATE TABLE audit_events ( id bigint NOT NULL, author_id integer NOT NULL, @@ -127,6 +234,20 @@ CREATE TABLE audit_events ( ) PARTITION BY RANGE (created_at); +CREATE TABLE batched_background_migration_job_transition_logs ( + id bigint NOT NULL, + batched_background_migration_job_id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + previous_status smallint NOT NULL, + next_status smallint NOT NULL, + exception_class text, + exception_message text, + CONSTRAINT check_50e580811a CHECK ((char_length(exception_message) <= 1000)), + CONSTRAINT check_76e202c37a CHECK ((char_length(exception_class) <= 100)) +) +PARTITION BY RANGE (created_at); + CREATE TABLE incident_management_pending_alert_escalations ( id bigint NOT NULL, rule_id bigint NOT NULL, @@ -155,6 +276,7 @@ CREATE TABLE loose_foreign_keys_deleted_records ( created_at timestamp with time zone DEFAULT now() NOT NULL, fully_qualified_table_name text NOT NULL, consume_after timestamp with time zone DEFAULT now(), + cleanup_attempts smallint DEFAULT 0, CONSTRAINT check_1a541f3235 CHECK ((char_length(fully_qualified_table_name) <= 150)) ) PARTITION BY LIST (partition); @@ -9792,6 +9914,29 @@ CREATE SEQUENCE alert_management_alert_assignees_id_seq ALTER SEQUENCE alert_management_alert_assignees_id_seq OWNED BY alert_management_alert_assignees.id; +CREATE TABLE alert_management_alert_metric_images ( + id bigint NOT NULL, + alert_id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store smallint, + file text NOT NULL, + url text, + url_text text, + CONSTRAINT check_2587666252 CHECK ((char_length(url_text) <= 128)), + CONSTRAINT check_4d811d9007 CHECK ((char_length(url) <= 255)), + CONSTRAINT check_70fafae519 CHECK ((char_length(file) <= 255)) +); + +CREATE SEQUENCE alert_management_alert_metric_images_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE alert_management_alert_metric_images_id_seq OWNED BY alert_management_alert_metric_images.id; + CREATE TABLE alert_management_alert_user_mentions ( id bigint NOT NULL, alert_management_alert_id bigint NOT NULL, @@ -10493,6 +10638,10 @@ CREATE TABLE application_settings ( runner_token_expiration_interval integer, group_runner_token_expiration_interval integer, project_runner_token_expiration_interval integer, + ecdsa_sk_key_restriction integer DEFAULT 0 NOT NULL, + ed25519_sk_key_restriction integer DEFAULT 0 NOT NULL, + users_get_by_id_limit integer DEFAULT 300 NOT NULL, + users_get_by_id_limit_allowlist text[] DEFAULT '{}'::text[] NOT NULL, CONSTRAINT app_settings_container_reg_cleanup_tags_max_list_size_positive CHECK ((container_registry_cleanup_tags_service_max_list_size >= 0)), CONSTRAINT app_settings_dep_proxy_ttl_policies_worker_capacity_positive CHECK ((dependency_proxy_ttl_group_policy_worker_capacity >= 0)), CONSTRAINT app_settings_ext_pipeline_validation_service_url_text_limit CHECK ((char_length(external_pipeline_validation_service_url) <= 255)), @@ -10777,7 +10926,9 @@ CREATE TABLE audit_events_external_audit_event_destinations ( destination_url text NOT NULL, created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, - CONSTRAINT check_2feafb9daf CHECK ((char_length(destination_url) <= 255)) + verification_token text, + CONSTRAINT check_2feafb9daf CHECK ((char_length(destination_url) <= 255)), + CONSTRAINT check_8ec80a7d06 CHECK ((char_length(verification_token) <= 24)) ); CREATE SEQUENCE audit_events_external_audit_event_destinations_id_seq @@ -10894,6 +11045,15 @@ CREATE TABLE banned_users ( user_id bigint NOT NULL ); +CREATE SEQUENCE batched_background_migration_job_transition_logs_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE batched_background_migration_job_transition_logs_id_seq OWNED BY batched_background_migration_job_transition_logs.id; + CREATE TABLE batched_background_migration_jobs ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -10937,6 +11097,7 @@ CREATE TABLE batched_background_migrations ( job_arguments jsonb DEFAULT '"[]"'::jsonb NOT NULL, total_tuple_count bigint, pause_ms integer DEFAULT 100 NOT NULL, + max_batch_size integer, CONSTRAINT check_5bb0382d6f CHECK ((char_length(column_name) <= 63)), CONSTRAINT check_6b6a06254a CHECK ((char_length(table_name) <= 63)), CONSTRAINT check_batch_size_in_range CHECK ((batch_size >= sub_batch_size)), @@ -11702,6 +11863,27 @@ CREATE SEQUENCE ci_instance_variables_id_seq ALTER SEQUENCE ci_instance_variables_id_seq OWNED BY ci_instance_variables.id; +CREATE TABLE ci_job_artifact_states ( + verification_started_at timestamp with time zone, + verification_retry_at timestamp with time zone, + verified_at timestamp with time zone, + job_artifact_id bigint NOT NULL, + verification_state smallint DEFAULT 0 NOT NULL, + verification_retry_count smallint, + verification_checksum bytea, + verification_failure text, + CONSTRAINT check_df832b66ea CHECK ((char_length(verification_failure) <= 255)) +); + +CREATE SEQUENCE ci_job_artifact_states_job_artifact_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE ci_job_artifact_states_job_artifact_id_seq OWNED BY ci_job_artifact_states.job_artifact_id; + CREATE TABLE ci_job_artifacts ( project_id integer NOT NULL, file_type integer NOT NULL, @@ -12193,6 +12375,7 @@ CREATE TABLE ci_runners ( config jsonb DEFAULT '{}'::jsonb NOT NULL, executor_type smallint, maintainer_note text, + token_expires_at timestamp with time zone, CONSTRAINT check_56f5ea8804 CHECK ((char_length(maintainer_note) <= 255)) ); @@ -13249,6 +13432,7 @@ CREATE TABLE dast_site_profiles ( auth_password_field text, auth_username text, target_type smallint DEFAULT 0 NOT NULL, + scan_method smallint DEFAULT 0 NOT NULL, CONSTRAINT check_5203110fee CHECK ((char_length(auth_username_field) <= 255)), CONSTRAINT check_6cfab17b48 CHECK ((char_length(name) <= 255)), CONSTRAINT check_c329dffdba CHECK ((char_length(auth_password_field) <= 255)), @@ -13687,7 +13871,9 @@ CREATE TABLE draft_notes ( "position" text, original_position text, change_position text, - commit_id bytea + commit_id bytea, + line_code text, + CONSTRAINT check_c497a94a0e CHECK ((char_length(line_code) <= 255)) ); CREATE SEQUENCE draft_notes_id_seq @@ -15350,6 +15536,8 @@ CREATE TABLE issuable_metric_images ( file_store smallint, file text NOT NULL, url text, + url_text text, + CONSTRAINT check_3bc6d47661 CHECK ((char_length(url_text) <= 128)), CONSTRAINT check_5b3011e234 CHECK ((char_length(url) <= 255)), CONSTRAINT check_7ed527062f CHECK ((char_length(file) <= 255)) ); @@ -16347,7 +16535,8 @@ CREATE TABLE merge_requests_compliance_violations ( id bigint NOT NULL, violating_user_id bigint NOT NULL, merge_request_id bigint NOT NULL, - reason smallint NOT NULL + reason smallint NOT NULL, + severity_level smallint DEFAULT 0 NOT NULL ); CREATE SEQUENCE merge_requests_compliance_violations_id_seq @@ -16511,7 +16700,8 @@ CREATE TABLE namespace_root_storage_statistics ( packages_size bigint DEFAULT 0 NOT NULL, snippets_size bigint DEFAULT 0 NOT NULL, pipeline_artifacts_size bigint DEFAULT 0 NOT NULL, - uploads_size bigint DEFAULT 0 NOT NULL + uploads_size bigint DEFAULT 0 NOT NULL, + dependency_proxy_size bigint DEFAULT 0 NOT NULL ); CREATE TABLE namespace_settings ( @@ -16541,7 +16731,8 @@ CREATE TABLE namespace_statistics ( shared_runners_seconds integer DEFAULT 0 NOT NULL, shared_runners_seconds_last_reset timestamp without time zone, storage_size bigint DEFAULT 0 NOT NULL, - wiki_size bigint DEFAULT 0 NOT NULL + wiki_size bigint DEFAULT 0 NOT NULL, + dependency_proxy_size bigint DEFAULT 0 NOT NULL ); CREATE SEQUENCE namespace_statistics_id_seq @@ -18551,6 +18742,8 @@ CREATE TABLE project_settings ( merge_commit_template text, has_shimo boolean DEFAULT false NOT NULL, squash_commit_template text, + show_diff_preview_in_email boolean DEFAULT true NOT NULL, + legacy_open_source_license_available boolean DEFAULT true NOT NULL, CONSTRAINT check_3a03e7557a CHECK ((char_length(previous_default_branch) <= 4096)), CONSTRAINT check_b09644994b CHECK ((char_length(squash_commit_template) <= 500)), CONSTRAINT check_bde223416c CHECK ((show_default_award_emojis IS NOT NULL)), @@ -19396,7 +19589,6 @@ CREATE TABLE security_findings ( confidence smallint NOT NULL, project_fingerprint text, deduplicated boolean DEFAULT false NOT NULL, - "position" integer, uuid uuid, overridden_uuid uuid, CONSTRAINT check_b9508c6df8 CHECK ((char_length(project_fingerprint) <= 40)) @@ -20123,6 +20315,7 @@ CREATE TABLE topics ( avatar text, description text, total_projects_count bigint DEFAULT 0 NOT NULL, + non_private_projects_count bigint DEFAULT 0 NOT NULL, CONSTRAINT check_26753fb43a CHECK ((char_length(avatar) <= 255)), CONSTRAINT check_5d1a07c8c8 CHECK ((char_length(description) <= 1024)), CONSTRAINT check_7a90d4c757 CHECK ((char_length(name) <= 255)) @@ -20761,9 +20954,7 @@ CREATE TABLE vulnerability_finding_evidences ( created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, vulnerability_occurrence_id bigint NOT NULL, - summary text, - data jsonb DEFAULT '{}'::jsonb NOT NULL, - CONSTRAINT check_5773b236fb CHECK ((char_length(summary) <= 8000000)) + data jsonb DEFAULT '{}'::jsonb NOT NULL ); CREATE SEQUENCE vulnerability_finding_evidences_id_seq @@ -21347,6 +21538,8 @@ ALTER TABLE ONLY agent_project_authorizations ALTER COLUMN id SET DEFAULT nextva ALTER TABLE ONLY alert_management_alert_assignees ALTER COLUMN id SET DEFAULT nextval('alert_management_alert_assignees_id_seq'::regclass); +ALTER TABLE ONLY alert_management_alert_metric_images ALTER COLUMN id SET DEFAULT nextval('alert_management_alert_metric_images_id_seq'::regclass); + ALTER TABLE ONLY alert_management_alert_user_mentions ALTER COLUMN id SET DEFAULT nextval('alert_management_alert_user_mentions_id_seq'::regclass); ALTER TABLE ONLY alert_management_alerts ALTER COLUMN id SET DEFAULT nextval('alert_management_alerts_id_seq'::regclass); @@ -21413,6 +21606,8 @@ ALTER TABLE ONLY background_migration_jobs ALTER COLUMN id SET DEFAULT nextval(' ALTER TABLE ONLY badges ALTER COLUMN id SET DEFAULT nextval('badges_id_seq'::regclass); +ALTER TABLE ONLY batched_background_migration_job_transition_logs ALTER COLUMN id SET DEFAULT nextval('batched_background_migration_job_transition_logs_id_seq'::regclass); + ALTER TABLE ONLY batched_background_migration_jobs ALTER COLUMN id SET DEFAULT nextval('batched_background_migration_jobs_id_seq'::regclass); ALTER TABLE ONLY batched_background_migrations ALTER COLUMN id SET DEFAULT nextval('batched_background_migrations_id_seq'::regclass); @@ -21487,6 +21682,8 @@ ALTER TABLE ONLY ci_group_variables ALTER COLUMN id SET DEFAULT nextval('ci_grou ALTER TABLE ONLY ci_instance_variables ALTER COLUMN id SET DEFAULT nextval('ci_instance_variables_id_seq'::regclass); +ALTER TABLE ONLY ci_job_artifact_states ALTER COLUMN job_artifact_id SET DEFAULT nextval('ci_job_artifact_states_job_artifact_id_seq'::regclass); + ALTER TABLE ONLY ci_job_artifacts ALTER COLUMN id SET DEFAULT nextval('ci_job_artifacts_id_seq'::regclass); ALTER TABLE ONLY ci_job_token_project_scope_links ALTER COLUMN id SET DEFAULT nextval('ci_job_token_project_scope_links_id_seq'::regclass); @@ -22715,6 +22912,9 @@ ALTER TABLE ONLY agent_project_authorizations ALTER TABLE ONLY alert_management_alert_assignees ADD CONSTRAINT alert_management_alert_assignees_pkey PRIMARY KEY (id); +ALTER TABLE ONLY alert_management_alert_metric_images + ADD CONSTRAINT alert_management_alert_metric_images_pkey PRIMARY KEY (id); + ALTER TABLE ONLY alert_management_alert_user_mentions ADD CONSTRAINT alert_management_alert_user_mentions_pkey PRIMARY KEY (id); @@ -22829,6 +23029,9 @@ ALTER TABLE ONLY badges ALTER TABLE ONLY banned_users ADD CONSTRAINT banned_users_pkey PRIMARY KEY (user_id); +ALTER TABLE ONLY batched_background_migration_job_transition_logs + ADD CONSTRAINT batched_background_migration_job_transition_logs_pkey PRIMARY KEY (id, created_at); + ALTER TABLE ONLY batched_background_migration_jobs ADD CONSTRAINT batched_background_migration_jobs_pkey PRIMARY KEY (id); @@ -22958,6 +23161,9 @@ ALTER TABLE ONLY ci_group_variables ALTER TABLE ONLY ci_instance_variables ADD CONSTRAINT ci_instance_variables_pkey PRIMARY KEY (id); +ALTER TABLE ONLY ci_job_artifact_states + ADD CONSTRAINT ci_job_artifact_states_pkey PRIMARY KEY (job_artifact_id); + ALTER TABLE ONLY ci_job_artifacts ADD CONSTRAINT ci_job_artifacts_pkey PRIMARY KEY (id); @@ -25071,6 +25277,8 @@ CREATE UNIQUE INDEX finding_link_url_idx ON vulnerability_finding_links USING bt CREATE INDEX finding_links_on_vulnerability_occurrence_id ON vulnerability_finding_links USING btree (vulnerability_occurrence_id); +CREATE INDEX i_batched_background_migration_job_transition_logs_on_job_id ON ONLY batched_background_migration_job_transition_logs USING btree (batched_background_migration_job_id); + CREATE UNIQUE INDEX i_ci_job_token_project_scope_links_on_source_and_target_project ON ci_job_token_project_scope_links USING btree (source_project_id, target_project_id); CREATE INDEX idx_analytics_devops_adoption_segments_on_namespace_id ON analytics_devops_adoption_segments USING btree (namespace_id); @@ -25089,6 +25297,12 @@ CREATE INDEX idx_container_exp_policies_on_project_id_next_run_at_enabled ON con CREATE INDEX idx_container_repos_on_exp_cleanup_status_project_id_start_date ON container_repositories USING btree (expiration_policy_cleanup_status, project_id, expiration_policy_started_at); +CREATE INDEX idx_container_repos_on_import_started_at_when_importing ON container_repositories USING btree (migration_import_started_at) WHERE (migration_state = 'importing'::text); + +CREATE INDEX idx_container_repos_on_pre_import_done_at_when_pre_import_done ON container_repositories USING btree (migration_pre_import_done_at) WHERE (migration_state = 'pre_import_done'::text); + +CREATE INDEX idx_container_repos_on_pre_import_started_at_when_pre_importing ON container_repositories USING btree (migration_pre_import_started_at) WHERE (migration_state = 'pre_importing'::text); + CREATE INDEX idx_deployment_clusters_on_cluster_id_and_kubernetes_namespace ON deployment_clusters USING btree (cluster_id, kubernetes_namespace); CREATE INDEX idx_devops_adoption_segments_namespace_end_time ON analytics_devops_adoption_snapshots USING btree (namespace_id, end_time); @@ -25207,6 +25421,8 @@ CREATE INDEX idx_security_scans_on_scan_type ON security_scans USING btree (scan CREATE UNIQUE INDEX idx_serverless_domain_cluster_on_clusters_applications_knative ON serverless_domain_cluster USING btree (clusters_applications_knative_id); +CREATE INDEX idx_user_details_on_provisioned_by_group_id_user_id ON user_details USING btree (provisioned_by_group_id, user_id); + CREATE UNIQUE INDEX idx_vuln_signatures_on_occurrences_id_and_signature_sha ON vulnerability_finding_signatures USING btree (finding_id, signature_sha); CREATE UNIQUE INDEX idx_vuln_signatures_uniqueness_signature_sha ON vulnerability_finding_signatures USING btree (finding_id, algorithm_type, signature_sha); @@ -25245,6 +25461,8 @@ CREATE INDEX index_alert_assignees_on_alert_id ON alert_management_alert_assigne CREATE UNIQUE INDEX index_alert_assignees_on_user_id_and_alert_id ON alert_management_alert_assignees USING btree (user_id, alert_id); +CREATE INDEX index_alert_management_alert_metric_images_on_alert_id ON alert_management_alert_metric_images USING btree (alert_id); + CREATE INDEX index_alert_management_alerts_on_domain ON alert_management_alerts USING btree (domain); CREATE INDEX index_alert_management_alerts_on_environment_id ON alert_management_alerts USING btree (environment_id) WHERE (environment_id IS NOT NULL); @@ -25363,6 +25581,8 @@ CREATE INDEX index_approvers_on_user_id ON approvers USING btree (user_id); CREATE UNIQUE INDEX index_atlassian_identities_on_extern_uid ON atlassian_identities USING btree (extern_uid); +CREATE UNIQUE INDEX index_audit_events_external_audit_on_verification_token ON audit_events_external_audit_event_destinations USING btree (verification_token); + CREATE INDEX index_authentication_events_on_provider ON authentication_events USING btree (provider); CREATE INDEX index_authentication_events_on_provider_user_id_created_at ON authentication_events USING btree (provider, user_id, created_at) WHERE (result = 1); @@ -25573,6 +25793,8 @@ CREATE UNIQUE INDEX index_ci_group_variables_on_group_id_and_key_and_environment CREATE UNIQUE INDEX index_ci_instance_variables_on_key ON ci_instance_variables USING btree (key); +CREATE INDEX index_ci_job_artifact_states_on_job_artifact_id ON ci_job_artifact_states USING btree (job_artifact_id); + CREATE INDEX index_ci_job_artifacts_for_terraform_reports ON ci_job_artifacts USING btree (project_id, id) WHERE (file_type = 18); CREATE INDEX index_ci_job_artifacts_id_for_terraform_reports ON ci_job_artifacts USING btree (id) WHERE (file_type = 18); @@ -25713,8 +25935,6 @@ CREATE UNIQUE INDEX index_ci_runner_namespaces_on_runner_id_and_namespace_id ON CREATE INDEX index_ci_runner_projects_on_project_id ON ci_runner_projects USING btree (project_id); -CREATE INDEX index_ci_runner_projects_on_runner_id ON ci_runner_projects USING btree (runner_id); - CREATE INDEX index_ci_runners_on_active ON ci_runners USING btree (active, id); CREATE INDEX index_ci_runners_on_contacted_at_and_id_desc ON ci_runners USING btree (contacted_at, id DESC); @@ -25739,6 +25959,10 @@ CREATE INDEX index_ci_runners_on_token ON ci_runners USING btree (token); CREATE INDEX index_ci_runners_on_token_encrypted ON ci_runners USING btree (token_encrypted); +CREATE INDEX index_ci_runners_on_token_expires_at_and_id_desc ON ci_runners USING btree (token_expires_at, id DESC); + +CREATE INDEX index_ci_runners_on_token_expires_at_desc_and_id_desc ON ci_runners USING btree (token_expires_at DESC, id DESC); + CREATE UNIQUE INDEX index_ci_running_builds_on_build_id ON ci_running_builds USING btree (build_id); CREATE INDEX index_ci_running_builds_on_project_id ON ci_running_builds USING btree (project_id); @@ -25791,8 +26015,6 @@ CREATE INDEX index_ci_variables_on_key ON ci_variables USING btree (key); CREATE UNIQUE INDEX index_ci_variables_on_project_id_and_key_and_environment_scope ON ci_variables USING btree (project_id, key, environment_scope); -CREATE INDEX index_cluster_agent_tokens_on_agent_id_and_last_used_at ON cluster_agent_tokens USING btree (agent_id, last_used_at DESC NULLS LAST); - CREATE INDEX index_cluster_agent_tokens_on_agent_id_status_last_used_at ON cluster_agent_tokens USING btree (agent_id, status, last_used_at DESC NULLS LAST); CREATE INDEX index_cluster_agent_tokens_on_created_by_user_id ON cluster_agent_tokens USING btree (created_by_user_id); @@ -25849,8 +26071,6 @@ CREATE INDEX index_clusters_integration_elasticstack_enabled ON clusters_integra CREATE INDEX index_clusters_integration_prometheus_enabled ON clusters_integration_prometheus USING btree (enabled, created_at, cluster_id); -CREATE INDEX index_clusters_kubernetes_namespaces_on_cluster_id ON clusters_kubernetes_namespaces USING btree (cluster_id); - CREATE INDEX index_clusters_kubernetes_namespaces_on_cluster_project_id ON clusters_kubernetes_namespaces USING btree (cluster_project_id); CREATE INDEX index_clusters_kubernetes_namespaces_on_environment_id ON clusters_kubernetes_namespaces USING btree (environment_id); @@ -25873,6 +26093,10 @@ CREATE INDEX index_composer_cache_files_where_namespace_id_is_null ON packages_c CREATE INDEX index_container_expiration_policies_on_next_run_at_and_enabled ON container_expiration_policies USING btree (next_run_at, enabled); +CREATE INDEX index_container_repositories_on_greatest_done_at ON container_repositories USING btree (GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at)) WHERE (migration_state = ANY (ARRAY['import_done'::text, 'pre_import_done'::text, 'import_aborted'::text])); + +CREATE INDEX index_container_repositories_on_migration_state_import_done_at ON container_repositories USING btree (migration_state, migration_import_done_at); + 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); @@ -26081,8 +26305,6 @@ CREATE INDEX index_emails_on_user_id ON emails USING btree (user_id); CREATE INDEX index_enabled_clusters_on_id ON clusters USING btree (id) WHERE (enabled = true); -CREATE INDEX index_environments_on_auto_stop_at ON environments USING btree (auto_stop_at) WHERE (auto_stop_at IS NOT NULL); - CREATE INDEX index_environments_on_name_varchar_pattern_ops ON environments USING btree (name varchar_pattern_ops); CREATE UNIQUE INDEX index_environments_on_project_id_and_name ON environments USING btree (project_id, name); @@ -26101,8 +26323,6 @@ CREATE UNIQUE INDEX index_epic_board_list_preferences_on_user_and_list ON boards CREATE UNIQUE INDEX index_epic_board_recent_visits_on_user_group_and_board ON boards_epic_board_recent_visits USING btree (user_id, group_id, epic_board_id); -CREATE INDEX index_epic_issues_on_epic_id ON epic_issues USING btree (epic_id); - CREATE INDEX index_epic_issues_on_epic_id_and_issue_id ON epic_issues USING btree (epic_id, issue_id); CREATE UNIQUE INDEX index_epic_issues_on_issue_id ON epic_issues USING btree (issue_id); @@ -26445,8 +26665,12 @@ CREATE INDEX index_insights_on_project_id ON insights USING btree (project_id); CREATE INDEX index_integrations_on_inherit_from_id ON integrations USING btree (inherit_from_id); +CREATE INDEX index_integrations_on_project_and_type_new_where_inherit_null ON integrations USING btree (project_id, type_new) WHERE (inherit_from_id IS NULL); + CREATE INDEX index_integrations_on_project_and_type_where_inherit_null ON integrations USING btree (project_id, type) WHERE (inherit_from_id IS NULL); +CREATE UNIQUE INDEX index_integrations_on_project_id_and_type_new_unique ON integrations USING btree (project_id, type_new); + CREATE UNIQUE INDEX index_integrations_on_project_id_and_type_unique ON integrations USING btree (project_id, type); CREATE INDEX index_integrations_on_template ON integrations USING btree (template); @@ -26459,8 +26683,18 @@ CREATE UNIQUE INDEX index_integrations_on_type_and_template_partial ON integrati CREATE INDEX index_integrations_on_type_id_when_active_and_project_id_not_nu ON integrations USING btree (type, id) WHERE ((active = true) AND (project_id IS NOT NULL)); +CREATE INDEX index_integrations_on_type_new ON integrations USING btree (type_new); + +CREATE INDEX index_integrations_on_type_new_and_instance_partial ON integrations USING btree (type_new, instance) WHERE (instance = true); + +CREATE INDEX index_integrations_on_type_new_and_template_partial ON integrations USING btree (type_new, template) WHERE (template = true); + +CREATE INDEX index_integrations_on_type_new_id_when_active_and_has_project ON integrations USING btree (type_new, id) WHERE ((active = true) AND (project_id IS NOT NULL)); + CREATE UNIQUE INDEX index_integrations_on_unique_group_id_and_type ON integrations USING btree (group_id, type); +CREATE INDEX index_integrations_on_unique_group_id_and_type_new ON integrations USING btree (group_id, type_new); + CREATE INDEX index_internal_ids_on_namespace_id ON internal_ids USING btree (namespace_id); CREATE INDEX index_internal_ids_on_project_id ON internal_ids USING btree (project_id); @@ -26563,6 +26797,14 @@ CREATE INDEX index_jira_imports_on_user_id ON jira_imports USING btree (user_id) CREATE INDEX index_jira_tracker_data_on_service_id ON jira_tracker_data USING btree (service_id); +CREATE INDEX index_job_artifact_states_failed_verification ON ci_job_artifact_states USING btree (verification_retry_at NULLS FIRST) WHERE (verification_state = 3); + +CREATE INDEX index_job_artifact_states_needs_verification ON ci_job_artifact_states USING btree (verification_state) WHERE ((verification_state = 0) OR (verification_state = 3)); + +CREATE INDEX index_job_artifact_states_on_verification_state ON ci_job_artifact_states USING btree (verification_state); + +CREATE INDEX index_job_artifact_states_pending_verification ON ci_job_artifact_states USING btree (verified_at NULLS FIRST) WHERE (verification_state = 0); + CREATE INDEX index_keys_on_expires_at_and_id ON keys USING btree (date(timezone('UTC'::text, expires_at)), id) WHERE (expiry_notification_delivered_at IS NULL); CREATE UNIQUE INDEX index_keys_on_fingerprint ON keys USING btree (fingerprint); @@ -26935,6 +27177,10 @@ 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_merge_request_assignees_state ON merge_request_assignees USING btree (state) WHERE (state = 2); + +CREATE INDEX index_on_merge_request_reviewers_state ON merge_request_reviewers USING btree (state) WHERE (state = 2); + CREATE INDEX index_on_merge_requests_for_latest_diffs ON merge_requests USING btree (target_project_id) INCLUDE (id, latest_merge_request_diff_id); COMMENT ON INDEX index_on_merge_requests_for_latest_diffs IS 'Index used to efficiently obtain the oldest merge request for a commit SHA'; @@ -27555,8 +27801,6 @@ 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); @@ -27779,6 +28023,8 @@ CREATE UNIQUE INDEX index_token_with_ivs_on_hashed_plaintext_token ON token_with CREATE UNIQUE INDEX index_token_with_ivs_on_hashed_token ON token_with_ivs USING btree (hashed_token); +CREATE INDEX index_topics_non_private_projects_count ON topics USING btree (non_private_projects_count DESC, id); + CREATE UNIQUE INDEX index_topics_on_name ON topics USING btree (name); CREATE INDEX index_topics_on_name_trigram ON topics USING gin (name gin_trgm_ops); @@ -27793,6 +28039,8 @@ CREATE INDEX index_u2f_registrations_on_user_id ON u2f_registrations USING btree CREATE UNIQUE INDEX index_uniq_im_issuable_escalation_statuses_on_issue_id ON incident_management_issuable_escalation_statuses USING btree (issue_id); +CREATE UNIQUE INDEX index_unique_ci_runner_projects_on_runner_id_and_project_id ON ci_runner_projects USING btree (runner_id, project_id); + CREATE UNIQUE INDEX index_unique_issue_metrics_issue_id ON issue_metrics USING btree (issue_id); CREATE INDEX index_unit_test_failures_failed_at ON ci_unit_test_failures USING btree (failed_at DESC); @@ -27843,8 +28091,6 @@ CREATE UNIQUE INDEX index_user_details_on_phone ON user_details USING btree (pho COMMENT ON INDEX index_user_details_on_phone IS 'JiHu-specific index'; -CREATE INDEX index_user_details_on_provisioned_by_group_id ON user_details USING btree (provisioned_by_group_id); - CREATE UNIQUE INDEX index_user_details_on_user_id ON user_details USING btree (user_id); CREATE INDEX index_user_group_callouts_on_group_id ON user_group_callouts USING btree (group_id); @@ -27949,6 +28195,10 @@ CREATE INDEX index_vulnerabilities_on_last_edited_by_id ON vulnerabilities USING CREATE INDEX index_vulnerabilities_on_milestone_id ON vulnerabilities USING btree (milestone_id); +CREATE INDEX index_vulnerabilities_on_project_id_and_id ON vulnerabilities USING btree (project_id, id); + +CREATE INDEX index_vulnerabilities_on_project_id_and_id_active_cis ON vulnerabilities USING btree (project_id, id) WHERE ((report_type = 7) AND (state = ANY (ARRAY[1, 4]))); + CREATE INDEX index_vulnerabilities_on_project_id_and_state_and_severity ON vulnerabilities USING btree (project_id, state, severity); CREATE INDEX index_vulnerabilities_on_resolved_by_id ON vulnerabilities USING btree (resolved_by_id); @@ -28027,8 +28277,6 @@ CREATE INDEX index_vulnerability_occurrences_on_project_fingerprint ON vulnerabi 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); - CREATE UNIQUE INDEX index_vulnerability_occurrences_on_uuid ON vulnerability_occurrences USING btree (uuid); CREATE INDEX index_vulnerability_occurrences_on_vulnerability_id ON vulnerability_occurrences USING btree (vulnerability_id); @@ -28155,10 +28403,16 @@ CREATE UNIQUE INDEX taggings_idx ON taggings USING btree (tag_id, taggable_id, t CREATE UNIQUE INDEX term_agreements_unique_index ON term_agreements USING btree (user_id, term_id); -CREATE INDEX tmp_idx_deduplicate_vulnerability_occurrences ON vulnerability_occurrences USING btree (project_id, report_type, location_fingerprint, primary_identifier_id, id); +CREATE INDEX tmp_gitlab_subscriptions_max_seats_used_migration ON gitlab_subscriptions USING btree (id) WHERE ((start_date >= '2021-08-02'::date) AND (start_date <= '2021-11-20'::date) AND (max_seats_used <> 0) AND (max_seats_used > seats_in_use) AND (max_seats_used > seats)); + +CREATE INDEX tmp_gitlab_subscriptions_max_seats_used_migration_2 ON gitlab_subscriptions USING btree (id) WHERE ((start_date < '2021-08-02'::date) AND (max_seats_used <> 0) AND (max_seats_used > seats_in_use) AND (max_seats_used > seats)); CREATE INDEX tmp_idx_vulnerability_occurrences_on_id_where_report_type_7_99 ON vulnerability_occurrences USING btree (id) WHERE (report_type = ANY (ARRAY[7, 99])); +CREATE INDEX tmp_index_container_repositories_on_id_migration_state ON container_repositories USING btree (id, migration_state); + +CREATE INDEX tmp_index_for_namespace_id_migration_on_routes ON routes USING btree (id) WHERE ((namespace_id IS NULL) AND ((source_type)::text = 'Namespace'::text)); + CREATE INDEX tmp_index_members_on_state ON members USING btree (state) WHERE (state = 2); CREATE INDEX tmp_index_namespaces_empty_traversal_ids_with_child_namespaces ON namespaces USING btree (id) WHERE ((parent_id IS NOT NULL) AND (traversal_ids = '{}'::integer[])); @@ -29125,6 +29379,8 @@ CREATE TRIGGER trigger_has_external_wiki_on_type_new_updated AFTER UPDATE OF typ CREATE TRIGGER trigger_has_external_wiki_on_update AFTER UPDATE ON integrations FOR EACH ROW WHEN (((new.type_new = 'Integrations::ExternalWiki'::text) AND (old.active <> new.active) AND (new.project_id IS NOT NULL))) EXECUTE FUNCTION set_has_external_wiki(); +CREATE TRIGGER trigger_insert_or_update_vulnerability_reads_from_occurrences AFTER INSERT OR UPDATE ON vulnerability_occurrences FOR EACH ROW EXECUTE FUNCTION insert_or_update_vulnerability_reads(); + CREATE TRIGGER trigger_namespaces_parent_id_on_insert AFTER INSERT ON namespaces FOR EACH ROW EXECUTE FUNCTION insert_namespaces_sync_event(); CREATE TRIGGER trigger_namespaces_parent_id_on_update AFTER UPDATE ON namespaces FOR EACH ROW WHEN ((old.parent_id IS DISTINCT FROM new.parent_id)) EXECUTE FUNCTION insert_namespaces_sync_event(); @@ -29135,6 +29391,14 @@ CREATE TRIGGER trigger_projects_parent_id_on_update AFTER UPDATE ON projects FOR CREATE TRIGGER trigger_type_new_on_insert AFTER INSERT ON integrations FOR EACH ROW EXECUTE FUNCTION integrations_set_type_new(); +CREATE TRIGGER trigger_update_has_issues_on_vulnerability_issue_links_delete AFTER DELETE ON vulnerability_issue_links FOR EACH ROW EXECUTE FUNCTION unset_has_issues_on_vulnerability_reads(); + +CREATE TRIGGER trigger_update_has_issues_on_vulnerability_issue_links_update AFTER INSERT ON vulnerability_issue_links FOR EACH ROW EXECUTE FUNCTION set_has_issues_on_vulnerability_reads(); + +CREATE TRIGGER trigger_update_location_on_vulnerability_occurrences_update AFTER UPDATE ON vulnerability_occurrences FOR EACH ROW WHEN (((new.report_type = ANY (ARRAY[2, 7])) AND (((old.location ->> 'image'::text) IS DISTINCT FROM (new.location ->> 'image'::text)) OR (((old.location -> 'kubernetes_resource'::text) ->> 'agent_id'::text) IS DISTINCT FROM ((new.location -> 'kubernetes_resource'::text) ->> 'agent_id'::text))))) EXECUTE FUNCTION update_location_from_vulnerability_occurrences(); + +CREATE TRIGGER trigger_update_vulnerability_reads_on_vulnerability_update AFTER UPDATE ON vulnerabilities FOR EACH ROW WHEN (((old.severity IS DISTINCT FROM new.severity) OR (old.state IS DISTINCT FROM new.state) OR (old.resolved_on_default_branch IS DISTINCT FROM new.resolved_on_default_branch))) EXECUTE FUNCTION update_vulnerability_reads_from_vulnerability(); + CREATE TRIGGER users_loose_fk_trigger AFTER DELETE ON users REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); ALTER TABLE ONLY chat_names @@ -29236,9 +29500,6 @@ ALTER TABLE ONLY agent_project_authorizations ALTER TABLE ONLY vulnerabilities ADD CONSTRAINT fk_1d37cddf91 FOREIGN KEY (epic_id) REFERENCES epics(id) ON DELETE SET NULL; -ALTER TABLE ONLY ci_sources_pipelines - ADD CONSTRAINT fk_1e53c97c0a FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY boards ADD CONSTRAINT fk_1e9a074a35 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -29260,9 +29521,6 @@ ALTER TABLE ONLY users_star_projects ALTER TABLE ONLY alert_management_alerts ADD CONSTRAINT fk_2358b75436 FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE SET NULL; -ALTER TABLE ONLY ci_stages - ADD CONSTRAINT fk_2360681d1d FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY import_failures ADD CONSTRAINT fk_24b824da43 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -29371,9 +29629,6 @@ ALTER TABLE ONLY remote_mirrors ALTER TABLE ONLY incident_management_timeline_events ADD CONSTRAINT fk_4432fc4d78 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_runner_projects - ADD CONSTRAINT fk_4478a6f1e4 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY todos ADD CONSTRAINT fk_45054f9c45 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -29392,9 +29647,6 @@ ALTER TABLE ONLY alert_management_alerts ALTER TABLE ONLY path_locks ADD CONSTRAINT fk_5265c98f24 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY dast_site_profiles_pipelines - ADD CONSTRAINT fk_53849b0ad5 FOREIGN KEY (ci_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE; - ALTER TABLE ONLY clusters_applications_prometheus ADD CONSTRAINT fk_557e773639 FOREIGN KEY (cluster_id) REFERENCES clusters(id) ON DELETE CASCADE; @@ -29548,9 +29800,6 @@ ALTER TABLE ONLY merge_request_diffs ALTER TABLE ONLY requirements ADD CONSTRAINT fk_85044baef0 FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_pipelines - ADD CONSTRAINT fk_86635dbd80 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY geo_event_log ADD CONSTRAINT fk_86c84214ec FOREIGN KEY (repository_renamed_event_id) REFERENCES geo_repository_renamed_events(id) ON DELETE CASCADE; @@ -29584,9 +29833,6 @@ ALTER TABLE ONLY releases ALTER TABLE ONLY protected_tags ADD CONSTRAINT fk_8e4af87648 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_pipeline_schedules - ADD CONSTRAINT fk_8ead60fcc4 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY todos ADD CONSTRAINT fk_91d1f47b13 FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE; @@ -29653,9 +29899,6 @@ ALTER TABLE ONLY issues ALTER TABLE ONLY ci_builds ADD CONSTRAINT fk_a2141b1522 FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; -ALTER TABLE ONLY ci_pipelines - ADD CONSTRAINT fk_a23be95014 FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE; - ALTER TABLE ONLY bulk_import_entities ADD CONSTRAINT fk_a44ff95be5 FOREIGN KEY (parent_id) REFERENCES bulk_import_entities(id) ON DELETE CASCADE; @@ -29665,9 +29908,6 @@ ALTER TABLE ONLY users ALTER TABLE ONLY lfs_objects_projects ADD CONSTRAINT fk_a56e02279c FOREIGN KEY (lfs_object_id) REFERENCES lfs_objects(id) ON DELETE RESTRICT NOT VALID; -ALTER TABLE ONLY dast_profiles_pipelines - ADD CONSTRAINT fk_a60cad829d FOREIGN KEY (ci_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE; - ALTER TABLE ONLY merge_requests ADD CONSTRAINT fk_a6963e8447 FOREIGN KEY (target_project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -29692,15 +29932,9 @@ ALTER TABLE ONLY boards ALTER TABLE ONLY member_tasks ADD CONSTRAINT fk_ab636303dd FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_sources_pipelines - ADD CONSTRAINT fk_acd9737679 FOREIGN KEY (source_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY merge_requests ADD CONSTRAINT fk_ad525e1f87 FOREIGN KEY (merge_user_id) REFERENCES users(id) ON DELETE SET NULL; -ALTER TABLE ONLY ci_variables - ADD CONSTRAINT fk_ada5eb64b3 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY merge_request_metrics ADD CONSTRAINT fk_ae440388cc FOREIGN KEY (latest_closed_by_id) REFERENCES users(id) ON DELETE SET NULL; @@ -29770,9 +30004,6 @@ ALTER TABLE ONLY ci_sources_pipelines ALTER TABLE ONLY packages_maven_metadata ADD CONSTRAINT fk_be88aed360 FOREIGN KEY (package_id) REFERENCES packages_packages(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_builds - ADD CONSTRAINT fk_befce0568a FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY design_management_versions ADD CONSTRAINT fk_c1440b4896 FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE SET NULL; @@ -29908,8 +30139,8 @@ ALTER TABLE ONLY ci_builds_metadata ALTER TABLE ONLY gitlab_subscriptions ADD CONSTRAINT fk_e2595d00a1 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_triggers - ADD CONSTRAINT fk_e3e63f966e FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; +ALTER TABLE ONLY ci_builds + ADD CONSTRAINT fk_e4ef9c2f27 FOREIGN KEY (runner_id) REFERENCES ci_runners(id) ON DELETE SET NULL NOT VALID; ALTER TABLE ONLY merge_requests ADD CONSTRAINT fk_e719a85f8a FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE SET NULL; @@ -29932,12 +30163,6 @@ ALTER TABLE ONLY sprints ALTER TABLE ONLY application_settings ADD CONSTRAINT fk_e8a145f3a7 FOREIGN KEY (instance_administrators_group_id) REFERENCES namespaces(id) ON DELETE SET NULL; -ALTER TABLE ONLY vulnerability_statistics - ADD CONSTRAINT fk_e8b13c928f FOREIGN KEY (latest_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; - -ALTER TABLE ONLY ci_triggers - ADD CONSTRAINT fk_e8e10d1964 FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE; - ALTER TABLE ONLY integrations ADD CONSTRAINT fk_e8fe908a34 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -30007,9 +30232,6 @@ ALTER TABLE ONLY system_note_metadata ALTER TABLE ONLY vulnerability_remediations ADD CONSTRAINT fk_fc61a535a0 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY merge_requests - ADD CONSTRAINT fk_fd82eae0b9 FOREIGN KEY (head_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; - ALTER TABLE ONLY project_import_data ADD CONSTRAINT fk_ffb9ee3a10 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -30064,9 +30286,6 @@ 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 ci_subscriptions_projects - ADD CONSTRAINT fk_rails_0818751483 FOREIGN KEY (downstream_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY trending_projects ADD CONSTRAINT fk_rails_09feecd872 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -30229,9 +30448,6 @@ ALTER TABLE ONLY boards_epic_lists ALTER TABLE ONLY approval_merge_request_rules_groups ADD CONSTRAINT fk_rails_2020a7124a FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; -ALTER TABLE ONLY vulnerability_feedback - ADD CONSTRAINT fk_rails_20976e6fd9 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; - ALTER TABLE ONLY work_item_types ADD CONSTRAINT fk_rails_20f694a960 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -30346,6 +30562,9 @@ ALTER TABLE ONLY container_repositories ALTER TABLE ONLY clusters_applications_jupyter ADD CONSTRAINT fk_rails_331f0aff78 FOREIGN KEY (oauth_application_id) REFERENCES oauth_applications(id) ON DELETE SET NULL; +ALTER TABLE ONLY alert_management_alert_metric_images + ADD CONSTRAINT fk_rails_338e55b408 FOREIGN KEY (alert_id) REFERENCES alert_management_alerts(id) ON DELETE CASCADE; + ALTER TABLE ONLY suggestions ADD CONSTRAINT fk_rails_33b03a535c FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE; @@ -30433,9 +30652,6 @@ ALTER TABLE ONLY geo_node_namespace_links ALTER TABLE ONLY epic_issues ADD CONSTRAINT fk_rails_4209981af6 FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_refs - ADD CONSTRAINT fk_rails_4249db8cc3 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY ci_resources ADD CONSTRAINT fk_rails_430336af2d FOREIGN KEY (resource_group_id) REFERENCES ci_resource_groups(id) ON DELETE CASCADE; @@ -30481,9 +30697,6 @@ ALTER TABLE ONLY user_custom_attributes ALTER TABLE ONLY upcoming_reconciliations ADD CONSTRAINT fk_rails_497b4938ac FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_job_token_project_scope_links - ADD CONSTRAINT fk_rails_4b2ee3290b FOREIGN KEY (source_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY group_deletion_schedules ADD CONSTRAINT fk_rails_4b8c694a6c FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -30529,9 +30742,6 @@ ALTER TABLE ONLY resource_iteration_events ALTER TABLE ONLY status_page_settings ADD CONSTRAINT fk_rails_506e5ba391 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_project_monthly_usages - ADD CONSTRAINT fk_rails_508bcd4aa6 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY project_repository_storage_moves ADD CONSTRAINT fk_rails_5106dbd44a FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -30643,9 +30853,6 @@ ALTER TABLE ONLY evidences ALTER TABLE ONLY jira_imports ADD CONSTRAINT fk_rails_63cbe52ada FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY vulnerability_occurrence_pipelines - ADD CONSTRAINT fk_rails_6421e35d7d FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE; - ALTER TABLE ONLY group_deploy_tokens ADD CONSTRAINT fk_rails_6477b01f6b FOREIGN KEY (deploy_token_id) REFERENCES deploy_tokens(id) ON DELETE CASCADE; @@ -30655,9 +30862,6 @@ ALTER TABLE ONLY reviews ALTER TABLE ONLY operations_feature_flags ADD CONSTRAINT fk_rails_648e241be7 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_sources_projects - ADD CONSTRAINT fk_rails_64b6855cbc FOREIGN KEY (source_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY board_group_recent_visits ADD CONSTRAINT fk_rails_64bfc19bc5 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; @@ -30697,9 +30901,6 @@ ALTER TABLE ONLY resource_iteration_events ALTER TABLE ONLY geo_hashed_storage_migrated_events ADD CONSTRAINT fk_rails_687ed7d7c5 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_job_token_project_scope_links - ADD CONSTRAINT fk_rails_6904b38465 FOREIGN KEY (target_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY plan_limits ADD CONSTRAINT fk_rails_69f8b6184f FOREIGN KEY (plan_id) REFERENCES plans(id) ON DELETE CASCADE; @@ -30793,9 +30994,6 @@ ALTER TABLE ONLY boards_epic_user_preferences ALTER TABLE ONLY packages_debian_group_distribution_keys ADD CONSTRAINT fk_rails_779438f163 FOREIGN KEY (distribution_id) REFERENCES packages_debian_group_distributions(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_subscriptions_projects - ADD CONSTRAINT fk_rails_7871f9a97b FOREIGN KEY (upstream_project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY terraform_states ADD CONSTRAINT fk_rails_78f54ca485 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -30823,6 +31021,9 @@ ALTER TABLE ONLY application_settings ALTER TABLE ONLY clusters_kubernetes_namespaces ADD CONSTRAINT fk_rails_7e7688ecaf FOREIGN KEY (cluster_id) REFERENCES clusters(id) ON DELETE CASCADE; +ALTER TABLE ONLY ci_job_artifact_states + ADD CONSTRAINT fk_rails_80a9cba3b2 FOREIGN KEY (job_artifact_id) REFERENCES ci_job_artifacts(id) ON DELETE CASCADE; + ALTER TABLE ONLY approval_merge_request_rules_users ADD CONSTRAINT fk_rails_80e6801803 FOREIGN KEY (approval_merge_request_rule_id) REFERENCES approval_merge_request_rules(id) ON DELETE CASCADE; @@ -30964,9 +31165,6 @@ ALTER TABLE ONLY group_repository_storage_moves ALTER TABLE ONLY resource_label_events ADD CONSTRAINT fk_rails_9851a00031 FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_job_artifacts - ADD CONSTRAINT fk_rails_9862d392f9 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY board_project_recent_visits ADD CONSTRAINT fk_rails_98f8843922 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -31150,6 +31348,9 @@ ALTER TABLE ONLY packages_debian_project_component_files ALTER TABLE ONLY namespace_aggregation_schedules ADD CONSTRAINT fk_rails_b565c8d16c FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; +ALTER TABLE batched_background_migration_job_transition_logs + ADD CONSTRAINT fk_rails_b7523a175b FOREIGN KEY (batched_background_migration_job_id) REFERENCES batched_background_migration_jobs(id) ON DELETE CASCADE; + ALTER TABLE ONLY approval_project_rules_protected_branches ADD CONSTRAINT fk_rails_b7567b031b FOREIGN KEY (protected_branch_id) REFERENCES protected_branches(id) ON DELETE CASCADE; @@ -31180,9 +31381,6 @@ ALTER TABLE ONLY projects_sync_events ALTER TABLE ONLY approval_merge_request_rules_users ADD CONSTRAINT fk_rails_bc8972fa55 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; -ALTER TABLE ONLY external_pull_requests - ADD CONSTRAINT fk_rails_bcae9b5c7b FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY elasticsearch_indexed_projects ADD CONSTRAINT fk_rails_bd13bbdc3d FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -31540,9 +31738,6 @@ ALTER TABLE ONLY security_trainings ALTER TABLE ONLY merge_requests_closing_issues ADD CONSTRAINT fk_rails_f8540692be FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE; -ALTER TABLE ONLY merge_trains - ADD CONSTRAINT fk_rails_f90820cb08 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; - ALTER TABLE ONLY banned_users ADD CONSTRAINT fk_rails_fa5bb598e5 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; @@ -31585,9 +31780,6 @@ ALTER TABLE ONLY resource_label_events ALTER TABLE ONLY pages_deployment_states ADD CONSTRAINT fk_rails_ff6ca551a4 FOREIGN KEY (pages_deployment_id) REFERENCES pages_deployments(id) ON DELETE CASCADE; -ALTER TABLE ONLY ci_builds_metadata - ADD CONSTRAINT fk_rails_ffcf702a02 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - ALTER TABLE ONLY security_orchestration_policy_configurations ADD CONSTRAINT fk_security_policy_configurations_management_project_id FOREIGN KEY (security_policy_management_project_id) REFERENCES projects(id) ON DELETE CASCADE; |