Remove temporary container_repositories indexes
What does this MR do and why?
This MR removes temporary indexes that were created during container registry migration.
We have verified in db-main-replica-gprd
that the indexes are no longer in use.
sql
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'tmp_index_container_repos_on_non_migrated';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'tmp_index_container_repositories_on_id_migration_state';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'tmp_index_migrated_container_registries';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'idx_container_repos_on_import_started_at_when_importing';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'idx_container_repos_on_migration_state_migration_plan_created';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'idx_container_repos_on_pre_import_done_at_when_pre_import_done';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'idx_container_repos_on_pre_import_started_at_when_pre_importing';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'index_container_repositories_on_greatest_completed_at';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
gitlabhq_production=> SELECT idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE indexrelname = 'index_container_repositories_on_migration_state_import_done_at';
idx_scan | idx_tup_read | idx_tup_fetch
----------+--------------+---------------
0 | 0 | 0
(1 row)
Screenshots or screen recordings
None.
Database Migration
up
main: == [advisory_lock_connection] object_id: 228740, pg_backend_pid: 69848
main: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: migrating ========
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0884s
main: -- indexes(:container_repositories)
main: -> 0.0032s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- indexes(:container_repositories)
main: -> 0.0021s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- indexes(:container_repositories)
main: -> 0.0023s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0005s
main: -- indexes(:container_repositories)
main: -> 0.0026s
main: -- current_schema()
main: -> 0.0001s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- indexes(:container_repositories)
main: -> 0.0022s
main: -- current_schema()
main: -> 0.0003s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- indexes(:container_repositories)
main: -> 0.0023s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0005s
main: -- indexes(:container_repositories)
main: -> 0.0026s
main: -- current_schema()
main: -> 0.0001s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0005s
main: -- indexes(:container_repositories)
main: -> 0.0025s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- indexes(:container_repositories)
main: -> 0.0027s
main: -- current_schema()
main: -> 0.0002s
main: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: migrated (0.1487s)
main: == [advisory_lock_connection] object_id: 228740, pg_backend_pid: 69848
ci: == [advisory_lock_connection] object_id: 229100, pg_backend_pid: 69852
ci: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: migrating ========
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0007s
ci: -- indexes(:container_repositories)
ci: -> 0.0039s
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0006s
ci: -- indexes(:container_repositories)
ci: -> 0.0029s
ci: -- current_schema()
ci: -> 0.0001s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- indexes(:container_repositories)
ci: -> 0.0025s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0006s
ci: -- indexes(:container_repositories)
ci: -> 0.0023s
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- indexes(:container_repositories)
ci: -> 0.0029s
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0005s
ci: -- indexes(:container_repositories)
ci: -> 0.0023s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- indexes(:container_repositories)
ci: -> 0.0025s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- indexes(:container_repositories)
ci: -> 0.0028s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- indexes(:container_repositories)
ci: -> 0.0027s
ci: -- current_schema()
ci: -> 0.0002s
ci: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: migrated (0.0694s)
ci: == [advisory_lock_connection] object_id: 229100, pg_backend_pid: 69852
down
main: == [advisory_lock_connection] object_id: 228500, pg_backend_pid: 3077
main: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: reverting ========
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0663s
main: -- index_exists?(:container_repositories, [:project_id, :id], {:name=>"tmp_index_container_repos_on_non_migrated", :where=>"migration_state != 'import_done'", :algorithm=>:concurrently})
main: -> 0.0036s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0004s
main: -- add_index(:container_repositories, [:project_id, :id], {:name=>"tmp_index_container_repos_on_non_migrated", :where=>"migration_state != 'import_done'", :algorithm=>:concurrently})
main: -> 0.0016s
main: -- execute("RESET statement_timeout")
main: -> 0.0003s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- index_exists?(:container_repositories, [:id, :migration_state], {:name=>"tmp_index_container_repositories_on_id_migration_state", :algorithm=>:concurrently})
main: -> 0.0024s
main: -- add_index(:container_repositories, [:id, :migration_state], {:name=>"tmp_index_container_repositories_on_id_migration_state", :algorithm=>:concurrently})
main: -> 0.0012s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- index_exists?(:container_repositories, [:project_id], {:name=>"tmp_index_migrated_container_registries", :where=>"migration_state = 'import_done' OR created_at >= '2022-01-23'", :algorithm=>:concurrently})
main: -> 0.0026s
main: -- add_index(:container_repositories, [:project_id], {:name=>"tmp_index_migrated_container_registries", :where=>"migration_state = 'import_done' OR created_at >= '2022-01-23'", :algorithm=>:concurrently})
main: -> 0.0010s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- index_exists?(:container_repositories, [:migration_import_started_at], {:name=>"idx_container_repos_on_import_started_at_when_importing", :where=>"migration_state = 'importing'::text", :algorithm=>:concurrently})
main: -> 0.0025s
main: -- add_index(:container_repositories, [:migration_import_started_at], {:name=>"idx_container_repos_on_import_started_at_when_importing", :where=>"migration_state = 'importing'::text", :algorithm=>:concurrently})
main: -> 0.0009s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- index_exists?(:container_repositories, [:migration_state, :migration_plan, :created_at], {:name=>"idx_container_repos_on_migration_state_migration_plan_created", :algorithm=>:concurrently})
main: -> 0.0030s
main: -- add_index(:container_repositories, [:migration_state, :migration_plan, :created_at], {:name=>"idx_container_repos_on_migration_state_migration_plan_created", :algorithm=>:concurrently})
main: -> 0.0010s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0003s
main: -- index_exists?(:container_repositories, [:migration_pre_import_done_at], {:name=>"idx_container_repos_on_pre_import_done_at_when_pre_import_done", :where=>"migration_state = 'pre_import_done'::text", :algorithm=>:concurrently})
main: -> 0.0029s
main: -- add_index(:container_repositories, [:migration_pre_import_done_at], {:name=>"idx_container_repos_on_pre_import_done_at_when_pre_import_done", :where=>"migration_state = 'pre_import_done'::text", :algorithm=>:concurrently})
main: -> 0.0012s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- index_exists?(:container_repositories, [:migration_pre_import_started_at], {:name=>"idx_container_repos_on_pre_import_started_at_when_pre_importing", :where=>"migration_state = 'pre_importing'::text", :algorithm=>:concurrently})
main: -> 0.0034s
main: -- add_index(:container_repositories, [:migration_pre_import_started_at], {:name=>"idx_container_repos_on_pre_import_started_at_when_pre_importing", :where=>"migration_state = 'pre_importing'::text", :algorithm=>:concurrently})
main: -> 0.0008s
main: -- execute(" CREATE INDEX CONCURRENTLY index_container_repositories_on_greatest_completed_at ON container_repositories\n USING btree (GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at))\n WHERE (migration_state = ANY (ARRAY['import_done'::text, 'pre_import_done'::text, 'import_aborted'::text, 'import_skipped'::text]));\n")
main: -> 0.0009s
main: -- transaction_open?()
main: -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main: -> 0.0004s
main: -- index_exists?(:container_repositories, [:migration_state, :migration_import_done_at], {:name=>"index_container_repositories_on_migration_state_import_done_at", :algorithm=>:concurrently})
main: -> 0.0037s
main: -- add_index(:container_repositories, [:migration_state, :migration_import_done_at], {:name=>"index_container_repositories_on_migration_state_import_done_at", :algorithm=>:concurrently})
main: -> 0.0009s
main: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: reverted (0.1399s)
main: == [advisory_lock_connection] object_id: 228500, pg_backend_pid: 3077
ci: == [advisory_lock_connection] object_id: 228420, pg_backend_pid: 3703
ci: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: reverting ========
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0717s
ci: -- index_exists?(:container_repositories, [:project_id, :id], {:name=>"tmp_index_container_repos_on_non_migrated", :where=>"migration_state != 'import_done'", :algorithm=>:concurrently})
ci: -> 0.0048s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0003s
ci: -- add_index(:container_repositories, [:project_id, :id], {:name=>"tmp_index_container_repos_on_non_migrated", :where=>"migration_state != 'import_done'", :algorithm=>:concurrently})
ci: -> 0.0021s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0004s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0007s
ci: -- index_exists?(:container_repositories, [:id, :migration_state], {:name=>"tmp_index_container_repositories_on_id_migration_state", :algorithm=>:concurrently})
ci: -> 0.0040s
ci: -- add_index(:container_repositories, [:id, :migration_state], {:name=>"tmp_index_container_repositories_on_id_migration_state", :algorithm=>:concurrently})
ci: -> 0.0013s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- index_exists?(:container_repositories, [:project_id], {:name=>"tmp_index_migrated_container_registries", :where=>"migration_state = 'import_done' OR created_at >= '2022-01-23'", :algorithm=>:concurrently})
ci: -> 0.0043s
ci: -- add_index(:container_repositories, [:project_id], {:name=>"tmp_index_migrated_container_registries", :where=>"migration_state = 'import_done' OR created_at >= '2022-01-23'", :algorithm=>:concurrently})
ci: -> 0.0011s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0008s
ci: -- index_exists?(:container_repositories, [:migration_import_started_at], {:name=>"idx_container_repos_on_import_started_at_when_importing", :where=>"migration_state = 'importing'::text", :algorithm=>:concurrently})
ci: -> 0.0049s
ci: -- add_index(:container_repositories, [:migration_import_started_at], {:name=>"idx_container_repos_on_import_started_at_when_importing", :where=>"migration_state = 'importing'::text", :algorithm=>:concurrently})
ci: -> 0.0011s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0006s
ci: -- index_exists?(:container_repositories, [:migration_state, :migration_plan, :created_at], {:name=>"idx_container_repos_on_migration_state_migration_plan_created", :algorithm=>:concurrently})
ci: -> 0.0047s
ci: -- add_index(:container_repositories, [:migration_state, :migration_plan, :created_at], {:name=>"idx_container_repos_on_migration_state_migration_plan_created", :algorithm=>:concurrently})
ci: -> 0.0015s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0006s
ci: -- index_exists?(:container_repositories, [:migration_pre_import_done_at], {:name=>"idx_container_repos_on_pre_import_done_at_when_pre_import_done", :where=>"migration_state = 'pre_import_done'::text", :algorithm=>:concurrently})
ci: -> 0.0061s
ci: -- add_index(:container_repositories, [:migration_pre_import_done_at], {:name=>"idx_container_repos_on_pre_import_done_at_when_pre_import_done", :where=>"migration_state = 'pre_import_done'::text", :algorithm=>:concurrently})
ci: -> 0.0015s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0004s
ci: -- index_exists?(:container_repositories, [:migration_pre_import_started_at], {:name=>"idx_container_repos_on_pre_import_started_at_when_pre_importing", :where=>"migration_state = 'pre_importing'::text", :algorithm=>:concurrently})
ci: -> 0.0059s
ci: -- add_index(:container_repositories, [:migration_pre_import_started_at], {:name=>"idx_container_repos_on_pre_import_started_at_when_pre_importing", :where=>"migration_state = 'pre_importing'::text", :algorithm=>:concurrently})
ci: -> 0.0017s
ci: -- execute(" CREATE INDEX CONCURRENTLY index_container_repositories_on_greatest_completed_at ON container_repositories\n USING btree (GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at))\n WHERE (migration_state = ANY (ARRAY['import_done'::text, 'pre_import_done'::text, 'import_aborted'::text, 'import_skipped'::text]));\n")
ci: -> 0.0015s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci: -> 0.0011s
ci: -- index_exists?(:container_repositories, [:migration_state, :migration_import_done_at], {:name=>"index_container_repositories_on_migration_state_import_done_at", :algorithm=>:concurrently})
ci: -> 0.0068s
ci: -- add_index(:container_repositories, [:migration_state, :migration_import_done_at], {:name=>"index_container_repositories_on_migration_state_import_done_at", :algorithm=>:concurrently})
ci: -> 0.0010s
ci: == 20230615144627 RemoveTemporaryContainerRepositoryIndexes: reverted (0.1891s)
ci: == [advisory_lock_connection] object_id: 228420, pg_backend_pid: 3703
How to set up and validate locally
- Run
gdk psql
- Run
\d container_repositories
in thepsql
console. - Note the
Indexes:
list in the output. This is immediately below the column list.
Output on the MR branch, after running rails db:migrate
:
output
Table "public.container_repositories"
Column | Type | Collation | Nullable | Default
----------------------------------+-----------------------------+-----------+----------+----------------------------------------------------
id | integer | | not null | nextval('container_repositories_id_seq'::regclass)
project_id | integer | | not null |
name | character varying | | not null |
created_at | timestamp without time zone | | not null |
updated_at | timestamp without time zone | | not null |
status | smallint | | |
expiration_policy_started_at | timestamp with time zone | | |
expiration_policy_cleanup_status | smallint | | not null | 0
expiration_policy_completed_at | timestamp with time zone | | |
migration_pre_import_started_at | timestamp with time zone | | |
migration_pre_import_done_at | timestamp with time zone | | |
migration_import_started_at | timestamp with time zone | | |
migration_import_done_at | timestamp with time zone | | |
migration_aborted_at | timestamp with time zone | | |
migration_skipped_at | timestamp with time zone | | |
migration_retries_count | integer | | not null | 0
migration_skipped_reason | smallint | | |
migration_state | text | | not null | 'default'::text
migration_aborted_in_state | text | | |
migration_plan | text | | |
last_cleanup_deleted_tags_count | integer | | |
delete_started_at | timestamp with time zone | | |
status_updated_at | timestamp with time zone | | |
Indexes:
"container_repositories_pkey" PRIMARY KEY, btree (id)
"idx_container_repos_on_exp_cleanup_status_project_id_start_date" btree (expiration_policy_cleanup_status, project_id, expiration_policy_started_at)
"index_container_repositories_on_project_id_and_id" btree (project_id, id)
"index_container_repositories_on_project_id_and_name" UNIQUE, btree (project_id, name)
"index_container_repositories_on_status_and_id" btree (status, id) WHERE status IS NOT NULL
"index_container_repository_on_name_trigram" gin (name gin_trgm_ops)
Check constraints:
"check_05e9012f36" CHECK (char_length(migration_plan) <= 255)
"check_13c58fe73a" CHECK (char_length(migration_state) <= 255)
"check_97f0249439" CHECK (char_length(migration_aborted_in_state) <= 255)
Foreign-key constraints:
"fk_rails_32f7bf5aad" FOREIGN KEY (project_id) REFERENCES projects(id)
Referenced by:
TABLE "container_repository_states" CONSTRAINT "fk_rails_63436c99ce" FOREIGN KEY (container_repository_id) REFERENCES container_repositories(id) ON DELETE CASCADE
Output on master branch:
NOTE: indexes will also be gone if you run db:migrate
on the MR branch and then switch to the master branch
output
Table "public.container_repositories"
Column | Type | Collation | Nullable | Default
----------------------------------+-----------------------------+-----------+----------+----------------------------------------------------
id | integer | | not null | nextval('container_repositories_id_seq'::regclass)
project_id | integer | | not null |
name | character varying | | not null |
created_at | timestamp without time zone | | not null |
updated_at | timestamp without time zone | | not null |
status | smallint | | |
expiration_policy_started_at | timestamp with time zone | | |
expiration_policy_cleanup_status | smallint | | not null | 0
expiration_policy_completed_at | timestamp with time zone | | |
migration_pre_import_started_at | timestamp with time zone | | |
migration_pre_import_done_at | timestamp with time zone | | |
migration_import_started_at | timestamp with time zone | | |
migration_import_done_at | timestamp with time zone | | |
migration_aborted_at | timestamp with time zone | | |
migration_skipped_at | timestamp with time zone | | |
migration_retries_count | integer | | not null | 0
migration_skipped_reason | smallint | | |
migration_state | text | | not null | 'default'::text
migration_aborted_in_state | text | | |
migration_plan | text | | |
last_cleanup_deleted_tags_count | integer | | |
delete_started_at | timestamp with time zone | | |
status_updated_at | timestamp with time zone | | |
Indexes:
"container_repositories_pkey" PRIMARY KEY, btree (id)
"index_container_repositories_on_project_id_and_name" UNIQUE, btree (project_id, name)
"idx_container_repos_on_exp_cleanup_status_project_id_start_date" btree (expiration_policy_cleanup_status, project_id, expiration_policy_started_at)
"idx_container_repos_on_import_started_at_when_importing" btree (migration_import_started_at) WHERE migration_state = 'importing'::text
"idx_container_repos_on_migration_state_migration_plan_created" btree (migration_state, migration_plan, created_at)
"idx_container_repos_on_pre_import_done_at_when_pre_import_done" btree (migration_pre_import_done_at) WHERE migration_state = 'pre_import_done'::text
"idx_container_repos_on_pre_import_started_at_when_pre_importing" btree (migration_pre_import_started_at) WHERE migration_state = 'pre_importing'::text
"index_container_repositories_on_greatest_completed_at" btree (GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at)) WHERE migration_state = ANY (ARRAY['import_done'::text, 'pre_import_done'::text, 'import_aborted'::text, 'import_skipped'::text])
"index_container_repositories_on_migration_state_import_done_at" btree (migration_state, migration_import_done_at)
"index_container_repositories_on_project_id_and_id" btree (project_id, id)
"index_container_repositories_on_status_and_id" btree (status, id) WHERE status IS NOT NULL
"index_container_repository_on_name_trigram" gin (name gin_trgm_ops)
"tmp_index_container_repos_on_non_migrated" btree (project_id, id) WHERE migration_state <> 'import_done'::text
"tmp_index_container_repositories_on_id_migration_state" btree (id, migration_state)
"tmp_index_migrated_container_registries" btree (project_id) WHERE migration_state = 'import_done'::text OR created_at >= '2022-01-23 00:00:00'::timestamp without time zone
Check constraints:
"check_05e9012f36" CHECK (char_length(migration_plan) <= 255)
"check_13c58fe73a" CHECK (char_length(migration_state) <= 255)
"check_97f0249439" CHECK (char_length(migration_aborted_in_state) <= 255)
Foreign-key constraints:
"fk_rails_32f7bf5aad" FOREIGN KEY (project_id) REFERENCES projects(id)
Referenced by:
TABLE "container_repository_states" CONSTRAINT "fk_rails_63436c99ce" FOREIGN KEY (container_repository_id) REFERENCES container_repositories(id) ON DELETE CASCADE
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #351783 (closed)
Edited by Radamanthus Batnag