diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 52122953de8c634aa5acbc5de0beb44630440600..c551e664b6cf9acf3d95ee65993ce0551cbdc5d0 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -752,7 +752,7 @@ def deleted? end def uploads_sharding_key - { organization_id: organization_id } + { namespace_id: id } end def pipeline_variables_default_role diff --git a/app/models/project.rb b/app/models/project.rb index e89634821a461cbb260402b247dd672c1cfb5548..e66ab4a02747092d59857f3845d94389c677fe13 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -3470,7 +3470,7 @@ def pages_hostname(options = nil) end def uploads_sharding_key - { namespace_id: namespace_id } + { project_id: id } end def pages_url_builder(options = nil) diff --git a/db/docs/abuse_report_uploads.yml b/db/docs/abuse_report_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..e31c0fa3a9fb5d0f1c3091d7909808c4af594c29 --- /dev/null +++ b/db/docs/abuse_report_uploads.yml @@ -0,0 +1,12 @@ +--- +table_name: abuse_report_uploads +classes: +- AbuseReport +- Upload +feature_categories: +- instance_resiliency +description: Stores uploads for AbuseReport model +introduced_by_url: +milestone: '17.11' +gitlab_schema: gitlab_main_clusterwide +table_size: small diff --git a/db/docs/achievement_uploads.yml b/db/docs/achievement_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..41f39681adfe1d1f88776b9323f2ebc5e0c4648d --- /dev/null +++ b/db/docs/achievement_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: achievement_uploads +classes: +- Achievements::Achievement +- Upload +feature_categories: +- user_profile +description: Stores uploads for Achievements::Achievement model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + namespace_id: namespaces diff --git a/db/docs/ai_vectorizable_file_uploads.yml b/db/docs/ai_vectorizable_file_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..0823d51e86ab8df955c0bee47a331fa1ff21fca2 --- /dev/null +++ b/db/docs/ai_vectorizable_file_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: ai_vectorizable_file_uploads +classes: +- Ai::VectorizableFile +- Upload +feature_categories: +- mlops +description: Stores uploads for Ai::VectorizableFile model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/docs/alert_management_alert_metric_image_uploads.yml b/db/docs/alert_management_alert_metric_image_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..04a3588708dd82f6ce2427b4c2ad652376bccd03 --- /dev/null +++ b/db/docs/alert_management_alert_metric_image_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: alert_management_alert_metric_image_uploads +classes: +- AlertManagement::MetricImage +- Upload +feature_categories: +- incident_management +description: Stores uploads for AlertManagement:MetricImage model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/docs/appearance_uploads.yml b/db/docs/appearance_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..451cdeec0914fcb425cb3dc192d27abe39a481c5 --- /dev/null +++ b/db/docs/appearance_uploads.yml @@ -0,0 +1,12 @@ +--- +table_name: appearance_uploads +classes: +- Appearance +- Upload +feature_categories: +- navigation +description: Stores uploads for Appearance model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_clusterwide diff --git a/db/docs/bulk_import_export_upload_uploads.yml b/db/docs/bulk_import_export_upload_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..dbae27461de16d368d9f51888a0a02eb40ff1054 --- /dev/null +++ b/db/docs/bulk_import_export_upload_uploads.yml @@ -0,0 +1,15 @@ +--- +table_name: bulk_import_export_upload_uploads +classes: +- BulkImports::ExportUpload +- Upload +feature_categories: +- importers +description: Stores uploads for BulkImports::ExportUpload model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects + namespace_id: namespaces diff --git a/db/docs/dependency_list_export_part_uploads.yml b/db/docs/dependency_list_export_part_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..341aea1e5fd12734f8b9a0cacf474edcb5b6838c --- /dev/null +++ b/db/docs/dependency_list_export_part_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: dependency_list_export_part_uploads +classes: +- Dependencies::DependencyListExport::Part +- Upload +feature_categories: +- dependency_management +description: Stores uploads for Dependencies::DependencyListExport::Part model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/dependency_list_export_uploads.yml b/db/docs/dependency_list_export_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..6d67ab62b9fabc209fddf279c8937aba4aba2f47 --- /dev/null +++ b/db/docs/dependency_list_export_uploads.yml @@ -0,0 +1,16 @@ +--- +table_name: dependency_list_export_uploads +classes: +- Dependencies::DependencyListExport +- Upload +feature_categories: +- dependency_management +description: Stores uploads for Dependencies::DependencyListExport model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations + namespace_id: namespaces + project_id: projects diff --git a/db/docs/design_management_action_uploads.yml b/db/docs/design_management_action_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..8e41880e47449b55ae737b0bc47156aaccc07be4 --- /dev/null +++ b/db/docs/design_management_action_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: design_management_action_uploads +classes: +- DesignManagement::Action +- Upload +feature_categories: +- design_management +description: Stores uploads for DesignManagement::Action model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + namespace_id: namespaces diff --git a/db/docs/import_export_upload_uploads.yml b/db/docs/import_export_upload_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..4399eb64634ae0ffc598f6cbf351cccc7c666b24 --- /dev/null +++ b/db/docs/import_export_upload_uploads.yml @@ -0,0 +1,15 @@ +--- +table_name: import_export_upload_uploads +classes: +- ImportExportUpload +- Upload +feature_categories: +- importers +description: Stores uploads for ImportExportUpload model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects + namespace_id: namespaces diff --git a/db/docs/issuable_metric_image_uploads.yml b/db/docs/issuable_metric_image_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..b696c8446cb48799a3b16839c68163c65d411848 --- /dev/null +++ b/db/docs/issuable_metric_image_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: issuable_metric_image_uploads +classes: +- IssuableMetricImage +- Upload +feature_categories: +- observability +description: Stores uploads for IssuableMetricImage model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + namespace_id: namespaces diff --git a/db/docs/namespace_uploads.yml b/db/docs/namespace_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..2acd5e8191d1f99f8aba9fcd7620bf7c9ff2a467 --- /dev/null +++ b/db/docs/namespace_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: namespace_uploads +classes: +- Group +- Upload +feature_categories: +- groups_and_projects +description: Stores uploads for Group model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + namespace_id: namespaces diff --git a/db/docs/note_uploads.yml b/db/docs/note_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..d5aff5a45eeecb13da01735260d0dc8d574cbee1 --- /dev/null +++ b/db/docs/note_uploads.yml @@ -0,0 +1,27 @@ +--- +table_name: note_uploads +classes: +- DiffNote +- DiscussionNote +- IterationNote +- LabelNote +- LegacyDiffNote +- MilestoneNote +- Note +- StateNote +- SyntheticNote +- Upload +- WeightNote +feature_categories: +- code_review_workflow +- portfolio_management +- service_desk +- source_code_management +- team_planning +description: Stores uploads for Note model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + namespace_id: namespaces diff --git a/db/docs/organization_detail_uploads.yml b/db/docs/organization_detail_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..a31d3ff31919e23d5ab951696a8c1abd25f779a2 --- /dev/null +++ b/db/docs/organization_detail_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: organization_detail_uploads +classes: +- Organizations::OrganizationDetail +- Upload +feature_categories: +- cell +description: Stores uploads for Organizations::OrganizationDetail model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/project_import_export_relation_export_upload_uploads.yml b/db/docs/project_import_export_relation_export_upload_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..0e9ea4c134afe6b6b27a84b7eb1cebcb0f2370ac --- /dev/null +++ b/db/docs/project_import_export_relation_export_upload_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: project_import_export_relation_export_upload_uploads +classes: +- Projects::ImportExport::RelationExportUpload +- Upload +feature_categories: +- importers +description: Stores uploads for Projects::ImportExport::RelationExportUpload model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/docs/project_topic_uploads.yml b/db/docs/project_topic_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..be9622b1aa70c1ffc634dca5ca20354337edaf0b --- /dev/null +++ b/db/docs/project_topic_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: project_topic_uploads +classes: +- Projects::Topic +- Upload +feature_categories: +- groups_and_projects +description: Stores uploads for Projects::Topic model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/project_uploads.yml b/db/docs/project_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..deb67d229c256a6a98aa4cd95e2565953400ff7c --- /dev/null +++ b/db/docs/project_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: project_uploads +classes: +- Project +- Upload +feature_categories: +- groups_and_projects +description: Stores uploads for Project model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/docs/snippet_uploads.yml b/db/docs/snippet_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..823721d861734f433eab5221b7ecd18cb2ebe728 --- /dev/null +++ b/db/docs/snippet_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: snippet_uploads +classes: +- PersonalSnippet +- Upload +feature_categories: +- source_code_management +description: Stores uploads for PersonalSnippet model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/uploads_9ba88c4165.yml b/db/docs/uploads_9ba88c4165.yml new file mode 100644 index 0000000000000000000000000000000000000000..873cf243b2afbceec41d0e1e87744765326d804d --- /dev/null +++ b/db/docs/uploads_9ba88c4165.yml @@ -0,0 +1,19 @@ +--- +table_name: uploads_9ba88c4165 +classes: +- Upload +feature_categories: +- code_review_workflow +- design_management +- importers +- portfolio_management +- groups_and_projects +- source_code_management +- team_planning +description: For tracking blob metadata. Single table inheritance is used to relate + this table to many other tables. Partitioned by model_type. +introduced_by_url: +milestone: '17.11' +table_size: medium +gitlab_schema: gitlab_main_cell +exempt_from_sharding: true diff --git a/db/docs/user_permission_export_upload_uploads.yml b/db/docs/user_permission_export_upload_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..26cd3cc055d5cc3ae28ded392354fe33f887556b --- /dev/null +++ b/db/docs/user_permission_export_upload_uploads.yml @@ -0,0 +1,12 @@ +--- +table_name: user_permission_export_upload_uploads +classes: +- Upload +- UserPermissionExportUpload +feature_categories: +- system_access +description: Stores uploads fro UserPermissionExportUpload model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_clusterwide diff --git a/db/docs/user_uploads.yml b/db/docs/user_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..18a68532cd6a884137c31afcf96c6124c363ff59 --- /dev/null +++ b/db/docs/user_uploads.yml @@ -0,0 +1,12 @@ +--- +table_name: user_uploads +classes: +- Upload +- User +feature_categories: +- user_profile +description: Stores uploads for User model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_clusterwide diff --git a/db/docs/vulnerability_archive_export_uploads.yml b/db/docs/vulnerability_archive_export_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..f18a9b488fa43cb78f9579417b6455d464f38f1e --- /dev/null +++ b/db/docs/vulnerability_archive_export_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: vulnerability_archive_export_uploads +classes: +- Upload +- Vulnerabilities::ArchiveExport +feature_categories: +- vulnerability_management +description: Stores uploads for Vulnerabilities::ArchiveExport model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/docs/vulnerability_export_part_uploads.yml b/db/docs/vulnerability_export_part_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..e533b1382e6c99fc601eba78153e8a7a340de59c --- /dev/null +++ b/db/docs/vulnerability_export_part_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: vulnerability_export_part_uploads +classes: +- Upload +- Vulnerabilities::Export::Part +feature_categories: +- vulnerability_management +description: Stores uploads for Vulnerabilities::Export::Part model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/vulnerability_export_uploads.yml b/db/docs/vulnerability_export_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..4122082ffcb2a497121ad3f11ad9976bf70bae8e --- /dev/null +++ b/db/docs/vulnerability_export_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: vulnerability_export_uploads +classes: +- Upload +- Vulnerabilities::Export +feature_categories: +- vulnerability_management +description: Stores uploads for Vulnerabilities::Export model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + organization_id: organizations diff --git a/db/docs/vulnerability_remediation_uploads.yml b/db/docs/vulnerability_remediation_uploads.yml new file mode 100644 index 0000000000000000000000000000000000000000..db57331b4a685d7bb2ae55735537bb4e4e623ec8 --- /dev/null +++ b/db/docs/vulnerability_remediation_uploads.yml @@ -0,0 +1,14 @@ +--- +table_name: vulnerability_remediation_uploads +classes: +- Upload +- Vulnerabilities::Remediation +feature_categories: +- vulnerability_management +description: Stores uploads for Vulnerabilities::Remediation model +introduced_by_url: +milestone: '17.11' +table_size: small +gitlab_schema: gitlab_main_cell +sharding_key: + project_id: projects diff --git a/db/migrate/20250317154918_create_partitioned_uploads.rb b/db/migrate/20250317154918_create_partitioned_uploads.rb new file mode 100644 index 0000000000000000000000000000000000000000..ec0fbd375c15da8ac8c67f873f3c5df5d3091673 --- /dev/null +++ b/db/migrate/20250317154918_create_partitioned_uploads.rb @@ -0,0 +1,97 @@ +# frozen_string_literal: true + +class CreatePartitionedUploads < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::TableManagementHelpers + + milestone '17.11' + + disable_ddl_transaction! + + TABLE_NAME = 'uploads' + PARTITIONED_TABLE_PK = %w[id model_type] + + def up + partition_table_by_list( + TABLE_NAME, 'model_type', primary_key: PARTITIONED_TABLE_PK, + partition_mappings: partition_mappings, + partition_name_format: '%{partition_name}_uploads', + create_partitioned_table_fn: ->(name) { create_partitioned_table(name) }, + sync_trigger: false + ) + end + + def down + drop_partitioned_table_for(TABLE_NAME) + end + + private + + # rubocop:disable Migration/Datetime -- Creating a copy of existing table + # rubocop:disable Migration/AddLimitToTextColumns -- Creating a copy of existing table + # rubocop:disable Migration/EnsureFactoryForTable -- Creating a copy of existing table + def create_partitioned_table(name) + options = 'PARTITION BY LIST (model_type)' + + # Table name should by provided by `partition_table_by_list`, but when using variable some + # Rubocop rules fail to handle this, so we use the name that would be generated instead. + create_table :uploads_9ba88c4165, primary_key: PARTITIONED_TABLE_PK, options: options do |t| + t.bigint :id, null: false + t.bigint :size, null: false + t.bigint :model_id, null: false + t.references :uploaded_by_user, index: false, foreign_key: { to_table: :users, on_delete: :nullify } + t.bigint :organization_id + t.bigint :namespace_id + t.bigint :project_id + t.timestamp :created_at + t.integer :store, null: false, default: 1 + t.integer :version, default: 1 + t.text :path, null: false, limit: 511 + t.text :checksum, limit: 64 + t.text :model_type + t.text :uploader, null: false + t.text :mount_point + t.text :secret + + t.index :checksum, name: "index_#{name}_on_checksum" + t.index [:model_id, :model_type, :uploader, :created_at], name: "index_#{name}_on_model_uploader_created_at" + t.index :store, name: "index_#{name}_on_store" + t.index :uploaded_by_user_id, name: "index_#{name}_on_uploaded_by_user_id" + t.index [:uploader, :path], name: "index_#{name}_on_uploader_and_path" + t.index :organization_id, name: "index_#{name}_on_organization_id" + t.index :namespace_id, name: "index_#{name}_on_namespace_id" + t.index :project_id, name: "index_#{name}_on_project_id" + end + end + # rubocop:enable Migration/EnsureFactoryForTable + # rubocop:enable Migration/AddLimitToTextColumns + # rubocop:enable Migration/Datetime + + def partition_mappings + { + abuse_report: "AbuseReport", + achievement: "Achievements::Achievement", + ai_vectorizable_file: "Ai::VectorizableFile", + alert_management_alert_metric_image: "AlertManagement::MetricImage", + appearance: "Appearance", + bulk_import_export_upload: "BulkImports::ExportUpload", + dependency_list_export: "Dependencies::DependencyListExport", + dependency_list_export_part: "Dependencies::DependencyListExport::Part", + design_management_action: "DesignManagement::Action", + note: "Note", + namespace: "Namespace", + import_export_upload: "ImportExportUpload", + issuable_metric_image: "IssuableMetricImage", + organization_detail: "Organizations::OrganizationDetail", + snippet: "Snippet", + project: "Project", + project_import_export_relation_export_upload: "Projects::ImportExport::RelationExportUpload", + project_topic: "Projects::Topic", + user: "User", + user_permission_export_upload: "UserPermissionExportUpload", + vulnerability_archive_export: "Vulnerabilities::ArchiveExport", + vulnerability_export: "Vulnerabilities::Export", + vulnerability_export_part: "Vulnerabilities::Export::Part", + vulnerability_remediation: "Vulnerabilities::Remediation" + }.transform_values { |value| "'#{value}'" } + end +end diff --git a/db/migrate/20250317155014_add_fk_for_partitioned_uploads_organization_id.rb b/db/migrate/20250317155014_add_fk_for_partitioned_uploads_organization_id.rb new file mode 100644 index 0000000000000000000000000000000000000000..cb8ef1e2871b9c267621d64fa3a6181654bea4c1 --- /dev/null +++ b/db/migrate/20250317155014_add_fk_for_partitioned_uploads_organization_id.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AddFkForPartitionedUploadsOrganizationId < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::ForeignKeyHelpers + + milestone '17.11' + + disable_ddl_transaction! + + def up + add_concurrent_partitioned_foreign_key :uploads_9ba88c4165, :organizations, column: :organization_id, + on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key :uploads_9ba88c4165, column: :organization_id + end + end +end diff --git a/db/migrate/20250317155034_add_fk_for_partitioned_uploads_namespace_id.rb b/db/migrate/20250317155034_add_fk_for_partitioned_uploads_namespace_id.rb new file mode 100644 index 0000000000000000000000000000000000000000..12c00b3c2ebfd77c246743ca48b7bdedf9b7a1a7 --- /dev/null +++ b/db/migrate/20250317155034_add_fk_for_partitioned_uploads_namespace_id.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddFkForPartitionedUploadsNamespaceId < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::ForeignKeyHelpers + + milestone '17.11' + + disable_ddl_transaction! + + def up + add_concurrent_partitioned_foreign_key :uploads_9ba88c4165, :namespaces, column: :namespace_id, on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key :uploads_9ba88c4165, column: :namespace_id + end + end +end diff --git a/db/migrate/20250317155102_add_fk_for_partitioned_uploads_project_id.rb b/db/migrate/20250317155102_add_fk_for_partitioned_uploads_project_id.rb new file mode 100644 index 0000000000000000000000000000000000000000..4bb7f6c75164ad6d7f08efd555db54b6e64e2af6 --- /dev/null +++ b/db/migrate/20250317155102_add_fk_for_partitioned_uploads_project_id.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddFkForPartitionedUploadsProjectId < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::ForeignKeyHelpers + + milestone '17.11' + + disable_ddl_transaction! + + def up + add_concurrent_partitioned_foreign_key :uploads_9ba88c4165, :projects, column: :project_id, on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key :uploads_9ba88c4165, column: :project_id + end + end +end diff --git a/db/migrate/20250317155200_add_sync_trigger_partitioned_uploads.rb b/db/migrate/20250317155200_add_sync_trigger_partitioned_uploads.rb new file mode 100644 index 0000000000000000000000000000000000000000..f84243b58258902c3540cdcfbe4ecb6f866968c7 --- /dev/null +++ b/db/migrate/20250317155200_add_sync_trigger_partitioned_uploads.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class AddSyncTriggerPartitionedUploads < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::TableManagementHelpers + + milestone '17.11' + + disable_ddl_transaction! + + def up + current_primary_key = Array.wrap(connection.primary_key(:uploads)) + create_trigger_to_sync_tables(:uploads, :uploads_9ba88c4165, current_primary_key) + end + + def down + # rubocop:disable Migration/WithLockRetriesDisallowedMethod -- copied from helpers + with_lock_retries do + drop_sync_trigger(:uploads) + end + # rubocop:enable Migration/WithLockRetriesDisallowedMethod + end +end diff --git a/db/schema_migrations/20250317154918 b/db/schema_migrations/20250317154918 new file mode 100644 index 0000000000000000000000000000000000000000..b7a8f845245a3dd722076a73b5d6713482d5d20f --- /dev/null +++ b/db/schema_migrations/20250317154918 @@ -0,0 +1 @@ +b39f622af8fe1b450969a52ec48459c5062329f4962fc77215a863d9c4624f66 \ No newline at end of file diff --git a/db/schema_migrations/20250317155014 b/db/schema_migrations/20250317155014 new file mode 100644 index 0000000000000000000000000000000000000000..aae0be8661baf02a128e8dd99cc9acd83053eae6 --- /dev/null +++ b/db/schema_migrations/20250317155014 @@ -0,0 +1 @@ +c245683f4962f5e2468c238c22493d807a91d802f8ec960c1a3fec59bb793d62 \ No newline at end of file diff --git a/db/schema_migrations/20250317155034 b/db/schema_migrations/20250317155034 new file mode 100644 index 0000000000000000000000000000000000000000..a9cd3beb0247589faf083c64c77ea74c514ebc64 --- /dev/null +++ b/db/schema_migrations/20250317155034 @@ -0,0 +1 @@ +5c3927e2c86483fadcac74a57f5a157e8e0501f3eff693b7018e4b1195303ad9 \ No newline at end of file diff --git a/db/schema_migrations/20250317155102 b/db/schema_migrations/20250317155102 new file mode 100644 index 0000000000000000000000000000000000000000..446e032830291b63448cbf20daf8515feca351ca --- /dev/null +++ b/db/schema_migrations/20250317155102 @@ -0,0 +1 @@ +330fb900772ec2eb5cc1478d6c9e0af011dbc81baf7fe7d0bc512ffbf1c65e6c \ No newline at end of file diff --git a/db/schema_migrations/20250317155200 b/db/schema_migrations/20250317155200 new file mode 100644 index 0000000000000000000000000000000000000000..feb10353746b6d5f40e354be79e74980781dbc58 --- /dev/null +++ b/db/schema_migrations/20250317155200 @@ -0,0 +1 @@ +9b44170f33c4015525f8a1cb78731f39a79b78fd9744ded70f4377195df96fa5 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index d709537d924aa11cb3e2da75ebc63f83c436dcf5..c5f44db420125761bcd588e4931711c1f458459b 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -889,6 +889,71 @@ $$; COMMENT ON FUNCTION table_sync_function_29bc99d6db() IS 'Partitioning migration: table sync for web_hook_logs table'; +CREATE FUNCTION table_sync_function_40ecbfb353() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF (TG_OP = 'DELETE') THEN + DELETE FROM uploads_9ba88c4165 where "id" = OLD."id"; +ELSIF (TG_OP = 'UPDATE') THEN + UPDATE uploads_9ba88c4165 + SET "size" = NEW."size", + "model_id" = NEW."model_id", + "uploaded_by_user_id" = NEW."uploaded_by_user_id", + "organization_id" = NEW."organization_id", + "namespace_id" = NEW."namespace_id", + "project_id" = NEW."project_id", + "created_at" = NEW."created_at", + "store" = NEW."store", + "version" = NEW."version", + "path" = NEW."path", + "checksum" = NEW."checksum", + "model_type" = NEW."model_type", + "uploader" = NEW."uploader", + "mount_point" = NEW."mount_point", + "secret" = NEW."secret" + WHERE uploads_9ba88c4165."id" = NEW."id"; +ELSIF (TG_OP = 'INSERT') THEN + INSERT INTO uploads_9ba88c4165 ("id", + "size", + "model_id", + "uploaded_by_user_id", + "organization_id", + "namespace_id", + "project_id", + "created_at", + "store", + "version", + "path", + "checksum", + "model_type", + "uploader", + "mount_point", + "secret") + VALUES (NEW."id", + NEW."size", + NEW."model_id", + NEW."uploaded_by_user_id", + NEW."organization_id", + NEW."namespace_id", + NEW."project_id", + NEW."created_at", + NEW."store", + NEW."version", + NEW."path", + NEW."checksum", + NEW."model_type", + NEW."uploader", + NEW."mount_point", + NEW."secret"); +END IF; +RETURN NULL; + +END +$$; + +COMMENT ON FUNCTION table_sync_function_40ecbfb353() IS 'Partitioning migration: table sync for uploads table'; + CREATE FUNCTION table_sync_function_686d6c7993() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -7245,6 +7310,49 @@ CREATE SEQUENCE abuse_report_notes_id_seq ALTER SEQUENCE abuse_report_notes_id_seq OWNED BY abuse_report_notes.id; +CREATE TABLE uploads_9ba88c4165 ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +) +PARTITION BY LIST (model_type); + +CREATE TABLE abuse_report_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE abuse_report_user_mentions ( id bigint NOT NULL, abuse_report_id bigint NOT NULL, @@ -7322,6 +7430,27 @@ CREATE SEQUENCE abuse_trust_scores_id_seq ALTER SEQUENCE abuse_trust_scores_id_seq OWNED BY abuse_trust_scores.id; +CREATE TABLE achievement_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE achievements ( id bigint NOT NULL, namespace_id bigint NOT NULL, @@ -7732,6 +7861,27 @@ CREATE TABLE ai_user_metrics ( last_duo_activity_on date NOT NULL ); +CREATE TABLE ai_vectorizable_file_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE ai_vectorizable_files ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -7769,6 +7919,27 @@ 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_image_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE alert_management_alert_metric_images ( id bigint NOT NULL, alert_id bigint NOT NULL, @@ -8102,6 +8273,27 @@ CREATE SEQUENCE analytics_usage_trends_measurements_id_seq ALTER SEQUENCE analytics_usage_trends_measurements_id_seq OWNED BY analytics_usage_trends_measurements.id; +CREATE TABLE appearance_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE appearances ( id bigint NOT NULL, title character varying NOT NULL, @@ -10163,6 +10355,27 @@ CREATE SEQUENCE bulk_import_export_batches_id_seq ALTER SEQUENCE bulk_import_export_batches_id_seq OWNED BY bulk_import_export_batches.id; +CREATE TABLE bulk_import_export_upload_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE bulk_import_export_uploads ( id bigint NOT NULL, export_id bigint NOT NULL, @@ -12956,6 +13169,27 @@ CREATE SEQUENCE dast_sites_id_seq ALTER SEQUENCE dast_sites_id_seq OWNED BY dast_sites.id; +CREATE TABLE dependency_list_export_part_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE dependency_list_export_parts ( id bigint NOT NULL, dependency_list_export_id bigint NOT NULL, @@ -12978,6 +13212,27 @@ CREATE SEQUENCE dependency_list_export_parts_id_seq ALTER SEQUENCE dependency_list_export_parts_id_seq OWNED BY dependency_list_export_parts.id; +CREATE TABLE dependency_list_export_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE dependency_list_exports ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -13273,6 +13528,27 @@ CREATE SEQUENCE description_versions_id_seq ALTER SEQUENCE description_versions_id_seq OWNED BY description_versions.id; +CREATE TABLE design_management_action_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE design_management_designs ( id bigint NOT NULL, project_id bigint NOT NULL, @@ -14919,6 +15195,27 @@ CREATE SEQUENCE identities_id_seq ALTER SEQUENCE identities_id_seq OWNED BY identities.id; +CREATE TABLE import_export_upload_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE import_export_uploads ( id bigint NOT NULL, updated_at timestamp with time zone NOT NULL, @@ -15517,6 +15814,27 @@ CREATE SEQUENCE ip_restrictions_id_seq ALTER SEQUENCE ip_restrictions_id_seq OWNED BY ip_restrictions.id; +CREATE TABLE issuable_metric_image_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE issuable_metric_images ( id bigint NOT NULL, issue_id bigint NOT NULL, @@ -17501,6 +17819,27 @@ CREATE SEQUENCE namespace_statistics_id_seq ALTER SEQUENCE namespace_statistics_id_seq OWNED BY namespace_statistics.id; +CREATE TABLE namespace_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE SEQUENCE namespaces_id_seq START WITH 1 INCREMENT BY 1 @@ -17599,6 +17938,27 @@ CREATE SEQUENCE note_metadata_note_id_seq ALTER SEQUENCE note_metadata_note_id_seq OWNED BY note_metadata.note_id; +CREATE TABLE note_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE notes ( note text, noteable_type character varying, @@ -18052,6 +18412,27 @@ CREATE SEQUENCE organization_cluster_agent_mappings_id_seq ALTER SEQUENCE organization_cluster_agent_mappings_id_seq OWNED BY organization_cluster_agent_mappings.id; +CREATE TABLE organization_detail_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE organization_details ( organization_id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -20265,6 +20646,27 @@ CREATE SEQUENCE project_import_data_id_seq ALTER SEQUENCE project_import_data_id_seq OWNED BY project_import_data.id; +CREATE TABLE project_import_export_relation_export_upload_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE project_incident_management_settings ( project_id bigint NOT NULL, create_issue boolean DEFAULT false NOT NULL, @@ -20644,6 +21046,27 @@ CREATE SEQUENCE project_statistics_id_seq ALTER SEQUENCE project_statistics_id_seq OWNED BY project_statistics.id; +CREATE TABLE project_topic_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE project_topics ( id bigint NOT NULL, project_id bigint NOT NULL, @@ -20721,6 +21144,27 @@ CREATE TABLE project_type_ci_runners ( CONSTRAINT check_sharding_key_id_nullness CHECK ((sharding_key_id IS NOT NULL)) ); +CREATE TABLE project_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE project_wiki_repositories ( id bigint NOT NULL, project_id bigint NOT NULL, @@ -22251,6 +22695,27 @@ CREATE TABLE snippet_statistics ( snippet_organization_id bigint ); +CREATE TABLE snippet_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE snippet_user_mentions ( id bigint NOT NULL, snippet_id bigint NOT NULL, @@ -23416,6 +23881,27 @@ CREATE SEQUENCE user_namespace_callouts_id_seq ALTER SEQUENCE user_namespace_callouts_id_seq OWNED BY user_namespace_callouts.id; +CREATE TABLE user_permission_export_upload_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE user_permission_export_uploads ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -23577,6 +24063,27 @@ CREATE SEQUENCE user_synced_attributes_metadata_id_seq ALTER SEQUENCE user_synced_attributes_metadata_id_seq OWNED BY user_synced_attributes_metadata.id; +CREATE TABLE user_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE SEQUENCE users_id_seq START WITH 1 INCREMENT BY 1 @@ -23795,6 +24302,27 @@ CREATE SEQUENCE vulnerabilities_id_seq ALTER SEQUENCE vulnerabilities_id_seq OWNED BY vulnerabilities.id; +CREATE TABLE vulnerability_archive_export_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE SEQUENCE vulnerability_archive_exports_id_seq START WITH 1 INCREMENT BY 1 @@ -23842,6 +24370,27 @@ CREATE SEQUENCE vulnerability_archives_id_seq ALTER SEQUENCE vulnerability_archives_id_seq OWNED BY vulnerability_archives.id; +CREATE TABLE vulnerability_export_part_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE vulnerability_export_parts ( id bigint NOT NULL, vulnerability_export_id bigint NOT NULL, @@ -23864,6 +24413,27 @@ CREATE SEQUENCE vulnerability_export_parts_id_seq ALTER SEQUENCE vulnerability_export_parts_id_seq OWNED BY vulnerability_export_parts.id; +CREATE TABLE vulnerability_export_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE vulnerability_exports ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -24296,6 +24866,27 @@ CREATE SEQUENCE vulnerability_reads_id_seq ALTER SEQUENCE vulnerability_reads_id_seq OWNED BY vulnerability_reads.id; +CREATE TABLE vulnerability_remediation_uploads ( + id bigint NOT NULL, + size bigint NOT NULL, + model_id bigint NOT NULL, + uploaded_by_user_id bigint, + organization_id bigint, + namespace_id bigint, + project_id bigint, + created_at timestamp without time zone, + store integer DEFAULT 1 NOT NULL, + version integer DEFAULT 1, + path text NOT NULL, + checksum text, + model_type text NOT NULL, + uploader text NOT NULL, + mount_point text, + secret text, + CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) +); + CREATE TABLE vulnerability_remediations ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -25590,6 +26181,18 @@ ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITIO ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 FOR VALUES WITH (modulus 16, remainder 15); +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION abuse_report_uploads FOR VALUES IN ('AbuseReport'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION achievement_uploads FOR VALUES IN ('Achievements::Achievement'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION ai_vectorizable_file_uploads FOR VALUES IN ('Ai::VectorizableFile'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION alert_management_alert_metric_image_uploads FOR VALUES IN ('AlertManagement::MetricImage'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION appearance_uploads FOR VALUES IN ('Appearance'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION bulk_import_export_upload_uploads FOR VALUES IN ('BulkImports::ExportUpload'); + ALTER TABLE ONLY p_ci_builds ATTACH PARTITION ci_builds FOR VALUES IN ('100'); ALTER TABLE ONLY p_ci_builds_metadata ATTACH PARTITION ci_builds_metadata FOR VALUES IN ('100'); @@ -25608,18 +26211,54 @@ ALTER TABLE ONLY ci_runner_taggings ATTACH PARTITION ci_runner_taggings_project_ ALTER TABLE ONLY p_ci_stages ATTACH PARTITION ci_stages FOR VALUES IN ('100', '101'); +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION dependency_list_export_part_uploads FOR VALUES IN ('Dependencies::DependencyListExport::Part'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION dependency_list_export_uploads FOR VALUES IN ('Dependencies::DependencyListExport'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION design_management_action_uploads FOR VALUES IN ('DesignManagement::Action'); + ALTER TABLE ONLY ci_runner_machines ATTACH PARTITION group_type_ci_runner_machines FOR VALUES IN ('2'); ALTER TABLE ONLY ci_runners ATTACH PARTITION group_type_ci_runners FOR VALUES IN ('2'); +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION import_export_upload_uploads FOR VALUES IN ('ImportExportUpload'); + ALTER TABLE ONLY ci_runner_machines ATTACH PARTITION instance_type_ci_runner_machines FOR VALUES IN ('1'); ALTER TABLE ONLY ci_runners ATTACH PARTITION instance_type_ci_runners FOR VALUES IN ('1'); +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION issuable_metric_image_uploads FOR VALUES IN ('IssuableMetricImage'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION namespace_uploads FOR VALUES IN ('Namespace'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION note_uploads FOR VALUES IN ('Note'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION organization_detail_uploads FOR VALUES IN ('Organizations::OrganizationDetail'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION project_import_export_relation_export_upload_uploads FOR VALUES IN ('Projects::ImportExport::RelationExportUpload'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION project_topic_uploads FOR VALUES IN ('Projects::Topic'); + ALTER TABLE ONLY ci_runner_machines ATTACH PARTITION project_type_ci_runner_machines FOR VALUES IN ('3'); ALTER TABLE ONLY ci_runners ATTACH PARTITION project_type_ci_runners FOR VALUES IN ('3'); +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION project_uploads FOR VALUES IN ('Project'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION snippet_uploads FOR VALUES IN ('Snippet'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION user_permission_export_upload_uploads FOR VALUES IN ('UserPermissionExportUpload'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION user_uploads FOR VALUES IN ('User'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION vulnerability_archive_export_uploads FOR VALUES IN ('Vulnerabilities::ArchiveExport'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION vulnerability_export_part_uploads FOR VALUES IN ('Vulnerabilities::Export::Part'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION vulnerability_export_uploads FOR VALUES IN ('Vulnerabilities::Export'); + +ALTER TABLE ONLY uploads_9ba88c4165 ATTACH PARTITION vulnerability_remediation_uploads FOR VALUES IN ('Vulnerabilities::Remediation'); + ALTER TABLE ONLY abuse_events ALTER COLUMN id SET DEFAULT nextval('abuse_events_id_seq'::regclass); ALTER TABLE ONLY abuse_report_assignees ALTER COLUMN id SET DEFAULT nextval('abuse_report_assignees_id_seq'::regclass); @@ -27581,6 +28220,12 @@ ALTER TABLE ONLY abuse_report_labels ALTER TABLE ONLY abuse_report_notes ADD CONSTRAINT abuse_report_notes_pkey PRIMARY KEY (id); +ALTER TABLE ONLY uploads_9ba88c4165 + ADD CONSTRAINT uploads_9ba88c4165_pkey PRIMARY KEY (id, model_type); + +ALTER TABLE ONLY abuse_report_uploads + ADD CONSTRAINT abuse_report_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY abuse_report_user_mentions ADD CONSTRAINT abuse_report_user_mentions_pkey PRIMARY KEY (id); @@ -27590,6 +28235,9 @@ ALTER TABLE ONLY abuse_reports ALTER TABLE ONLY abuse_trust_scores ADD CONSTRAINT abuse_trust_scores_pkey PRIMARY KEY (id); +ALTER TABLE ONLY achievement_uploads + ADD CONSTRAINT achievement_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY achievements ADD CONSTRAINT achievements_pkey PRIMARY KEY (id); @@ -27656,12 +28304,18 @@ ALTER TABLE ONLY ai_testing_terms_acceptances ALTER TABLE ONLY ai_user_metrics ADD CONSTRAINT ai_user_metrics_pkey PRIMARY KEY (user_id); +ALTER TABLE ONLY ai_vectorizable_file_uploads + ADD CONSTRAINT ai_vectorizable_file_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY ai_vectorizable_files ADD CONSTRAINT ai_vectorizable_files_pkey PRIMARY KEY (id); ALTER TABLE ONLY alert_management_alert_assignees ADD CONSTRAINT alert_management_alert_assignees_pkey PRIMARY KEY (id); +ALTER TABLE ONLY alert_management_alert_metric_image_uploads + ADD CONSTRAINT alert_management_alert_metric_image_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY alert_management_alert_metric_images ADD CONSTRAINT alert_management_alert_metric_images_pkey PRIMARY KEY (id); @@ -27710,6 +28364,9 @@ ALTER TABLE ONLY analytics_language_trend_repository_languages ALTER TABLE ONLY analytics_usage_trends_measurements ADD CONSTRAINT analytics_usage_trends_measurements_pkey PRIMARY KEY (id); +ALTER TABLE ONLY appearance_uploads + ADD CONSTRAINT appearance_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY appearances ADD CONSTRAINT appearances_pkey PRIMARY KEY (id); @@ -27917,6 +28574,9 @@ ALTER TABLE ONLY bulk_import_entities ALTER TABLE ONLY bulk_import_export_batches ADD CONSTRAINT bulk_import_export_batches_pkey PRIMARY KEY (id); +ALTER TABLE ONLY bulk_import_export_upload_uploads + ADD CONSTRAINT bulk_import_export_upload_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY bulk_import_export_uploads ADD CONSTRAINT bulk_import_export_uploads_pkey PRIMARY KEY (id); @@ -28358,9 +29018,15 @@ ALTER TABLE namespace_settings ALTER TABLE application_settings ADD CONSTRAINT default_branch_protection_defaults_size_constraint CHECK ((octet_length((default_branch_protection_defaults)::text) <= 1024)) NOT VALID; +ALTER TABLE ONLY dependency_list_export_part_uploads + ADD CONSTRAINT dependency_list_export_part_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY dependency_list_export_parts ADD CONSTRAINT dependency_list_export_parts_pkey PRIMARY KEY (id); +ALTER TABLE ONLY dependency_list_export_uploads + ADD CONSTRAINT dependency_list_export_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY dependency_list_exports ADD CONSTRAINT dependency_list_exports_pkey PRIMARY KEY (id); @@ -28406,6 +29072,9 @@ ALTER TABLE ONLY deployments ALTER TABLE ONLY description_versions ADD CONSTRAINT description_versions_pkey PRIMARY KEY (id); +ALTER TABLE ONLY design_management_action_uploads + ADD CONSTRAINT design_management_action_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY design_management_designs ADD CONSTRAINT design_management_designs_pkey PRIMARY KEY (id); @@ -28649,6 +29318,9 @@ ALTER TABLE ONLY historical_data ALTER TABLE ONLY identities ADD CONSTRAINT identities_pkey PRIMARY KEY (id); +ALTER TABLE ONLY import_export_upload_uploads + ADD CONSTRAINT import_export_upload_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY import_export_uploads ADD CONSTRAINT import_export_uploads_pkey PRIMARY KEY (id); @@ -28733,6 +29405,9 @@ ALTER TABLE ONLY internal_ids ALTER TABLE ONLY ip_restrictions ADD CONSTRAINT ip_restrictions_pkey PRIMARY KEY (id); +ALTER TABLE ONLY issuable_metric_image_uploads + ADD CONSTRAINT issuable_metric_image_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY issuable_metric_images ADD CONSTRAINT issuable_metric_images_pkey PRIMARY KEY (id); @@ -29015,6 +29690,9 @@ ALTER TABLE ONLY namespace_settings ALTER TABLE ONLY namespace_statistics ADD CONSTRAINT namespace_statistics_pkey PRIMARY KEY (id); +ALTER TABLE ONLY namespace_uploads + ADD CONSTRAINT namespace_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY namespaces ADD CONSTRAINT namespaces_pkey PRIMARY KEY (id); @@ -29033,6 +29711,9 @@ ALTER TABLE ONLY note_diff_files ALTER TABLE ONLY note_metadata ADD CONSTRAINT note_metadata_pkey PRIMARY KEY (note_id); +ALTER TABLE ONLY note_uploads + ADD CONSTRAINT note_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY notes ADD CONSTRAINT notes_pkey PRIMARY KEY (id); @@ -29093,6 +29774,9 @@ ALTER TABLE ONLY operations_user_lists ALTER TABLE ONLY organization_cluster_agent_mappings ADD CONSTRAINT organization_cluster_agent_mappings_pkey PRIMARY KEY (id); +ALTER TABLE ONLY organization_detail_uploads + ADD CONSTRAINT organization_detail_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY organization_details ADD CONSTRAINT organization_details_pkey PRIMARY KEY (organization_id); @@ -29405,6 +30089,9 @@ ALTER TABLE ONLY project_group_links ALTER TABLE ONLY project_import_data ADD CONSTRAINT project_import_data_pkey PRIMARY KEY (id); +ALTER TABLE ONLY project_import_export_relation_export_upload_uploads + ADD CONSTRAINT project_import_export_relation_export_upload_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY project_incident_management_settings ADD CONSTRAINT project_incident_management_settings_pkey PRIMARY KEY (project_id); @@ -29456,6 +30143,9 @@ ALTER TABLE ONLY project_states ALTER TABLE ONLY project_statistics ADD CONSTRAINT project_statistics_pkey PRIMARY KEY (id); +ALTER TABLE ONLY project_topic_uploads + ADD CONSTRAINT project_topic_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY project_topics ADD CONSTRAINT project_topics_pkey PRIMARY KEY (id); @@ -29465,6 +30155,9 @@ ALTER TABLE ONLY project_type_ci_runner_machines ALTER TABLE ONLY project_type_ci_runners ADD CONSTRAINT project_type_ci_runners_pkey PRIMARY KEY (id, runner_type); +ALTER TABLE ONLY project_uploads + ADD CONSTRAINT project_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY project_wiki_repositories ADD CONSTRAINT project_wiki_repositories_pkey PRIMARY KEY (id); @@ -29714,6 +30407,9 @@ ALTER TABLE ONLY snippet_repository_storage_moves ALTER TABLE ONLY snippet_statistics ADD CONSTRAINT snippet_statistics_pkey PRIMARY KEY (snippet_id); +ALTER TABLE ONLY snippet_uploads + ADD CONSTRAINT snippet_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY snippet_user_mentions ADD CONSTRAINT snippet_user_mentions_pkey PRIMARY KEY (id); @@ -29879,6 +30575,9 @@ ALTER TABLE ONLY user_member_roles ALTER TABLE ONLY user_namespace_callouts ADD CONSTRAINT user_namespace_callouts_pkey PRIMARY KEY (id); +ALTER TABLE ONLY user_permission_export_upload_uploads + ADD CONSTRAINT user_permission_export_upload_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY user_permission_export_uploads ADD CONSTRAINT user_permission_export_uploads_pkey PRIMARY KEY (id); @@ -29897,6 +30596,9 @@ ALTER TABLE ONLY user_statuses ALTER TABLE ONLY user_synced_attributes_metadata ADD CONSTRAINT user_synced_attributes_metadata_pkey PRIMARY KEY (id); +ALTER TABLE ONLY user_uploads + ADD CONSTRAINT user_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY users_ops_dashboard_projects ADD CONSTRAINT users_ops_dashboard_projects_pkey PRIMARY KEY (id); @@ -29936,6 +30638,9 @@ ALTER TABLE ONLY vs_code_settings ALTER TABLE ONLY vulnerabilities ADD CONSTRAINT vulnerabilities_pkey PRIMARY KEY (id); +ALTER TABLE ONLY vulnerability_archive_export_uploads + ADD CONSTRAINT vulnerability_archive_export_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY vulnerability_archive_exports ADD CONSTRAINT vulnerability_archive_exports_pkey PRIMARY KEY (id, partition_number); @@ -29945,9 +30650,15 @@ ALTER TABLE ONLY vulnerability_archived_records ALTER TABLE ONLY vulnerability_archives ADD CONSTRAINT vulnerability_archives_pkey PRIMARY KEY (id); +ALTER TABLE ONLY vulnerability_export_part_uploads + ADD CONSTRAINT vulnerability_export_part_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY vulnerability_export_parts ADD CONSTRAINT vulnerability_export_parts_pkey PRIMARY KEY (id); +ALTER TABLE ONLY vulnerability_export_uploads + ADD CONSTRAINT vulnerability_export_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY vulnerability_exports ADD CONSTRAINT vulnerability_exports_pkey PRIMARY KEY (id); @@ -30002,6 +30713,9 @@ ALTER TABLE ONLY vulnerability_occurrences ALTER TABLE ONLY vulnerability_reads ADD CONSTRAINT vulnerability_reads_pkey PRIMARY KEY (id); +ALTER TABLE ONLY vulnerability_remediation_uploads + ADD CONSTRAINT vulnerability_remediation_uploads_pkey PRIMARY KEY (id, model_type); + ALTER TABLE ONLY vulnerability_remediations ADD CONSTRAINT vulnerability_remediations_pkey PRIMARY KEY (id); @@ -31426,6 +32140,86 @@ CREATE INDEX virtual_registries_packages_maven_cache_entri_relative_path_idx ON CREATE INDEX virtual_registries_packages_maven_upstream_id_relative_path_idx ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 USING btree (upstream_id, relative_path) WHERE (status = 2); +CREATE INDEX index_uploads_9ba88c4165_on_checksum ON ONLY uploads_9ba88c4165 USING btree (checksum); + +CREATE INDEX abuse_report_uploads_checksum_idx ON abuse_report_uploads USING btree (checksum); + +CREATE INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ON ONLY uploads_9ba88c4165 USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX abuse_report_uploads_model_id_model_type_uploader_created_a_idx ON abuse_report_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX index_uploads_9ba88c4165_on_namespace_id ON ONLY uploads_9ba88c4165 USING btree (namespace_id); + +CREATE INDEX abuse_report_uploads_namespace_id_idx ON abuse_report_uploads USING btree (namespace_id); + +CREATE INDEX index_uploads_9ba88c4165_on_organization_id ON ONLY uploads_9ba88c4165 USING btree (organization_id); + +CREATE INDEX abuse_report_uploads_organization_id_idx ON abuse_report_uploads USING btree (organization_id); + +CREATE INDEX index_uploads_9ba88c4165_on_project_id ON ONLY uploads_9ba88c4165 USING btree (project_id); + +CREATE INDEX abuse_report_uploads_project_id_idx ON abuse_report_uploads USING btree (project_id); + +CREATE INDEX index_uploads_9ba88c4165_on_store ON ONLY uploads_9ba88c4165 USING btree (store); + +CREATE INDEX abuse_report_uploads_store_idx ON abuse_report_uploads USING btree (store); + +CREATE INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ON ONLY uploads_9ba88c4165 USING btree (uploaded_by_user_id); + +CREATE INDEX abuse_report_uploads_uploaded_by_user_id_idx ON abuse_report_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX index_uploads_9ba88c4165_on_uploader_and_path ON ONLY uploads_9ba88c4165 USING btree (uploader, path); + +CREATE INDEX abuse_report_uploads_uploader_path_idx ON abuse_report_uploads USING btree (uploader, path); + +CREATE INDEX achievement_uploads_checksum_idx ON achievement_uploads USING btree (checksum); + +CREATE INDEX achievement_uploads_model_id_model_type_uploader_created_at_idx ON achievement_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX achievement_uploads_namespace_id_idx ON achievement_uploads USING btree (namespace_id); + +CREATE INDEX achievement_uploads_organization_id_idx ON achievement_uploads USING btree (organization_id); + +CREATE INDEX achievement_uploads_project_id_idx ON achievement_uploads USING btree (project_id); + +CREATE INDEX achievement_uploads_store_idx ON achievement_uploads USING btree (store); + +CREATE INDEX achievement_uploads_uploaded_by_user_id_idx ON achievement_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX achievement_uploads_uploader_path_idx ON achievement_uploads USING btree (uploader, path); + +CREATE INDEX ai_vectorizable_file_uploads_checksum_idx ON ai_vectorizable_file_uploads USING btree (checksum); + +CREATE INDEX ai_vectorizable_file_uploads_model_id_model_type_uploader_c_idx ON ai_vectorizable_file_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX ai_vectorizable_file_uploads_namespace_id_idx ON ai_vectorizable_file_uploads USING btree (namespace_id); + +CREATE INDEX ai_vectorizable_file_uploads_organization_id_idx ON ai_vectorizable_file_uploads USING btree (organization_id); + +CREATE INDEX ai_vectorizable_file_uploads_project_id_idx ON ai_vectorizable_file_uploads USING btree (project_id); + +CREATE INDEX ai_vectorizable_file_uploads_store_idx ON ai_vectorizable_file_uploads USING btree (store); + +CREATE INDEX ai_vectorizable_file_uploads_uploaded_by_user_id_idx ON ai_vectorizable_file_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX ai_vectorizable_file_uploads_uploader_path_idx ON ai_vectorizable_file_uploads USING btree (uploader, path); + +CREATE INDEX alert_management_alert_metric_image_upl_uploaded_by_user_id_idx ON alert_management_alert_metric_image_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX alert_management_alert_metric_image_uploads_checksum_idx ON alert_management_alert_metric_image_uploads USING btree (checksum); + +CREATE INDEX alert_management_alert_metric_image_uploads_namespace_id_idx ON alert_management_alert_metric_image_uploads USING btree (namespace_id); + +CREATE INDEX alert_management_alert_metric_image_uploads_organization_id_idx ON alert_management_alert_metric_image_uploads USING btree (organization_id); + +CREATE INDEX alert_management_alert_metric_image_uploads_project_id_idx ON alert_management_alert_metric_image_uploads USING btree (project_id); + +CREATE INDEX alert_management_alert_metric_image_uploads_store_idx ON alert_management_alert_metric_image_uploads USING btree (store); + +CREATE INDEX alert_management_alert_metric_image_uploads_uploader_path_idx ON alert_management_alert_metric_image_uploads USING btree (uploader, path); + +CREATE INDEX alert_management_alert_metric_model_id_model_type_uploader__idx ON alert_management_alert_metric_image_uploads USING btree (model_id, model_type, uploader, created_at); + CREATE INDEX analytics_index_audit_events_part_on_created_at_and_author_id ON ONLY audit_events USING btree (created_at, author_id); CREATE INDEX analytics_index_events_on_created_at_and_author_id ON events USING btree (created_at, author_id); @@ -31434,6 +32228,38 @@ CREATE INDEX analytics_repository_languages_on_project_id ON analytics_language_ CREATE UNIQUE INDEX any_approver_project_rule_type_unique_index ON approval_project_rules USING btree (project_id) WHERE (rule_type = 3); +CREATE INDEX appearance_uploads_checksum_idx ON appearance_uploads USING btree (checksum); + +CREATE INDEX appearance_uploads_model_id_model_type_uploader_created_at_idx ON appearance_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX appearance_uploads_namespace_id_idx ON appearance_uploads USING btree (namespace_id); + +CREATE INDEX appearance_uploads_organization_id_idx ON appearance_uploads USING btree (organization_id); + +CREATE INDEX appearance_uploads_project_id_idx ON appearance_uploads USING btree (project_id); + +CREATE INDEX appearance_uploads_store_idx ON appearance_uploads USING btree (store); + +CREATE INDEX appearance_uploads_uploaded_by_user_id_idx ON appearance_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX appearance_uploads_uploader_path_idx ON appearance_uploads USING btree (uploader, path); + +CREATE INDEX bulk_import_export_upload_upl_model_id_model_type_uploader__idx ON bulk_import_export_upload_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX bulk_import_export_upload_uploads_checksum_idx ON bulk_import_export_upload_uploads USING btree (checksum); + +CREATE INDEX bulk_import_export_upload_uploads_namespace_id_idx ON bulk_import_export_upload_uploads USING btree (namespace_id); + +CREATE INDEX bulk_import_export_upload_uploads_organization_id_idx ON bulk_import_export_upload_uploads USING btree (organization_id); + +CREATE INDEX bulk_import_export_upload_uploads_project_id_idx ON bulk_import_export_upload_uploads USING btree (project_id); + +CREATE INDEX bulk_import_export_upload_uploads_store_idx ON bulk_import_export_upload_uploads USING btree (store); + +CREATE INDEX bulk_import_export_upload_uploads_uploaded_by_user_id_idx ON bulk_import_export_upload_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX bulk_import_export_upload_uploads_uploader_path_idx ON bulk_import_export_upload_uploads USING btree (uploader, path); + CREATE INDEX bulk_import_export_uploads_batch_id ON bulk_import_export_uploads USING btree (batch_id); CREATE UNIQUE INDEX bulk_import_trackers_uniq_relation_by_entity ON bulk_import_trackers USING btree (bulk_import_entity_id, relation); @@ -31486,6 +32312,54 @@ CREATE UNIQUE INDEX dast_scanner_profiles_builds_on_ci_build_id ON dast_scanner_ CREATE UNIQUE INDEX dast_site_profiles_builds_on_ci_build_id ON dast_site_profiles_builds USING btree (ci_build_id); +CREATE INDEX dependency_list_export_part_u_model_id_model_type_uploader__idx ON dependency_list_export_part_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX dependency_list_export_part_uploads_checksum_idx ON dependency_list_export_part_uploads USING btree (checksum); + +CREATE INDEX dependency_list_export_part_uploads_namespace_id_idx ON dependency_list_export_part_uploads USING btree (namespace_id); + +CREATE INDEX dependency_list_export_part_uploads_organization_id_idx ON dependency_list_export_part_uploads USING btree (organization_id); + +CREATE INDEX dependency_list_export_part_uploads_project_id_idx ON dependency_list_export_part_uploads USING btree (project_id); + +CREATE INDEX dependency_list_export_part_uploads_store_idx ON dependency_list_export_part_uploads USING btree (store); + +CREATE INDEX dependency_list_export_part_uploads_uploaded_by_user_id_idx ON dependency_list_export_part_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX dependency_list_export_part_uploads_uploader_path_idx ON dependency_list_export_part_uploads USING btree (uploader, path); + +CREATE INDEX dependency_list_export_upload_model_id_model_type_uploader__idx ON dependency_list_export_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX dependency_list_export_uploads_checksum_idx ON dependency_list_export_uploads USING btree (checksum); + +CREATE INDEX dependency_list_export_uploads_namespace_id_idx ON dependency_list_export_uploads USING btree (namespace_id); + +CREATE INDEX dependency_list_export_uploads_organization_id_idx ON dependency_list_export_uploads USING btree (organization_id); + +CREATE INDEX dependency_list_export_uploads_project_id_idx ON dependency_list_export_uploads USING btree (project_id); + +CREATE INDEX dependency_list_export_uploads_store_idx ON dependency_list_export_uploads USING btree (store); + +CREATE INDEX dependency_list_export_uploads_uploaded_by_user_id_idx ON dependency_list_export_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX dependency_list_export_uploads_uploader_path_idx ON dependency_list_export_uploads USING btree (uploader, path); + +CREATE INDEX design_management_action_uplo_model_id_model_type_uploader__idx ON design_management_action_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX design_management_action_uploads_checksum_idx ON design_management_action_uploads USING btree (checksum); + +CREATE INDEX design_management_action_uploads_namespace_id_idx ON design_management_action_uploads USING btree (namespace_id); + +CREATE INDEX design_management_action_uploads_organization_id_idx ON design_management_action_uploads USING btree (organization_id); + +CREATE INDEX design_management_action_uploads_project_id_idx ON design_management_action_uploads USING btree (project_id); + +CREATE INDEX design_management_action_uploads_store_idx ON design_management_action_uploads USING btree (store); + +CREATE INDEX design_management_action_uploads_uploaded_by_user_id_idx ON design_management_action_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX design_management_action_uploads_uploader_path_idx ON design_management_action_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX design_management_designs_versions_uniqueness ON design_management_designs_versions USING btree (design_id, version_id); CREATE UNIQUE INDEX design_user_mentions_on_design_id_and_note_id_unique_index ON design_user_mentions USING btree (design_id, note_id); @@ -32112,6 +32986,22 @@ CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_size_bytes ON zoekt_re CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_state ON zoekt_repositories USING btree (zoekt_index_id, state); +CREATE INDEX import_export_upload_uploads_checksum_idx ON import_export_upload_uploads USING btree (checksum); + +CREATE INDEX import_export_upload_uploads_model_id_model_type_uploader_c_idx ON import_export_upload_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX import_export_upload_uploads_namespace_id_idx ON import_export_upload_uploads USING btree (namespace_id); + +CREATE INDEX import_export_upload_uploads_organization_id_idx ON import_export_upload_uploads USING btree (organization_id); + +CREATE INDEX import_export_upload_uploads_project_id_idx ON import_export_upload_uploads USING btree (project_id); + +CREATE INDEX import_export_upload_uploads_store_idx ON import_export_upload_uploads USING btree (store); + +CREATE INDEX import_export_upload_uploads_uploaded_by_user_id_idx ON import_export_upload_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX import_export_upload_uploads_uploader_path_idx ON import_export_upload_uploads USING btree (uploader, path); + CREATE INDEX index_ci_runner_machines_on_executor_type ON ONLY ci_runner_machines USING btree (executor_type); CREATE INDEX index_012094097c ON instance_type_ci_runner_machines USING btree (executor_type); @@ -36766,6 +37656,22 @@ CREATE UNIQUE INDEX instance_type_ci_runners_e59bb2812d_token_runner_type_idx ON CREATE UNIQUE INDEX instance_type_ci_runners_e59bb2_token_encrypted_runner_type_idx ON instance_type_ci_runners USING btree (token_encrypted, runner_type); +CREATE INDEX issuable_metric_image_uploads_checksum_idx ON issuable_metric_image_uploads USING btree (checksum); + +CREATE INDEX issuable_metric_image_uploads_model_id_model_type_uploader__idx ON issuable_metric_image_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX issuable_metric_image_uploads_namespace_id_idx ON issuable_metric_image_uploads USING btree (namespace_id); + +CREATE INDEX issuable_metric_image_uploads_organization_id_idx ON issuable_metric_image_uploads USING btree (organization_id); + +CREATE INDEX issuable_metric_image_uploads_project_id_idx ON issuable_metric_image_uploads USING btree (project_id); + +CREATE INDEX issuable_metric_image_uploads_store_idx ON issuable_metric_image_uploads USING btree (store); + +CREATE INDEX issuable_metric_image_uploads_uploaded_by_user_id_idx ON issuable_metric_image_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX issuable_metric_image_uploads_uploader_path_idx ON issuable_metric_image_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX issue_user_mentions_on_issue_id_and_note_id_index ON issue_user_mentions USING btree (issue_id, note_id); CREATE UNIQUE INDEX issue_user_mentions_on_issue_id_index ON issue_user_mentions USING btree (issue_id) WHERE (note_id IS NULL); @@ -36780,8 +37686,56 @@ CREATE UNIQUE INDEX merge_request_user_mentions_on_mr_id_and_note_id_index ON me CREATE UNIQUE INDEX merge_request_user_mentions_on_mr_id_index ON merge_request_user_mentions USING btree (merge_request_id) WHERE (note_id IS NULL); +CREATE INDEX namespace_uploads_checksum_idx ON namespace_uploads USING btree (checksum); + +CREATE INDEX namespace_uploads_model_id_model_type_uploader_created_at_idx ON namespace_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX namespace_uploads_namespace_id_idx ON namespace_uploads USING btree (namespace_id); + +CREATE INDEX namespace_uploads_organization_id_idx ON namespace_uploads USING btree (organization_id); + +CREATE INDEX namespace_uploads_project_id_idx ON namespace_uploads USING btree (project_id); + +CREATE INDEX namespace_uploads_store_idx ON namespace_uploads USING btree (store); + +CREATE INDEX namespace_uploads_uploaded_by_user_id_idx ON namespace_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX namespace_uploads_uploader_path_idx ON namespace_uploads USING btree (uploader, path); + +CREATE INDEX note_uploads_checksum_idx ON note_uploads USING btree (checksum); + +CREATE INDEX note_uploads_model_id_model_type_uploader_created_at_idx ON note_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX note_uploads_namespace_id_idx ON note_uploads USING btree (namespace_id); + +CREATE INDEX note_uploads_organization_id_idx ON note_uploads USING btree (organization_id); + +CREATE INDEX note_uploads_project_id_idx ON note_uploads USING btree (project_id); + +CREATE INDEX note_uploads_store_idx ON note_uploads USING btree (store); + +CREATE INDEX note_uploads_uploaded_by_user_id_idx ON note_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX note_uploads_uploader_path_idx ON note_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX one_canonical_wiki_page_slug_per_metadata ON wiki_page_slugs USING btree (wiki_page_meta_id) WHERE (canonical = true); +CREATE INDEX organization_detail_uploads_checksum_idx ON organization_detail_uploads USING btree (checksum); + +CREATE INDEX organization_detail_uploads_model_id_model_type_uploader_cr_idx ON organization_detail_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX organization_detail_uploads_namespace_id_idx ON organization_detail_uploads USING btree (namespace_id); + +CREATE INDEX organization_detail_uploads_organization_id_idx ON organization_detail_uploads USING btree (organization_id); + +CREATE INDEX organization_detail_uploads_project_id_idx ON organization_detail_uploads USING btree (project_id); + +CREATE INDEX organization_detail_uploads_store_idx ON organization_detail_uploads USING btree (store); + +CREATE INDEX organization_detail_uploads_uploaded_by_user_id_idx ON organization_detail_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX organization_detail_uploads_uploader_path_idx ON organization_detail_uploads USING btree (uploader, path); + CREATE INDEX p_ci_builds_scheduled_at_idx ON ONLY p_ci_builds USING btree (scheduled_at) WHERE ((scheduled_at IS NOT NULL) AND ((type)::text = 'Ci::Build'::text) AND ((status)::text = 'scheduled'::text)); CREATE UNIQUE INDEX p_ci_builds_token_encrypted_partition_id_idx ON ONLY p_ci_builds USING btree (token_encrypted, partition_id) WHERE (token_encrypted IS NOT NULL); @@ -36814,6 +37768,38 @@ CREATE INDEX partial_index_user_id_app_id_created_at_token_not_revoked ON oauth_ CREATE UNIQUE INDEX pm_checkpoints_path_components ON pm_checkpoints USING btree (purl_type, data_type, version_format); +CREATE INDEX project_import_export_relatio_model_id_model_type_uploader__idx ON project_import_export_relation_export_upload_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX project_import_export_relation_export_u_uploaded_by_user_id_idx ON project_import_export_relation_export_upload_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX project_import_export_relation_export_uploa_organization_id_idx ON project_import_export_relation_export_upload_uploads USING btree (organization_id); + +CREATE INDEX project_import_export_relation_export_upload__uploader_path_idx ON project_import_export_relation_export_upload_uploads USING btree (uploader, path); + +CREATE INDEX project_import_export_relation_export_upload_u_namespace_id_idx ON project_import_export_relation_export_upload_uploads USING btree (namespace_id); + +CREATE INDEX project_import_export_relation_export_upload_upl_project_id_idx ON project_import_export_relation_export_upload_uploads USING btree (project_id); + +CREATE INDEX project_import_export_relation_export_upload_uploa_checksum_idx ON project_import_export_relation_export_upload_uploads USING btree (checksum); + +CREATE INDEX project_import_export_relation_export_upload_uploads_store_idx ON project_import_export_relation_export_upload_uploads USING btree (store); + +CREATE INDEX project_topic_uploads_checksum_idx ON project_topic_uploads USING btree (checksum); + +CREATE INDEX project_topic_uploads_model_id_model_type_uploader_created__idx ON project_topic_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX project_topic_uploads_namespace_id_idx ON project_topic_uploads USING btree (namespace_id); + +CREATE INDEX project_topic_uploads_organization_id_idx ON project_topic_uploads USING btree (organization_id); + +CREATE INDEX project_topic_uploads_project_id_idx ON project_topic_uploads USING btree (project_id); + +CREATE INDEX project_topic_uploads_store_idx ON project_topic_uploads USING btree (store); + +CREATE INDEX project_topic_uploads_uploaded_by_user_id_idx ON project_topic_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX project_topic_uploads_uploader_path_idx ON project_topic_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX project_type_ci_runner_machin_runner_id_runner_type_system__idx ON project_type_ci_runner_machines USING btree (runner_id, runner_type, system_xid); CREATE INDEX project_type_ci_runner_machine_substring_version_runner_id_idx1 ON project_type_ci_runner_machines USING btree ("substring"(version, '^\d+\.\d+\.'::text), version, runner_id); @@ -36860,6 +37846,22 @@ CREATE UNIQUE INDEX project_type_ci_runners_e59bb2812d_token_runner_type_idx ON CREATE UNIQUE INDEX project_type_ci_runners_e59bb28_token_encrypted_runner_type_idx ON project_type_ci_runners USING btree (token_encrypted, runner_type); +CREATE INDEX project_uploads_checksum_idx ON project_uploads USING btree (checksum); + +CREATE INDEX project_uploads_model_id_model_type_uploader_created_at_idx ON project_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX project_uploads_namespace_id_idx ON project_uploads USING btree (namespace_id); + +CREATE INDEX project_uploads_organization_id_idx ON project_uploads USING btree (organization_id); + +CREATE INDEX project_uploads_project_id_idx ON project_uploads USING btree (project_id); + +CREATE INDEX project_uploads_store_idx ON project_uploads USING btree (store); + +CREATE INDEX project_uploads_uploaded_by_user_id_idx ON project_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX project_uploads_uploader_path_idx ON project_uploads USING btree (uploader, path); + CREATE INDEX releases_published_at_index ON releases USING btree (release_published_at); CREATE INDEX revised_idx_for_owasp_top_10_group_level_reports ON vulnerability_reads USING btree (owasp_top_10, state, report_type, resolved_on_default_branch, severity, traversal_ids, vulnerability_id) WHERE (archived = false); @@ -36888,6 +37890,22 @@ CREATE UNIQUE INDEX security_findings_uuid_scan_id_partition_number_idx ON ONLY CREATE INDEX security_policy_approval_mr_rule_index_merge_request_id ON approval_merge_request_rules USING btree (merge_request_id) WHERE (report_type = ANY (ARRAY[4, 2, 5])); +CREATE INDEX snippet_uploads_checksum_idx ON snippet_uploads USING btree (checksum); + +CREATE INDEX snippet_uploads_model_id_model_type_uploader_created_at_idx ON snippet_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX snippet_uploads_namespace_id_idx ON snippet_uploads USING btree (namespace_id); + +CREATE INDEX snippet_uploads_organization_id_idx ON snippet_uploads USING btree (organization_id); + +CREATE INDEX snippet_uploads_project_id_idx ON snippet_uploads USING btree (project_id); + +CREATE INDEX snippet_uploads_store_idx ON snippet_uploads USING btree (store); + +CREATE INDEX snippet_uploads_uploaded_by_user_id_idx ON snippet_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX snippet_uploads_uploader_path_idx ON snippet_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX snippet_user_mentions_on_snippet_id_and_note_id_index ON snippet_user_mentions USING btree (snippet_id, note_id); CREATE UNIQUE INDEX snippet_user_mentions_on_snippet_id_index ON snippet_user_mentions USING btree (snippet_id) WHERE (note_id IS NULL); @@ -37092,12 +38110,108 @@ CREATE UNIQUE INDEX unique_zoekt_enabled_namespaces_on_root_namespace_id ON zoek CREATE INDEX user_follow_users_followee_id_idx ON user_follow_users USING btree (followee_id); +CREATE INDEX user_permission_export_upload_model_id_model_type_uploader__idx ON user_permission_export_upload_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX user_permission_export_upload_uploads_checksum_idx ON user_permission_export_upload_uploads USING btree (checksum); + +CREATE INDEX user_permission_export_upload_uploads_namespace_id_idx ON user_permission_export_upload_uploads USING btree (namespace_id); + +CREATE INDEX user_permission_export_upload_uploads_organization_id_idx ON user_permission_export_upload_uploads USING btree (organization_id); + +CREATE INDEX user_permission_export_upload_uploads_project_id_idx ON user_permission_export_upload_uploads USING btree (project_id); + +CREATE INDEX user_permission_export_upload_uploads_store_idx ON user_permission_export_upload_uploads USING btree (store); + +CREATE INDEX user_permission_export_upload_uploads_uploaded_by_user_id_idx ON user_permission_export_upload_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX user_permission_export_upload_uploads_uploader_path_idx ON user_permission_export_upload_uploads USING btree (uploader, path); + +CREATE INDEX user_uploads_checksum_idx ON user_uploads USING btree (checksum); + +CREATE INDEX user_uploads_model_id_model_type_uploader_created_at_idx ON user_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX user_uploads_namespace_id_idx ON user_uploads USING btree (namespace_id); + +CREATE INDEX user_uploads_organization_id_idx ON user_uploads USING btree (organization_id); + +CREATE INDEX user_uploads_project_id_idx ON user_uploads USING btree (project_id); + +CREATE INDEX user_uploads_store_idx ON user_uploads USING btree (store); + +CREATE INDEX user_uploads_uploaded_by_user_id_idx ON user_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX user_uploads_uploader_path_idx ON user_uploads USING btree (uploader, path); + CREATE UNIQUE INDEX virtual_reg_packages_maven_reg_upstreams_on_unique_reg_ids ON virtual_registries_packages_maven_registry_upstreams USING btree (registry_id); CREATE UNIQUE INDEX virtual_reg_packages_maven_reg_upstreams_on_unique_upstream_ids ON virtual_registries_packages_maven_registry_upstreams USING btree (upstream_id); CREATE UNIQUE INDEX virtual_registries_pkgs_maven_registries_on_unique_group_ids ON virtual_registries_packages_maven_registries USING btree (group_id); +CREATE INDEX vulnerability_archive_export__model_id_model_type_uploader__idx ON vulnerability_archive_export_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX vulnerability_archive_export_uploads_checksum_idx ON vulnerability_archive_export_uploads USING btree (checksum); + +CREATE INDEX vulnerability_archive_export_uploads_namespace_id_idx ON vulnerability_archive_export_uploads USING btree (namespace_id); + +CREATE INDEX vulnerability_archive_export_uploads_organization_id_idx ON vulnerability_archive_export_uploads USING btree (organization_id); + +CREATE INDEX vulnerability_archive_export_uploads_project_id_idx ON vulnerability_archive_export_uploads USING btree (project_id); + +CREATE INDEX vulnerability_archive_export_uploads_store_idx ON vulnerability_archive_export_uploads USING btree (store); + +CREATE INDEX vulnerability_archive_export_uploads_uploaded_by_user_id_idx ON vulnerability_archive_export_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX vulnerability_archive_export_uploads_uploader_path_idx ON vulnerability_archive_export_uploads USING btree (uploader, path); + +CREATE INDEX vulnerability_export_part_upl_model_id_model_type_uploader__idx ON vulnerability_export_part_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX vulnerability_export_part_uploads_checksum_idx ON vulnerability_export_part_uploads USING btree (checksum); + +CREATE INDEX vulnerability_export_part_uploads_namespace_id_idx ON vulnerability_export_part_uploads USING btree (namespace_id); + +CREATE INDEX vulnerability_export_part_uploads_organization_id_idx ON vulnerability_export_part_uploads USING btree (organization_id); + +CREATE INDEX vulnerability_export_part_uploads_project_id_idx ON vulnerability_export_part_uploads USING btree (project_id); + +CREATE INDEX vulnerability_export_part_uploads_store_idx ON vulnerability_export_part_uploads USING btree (store); + +CREATE INDEX vulnerability_export_part_uploads_uploaded_by_user_id_idx ON vulnerability_export_part_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX vulnerability_export_part_uploads_uploader_path_idx ON vulnerability_export_part_uploads USING btree (uploader, path); + +CREATE INDEX vulnerability_export_uploads_checksum_idx ON vulnerability_export_uploads USING btree (checksum); + +CREATE INDEX vulnerability_export_uploads_model_id_model_type_uploader_c_idx ON vulnerability_export_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX vulnerability_export_uploads_namespace_id_idx ON vulnerability_export_uploads USING btree (namespace_id); + +CREATE INDEX vulnerability_export_uploads_organization_id_idx ON vulnerability_export_uploads USING btree (organization_id); + +CREATE INDEX vulnerability_export_uploads_project_id_idx ON vulnerability_export_uploads USING btree (project_id); + +CREATE INDEX vulnerability_export_uploads_store_idx ON vulnerability_export_uploads USING btree (store); + +CREATE INDEX vulnerability_export_uploads_uploaded_by_user_id_idx ON vulnerability_export_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX vulnerability_export_uploads_uploader_path_idx ON vulnerability_export_uploads USING btree (uploader, path); + +CREATE INDEX vulnerability_remediation_upl_model_id_model_type_uploader__idx ON vulnerability_remediation_uploads USING btree (model_id, model_type, uploader, created_at); + +CREATE INDEX vulnerability_remediation_uploads_checksum_idx ON vulnerability_remediation_uploads USING btree (checksum); + +CREATE INDEX vulnerability_remediation_uploads_namespace_id_idx ON vulnerability_remediation_uploads USING btree (namespace_id); + +CREATE INDEX vulnerability_remediation_uploads_organization_id_idx ON vulnerability_remediation_uploads USING btree (organization_id); + +CREATE INDEX vulnerability_remediation_uploads_project_id_idx ON vulnerability_remediation_uploads USING btree (project_id); + +CREATE INDEX vulnerability_remediation_uploads_store_idx ON vulnerability_remediation_uploads USING btree (store); + +CREATE INDEX vulnerability_remediation_uploads_uploaded_by_user_id_idx ON vulnerability_remediation_uploads USING btree (uploaded_by_user_id); + +CREATE INDEX vulnerability_remediation_uploads_uploader_path_idx ON vulnerability_remediation_uploads USING btree (uploader, path); + CREATE INDEX wi_colors_namespace_id_index ON work_item_colors USING btree (namespace_id); CREATE INDEX wi_datessources_due_date_sourcing_milestone_id_index ON work_item_dates_sources USING btree (due_date_sourcing_milestone_id); @@ -38710,6 +39824,114 @@ ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITIO ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_upstream_id_relative_path_idx; +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION abuse_report_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION abuse_report_uploads_model_id_model_type_uploader_created_a_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION abuse_report_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION abuse_report_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION abuse_report_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION abuse_report_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION abuse_report_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION abuse_report_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION abuse_report_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION achievement_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION achievement_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION achievement_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION achievement_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION achievement_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION achievement_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION achievement_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION achievement_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION achievement_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION ai_vectorizable_file_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION ai_vectorizable_file_uploads_model_id_model_type_uploader_c_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION ai_vectorizable_file_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION ai_vectorizable_file_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION ai_vectorizable_file_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION ai_vectorizable_file_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION ai_vectorizable_file_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION ai_vectorizable_file_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION ai_vectorizable_file_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION alert_management_alert_metric_image_upl_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION alert_management_alert_metric_image_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION alert_management_alert_metric_image_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION alert_management_alert_metric_image_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION alert_management_alert_metric_image_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION alert_management_alert_metric_image_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION alert_management_alert_metric_image_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION alert_management_alert_metric_image_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION alert_management_alert_metric_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION appearance_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION appearance_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION appearance_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION appearance_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION appearance_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION appearance_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION appearance_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION appearance_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION appearance_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION bulk_import_export_upload_upl_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION bulk_import_export_upload_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION bulk_import_export_upload_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION bulk_import_export_upload_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION bulk_import_export_upload_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION bulk_import_export_upload_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION bulk_import_export_upload_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION bulk_import_export_upload_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION bulk_import_export_upload_uploads_uploader_path_idx; + ALTER INDEX p_ci_builds_status_created_at_project_id_idx ATTACH PARTITION ci_builds_gitlab_monitor_metrics; ALTER INDEX p_ci_builds_metadata_pkey ATTACH PARTITION ci_builds_metadata_pkey; @@ -38748,6 +39970,60 @@ ALTER INDEX index_ci_runner_taggings_on_sharding_key_id ATTACH PARTITION ci_runn ALTER INDEX p_ci_stages_pkey ATTACH PARTITION ci_stages_pkey; +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION dependency_list_export_part_u_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION dependency_list_export_part_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION dependency_list_export_part_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION dependency_list_export_part_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION dependency_list_export_part_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION dependency_list_export_part_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION dependency_list_export_part_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION dependency_list_export_part_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION dependency_list_export_part_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION dependency_list_export_upload_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION dependency_list_export_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION dependency_list_export_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION dependency_list_export_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION dependency_list_export_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION dependency_list_export_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION dependency_list_export_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION dependency_list_export_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION dependency_list_export_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION design_management_action_uplo_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION design_management_action_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION design_management_action_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION design_management_action_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION design_management_action_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION design_management_action_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION design_management_action_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION design_management_action_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION design_management_action_uploads_uploader_path_idx; + ALTER INDEX idx_ci_runner_machines_687967fa8a_on_contacted_at_desc_id_desc ATTACH PARTITION group_type_ci_runner_machines_687967fa8a_contacted_at_id_idx; ALTER INDEX index_ci_runner_machines_687967fa8a_on_created_at_and_id_desc ATTACH PARTITION group_type_ci_runner_machines_687967fa8a_created_at_id_idx; @@ -38802,6 +40078,24 @@ ALTER INDEX p_ci_job_artifacts_job_id_file_type_partition_id_idx ATTACH PARTITIO ALTER INDEX p_ci_pipelines_ci_ref_id_id_idx ATTACH PARTITION idx_ci_pipelines_artifacts_locked; +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION import_export_upload_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION import_export_upload_uploads_model_id_model_type_uploader_c_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION import_export_upload_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION import_export_upload_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION import_export_upload_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION import_export_upload_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION import_export_upload_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION import_export_upload_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION import_export_upload_uploads_uploader_path_idx; + ALTER INDEX index_ci_runner_machines_on_executor_type ATTACH PARTITION index_012094097c; ALTER INDEX index_p_ci_builds_on_execution_config_id ATTACH PARTITION index_0928d9f200; @@ -38990,8 +40284,116 @@ ALTER INDEX index_uniq_ci_runners_e59bb2812d_on_token_encrypted_and_type ATTACH ALTER INDEX ci_runners_pkey ATTACH PARTITION instance_type_ci_runners_pkey; +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION issuable_metric_image_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION issuable_metric_image_uploads_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION issuable_metric_image_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION issuable_metric_image_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION issuable_metric_image_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION issuable_metric_image_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION issuable_metric_image_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION issuable_metric_image_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION issuable_metric_image_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION namespace_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION namespace_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION namespace_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION namespace_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION namespace_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION namespace_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION namespace_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION namespace_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION namespace_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION note_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION note_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION note_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION note_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION note_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION note_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION note_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION note_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION note_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION organization_detail_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION organization_detail_uploads_model_id_model_type_uploader_cr_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION organization_detail_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION organization_detail_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION organization_detail_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION organization_detail_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION organization_detail_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION organization_detail_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION organization_detail_uploads_uploader_path_idx; + ALTER INDEX p_ci_builds_scheduled_at_idx ATTACH PARTITION partial_index_ci_builds_on_scheduled_at_with_scheduled_jobs; +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION project_import_export_relatio_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION project_import_export_relation_export_u_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION project_import_export_relation_export_uploa_organization_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION project_import_export_relation_export_upload__uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION project_import_export_relation_export_upload_u_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION project_import_export_relation_export_upload_upl_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION project_import_export_relation_export_upload_uploa_checksum_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION project_import_export_relation_export_upload_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION project_import_export_relation_export_upload_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION project_topic_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION project_topic_uploads_model_id_model_type_uploader_created__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION project_topic_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION project_topic_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION project_topic_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION project_topic_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION project_topic_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION project_topic_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION project_topic_uploads_uploader_path_idx; + ALTER INDEX idx_uniq_ci_runner_machines_687967fa8a_on_runner_id_system_xid ATTACH PARTITION project_type_ci_runner_machin_runner_id_runner_type_system__idx; ALTER INDEX index_ci_runner_machines_687967fa8a_on_minor_version ATTACH PARTITION project_type_ci_runner_machine_substring_version_runner_id_idx1; @@ -39042,10 +40444,154 @@ ALTER INDEX index_uniq_ci_runners_e59bb2812d_on_token_encrypted_and_type ATTACH ALTER INDEX ci_runners_pkey ATTACH PARTITION project_type_ci_runners_pkey; +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION project_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION project_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION project_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION project_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION project_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION project_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION project_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION project_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION project_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION snippet_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION snippet_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION snippet_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION snippet_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION snippet_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION snippet_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION snippet_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION snippet_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION snippet_uploads_uploader_path_idx; + ALTER INDEX p_ci_job_artifacts_expire_at_job_id_idx1 ATTACH PARTITION tmp_index_ci_job_artifacts_on_expire_at_where_locked_unknown; ALTER INDEX p_ci_builds_token_encrypted_partition_id_idx ATTACH PARTITION unique_ci_builds_token_encrypted_and_partition_id; +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION user_permission_export_upload_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION user_permission_export_upload_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION user_permission_export_upload_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION user_permission_export_upload_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION user_permission_export_upload_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION user_permission_export_upload_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION user_permission_export_upload_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION user_permission_export_upload_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION user_permission_export_upload_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION user_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION user_uploads_model_id_model_type_uploader_created_at_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION user_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION user_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION user_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION user_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION user_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION user_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION user_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION vulnerability_archive_export__model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION vulnerability_archive_export_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION vulnerability_archive_export_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION vulnerability_archive_export_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION vulnerability_archive_export_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION vulnerability_archive_export_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION vulnerability_archive_export_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION vulnerability_archive_export_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION vulnerability_archive_export_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION vulnerability_export_part_upl_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION vulnerability_export_part_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION vulnerability_export_part_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION vulnerability_export_part_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION vulnerability_export_part_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION vulnerability_export_part_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION vulnerability_export_part_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION vulnerability_export_part_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION vulnerability_export_part_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION vulnerability_export_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION vulnerability_export_uploads_model_id_model_type_uploader_c_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION vulnerability_export_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION vulnerability_export_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION vulnerability_export_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION vulnerability_export_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION vulnerability_export_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION vulnerability_export_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION vulnerability_export_uploads_uploader_path_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_model_uploader_created_at ATTACH PARTITION vulnerability_remediation_upl_model_id_model_type_uploader__idx; + +ALTER INDEX index_uploads_9ba88c4165_on_checksum ATTACH PARTITION vulnerability_remediation_uploads_checksum_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_namespace_id ATTACH PARTITION vulnerability_remediation_uploads_namespace_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_organization_id ATTACH PARTITION vulnerability_remediation_uploads_organization_id_idx; + +ALTER INDEX uploads_9ba88c4165_pkey ATTACH PARTITION vulnerability_remediation_uploads_pkey; + +ALTER INDEX index_uploads_9ba88c4165_on_project_id ATTACH PARTITION vulnerability_remediation_uploads_project_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_store ATTACH PARTITION vulnerability_remediation_uploads_store_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploaded_by_user_id ATTACH PARTITION vulnerability_remediation_uploads_uploaded_by_user_id_idx; + +ALTER INDEX index_uploads_9ba88c4165_on_uploader_and_path ATTACH PARTITION vulnerability_remediation_uploads_uploader_path_idx; + CREATE TRIGGER ai_conversation_threads_loose_fk_trigger AFTER DELETE ON ai_conversation_threads REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); CREATE TRIGGER assign_ci_runner_machines_id_trigger BEFORE INSERT ON ci_runner_machines FOR EACH ROW EXECUTE FUNCTION assign_ci_runner_machines_id_value(); @@ -39122,6 +40668,8 @@ CREATE TRIGGER projects_loose_fk_trigger AFTER DELETE ON projects REFERENCING OL CREATE TRIGGER push_rules_loose_fk_trigger AFTER DELETE ON push_rules REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); +CREATE TRIGGER table_sync_trigger_4ea4473e79 AFTER INSERT OR DELETE OR UPDATE ON uploads FOR EACH ROW EXECUTE FUNCTION table_sync_function_40ecbfb353(); + CREATE TRIGGER table_sync_trigger_61879721b5 AFTER INSERT OR DELETE OR UPDATE ON ci_runners FOR EACH ROW EXECUTE FUNCTION table_sync_function_686d6c7993(); CREATE TRIGGER table_sync_trigger_b99eb6998c AFTER INSERT OR DELETE OR UPDATE ON web_hook_logs FOR EACH ROW EXECUTE FUNCTION table_sync_function_29bc99d6db(); @@ -42552,6 +44100,9 @@ ALTER TABLE ONLY ci_runner_machines_archived ALTER TABLE ONLY approval_group_rules ADD CONSTRAINT fk_rails_6727675176 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; +ALTER TABLE uploads_9ba88c4165 + ADD CONSTRAINT fk_rails_67403e76d7 FOREIGN KEY (uploaded_by_user_id) REFERENCES users(id) ON DELETE SET NULL; + ALTER TABLE ONLY jira_imports ADD CONSTRAINT fk_rails_675d38c03b FOREIGN KEY (label_id) REFERENCES labels(id) ON DELETE SET NULL; @@ -42621,6 +44172,9 @@ ALTER TABLE ONLY project_custom_attributes ALTER TABLE ONLY ci_pending_builds ADD CONSTRAINT fk_rails_725a2644a3_p FOREIGN KEY (partition_id, build_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE; +ALTER TABLE uploads_9ba88c4165 + ADD CONSTRAINT fk_rails_728a7c799d FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; + ALTER TABLE security_findings ADD CONSTRAINT fk_rails_729b763a54 FOREIGN KEY (scanner_id) REFERENCES vulnerability_scanners(id) ON DELETE CASCADE; @@ -43422,6 +44976,9 @@ ALTER TABLE ONLY dependency_proxy_blobs ALTER TABLE ONLY board_user_preferences ADD CONSTRAINT fk_rails_dbebdaa8fe FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE; +ALTER TABLE uploads_9ba88c4165 + ADD CONSTRAINT fk_rails_dc321bb575 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; + ALTER TABLE ai_duo_chat_events ADD CONSTRAINT fk_rails_dc42b37fb3 FOREIGN KEY (personal_namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; @@ -43509,6 +45066,9 @@ ALTER TABLE ONLY packages_protection_rules ALTER TABLE ONLY vulnerability_flags ADD CONSTRAINT fk_rails_e59393b48b FOREIGN KEY (vulnerability_occurrence_id) REFERENCES vulnerability_occurrences(id) ON DELETE CASCADE; +ALTER TABLE uploads_9ba88c4165 + ADD CONSTRAINT fk_rails_e5afc14eb7 FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE; + ALTER TABLE ONLY incident_management_escalation_policies ADD CONSTRAINT fk_rails_e5b513daa7 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; diff --git a/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb b/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb index 95b3d07eb149aebcb5fc6a326333abc01b3f2e86..36bd87c2322fc3d6f306bd5dc59b4a4dd9872ecb 100644 --- a/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb +++ b/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb @@ -10,7 +10,7 @@ module TableManagementHelpers ALLOWED_TABLES = %w[group_audit_events project_audit_events instance_audit_events user_audit_events audit_events web_hook_logs merge_request_diff_files merge_request_diff_commits - ci_runners ci_runner_machines].freeze + ci_runners ci_runner_machines uploads].freeze ERROR_SCOPE = 'table partitioning' @@ -154,7 +154,8 @@ def partition_table_by_date(table_name, column_name, min_date: nil, max_date: ni # def partition_table_by_list( table_name, column_name, - primary_key:, partition_mappings: nil, partition_name_format: nil, create_partitioned_table_fn: nil + primary_key:, partition_mappings: nil, partition_name_format: nil, + create_partitioned_table_fn: nil, sync_trigger: true ) Gitlab::Database::QueryAnalyzers::RestrictAllowedSchemas.require_ddl_mode! @@ -191,7 +192,7 @@ def partition_table_by_list( create_list_partitioned_copy( table_name, partitioned_table_name, partition_column, primary_key_objects, create_partitioned_table_fn) create_list_partitions(partitioned_table_name, partition_mappings, partition_name_format) - create_trigger_to_sync_tables(table_name, partitioned_table_name, current_primary_key) + create_trigger_to_sync_tables(table_name, partitioned_table_name, current_primary_key) if sync_trigger end end diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb index 6c047861ded9f2473af2594c6717887a0351baf9..5060d3554b999d99f456212f3cfb0b2e2071cec9 100644 --- a/spec/db/schema_spec.rb +++ b/spec/db/schema_spec.rb @@ -191,6 +191,31 @@ timelogs: %w[user_id], todos: %w[target_id commit_id], uploads: %w[model_id organization_id namespace_id project_id], + uploads_9ba88c4165: %w[model_id], + abuse_report_uploads: %w[model_id], + achievement_uploads: %w[model_id], + ai_vectorizable_file_uploads: %w[model_id], + alert_management_alert_metric_image_uploads: %w[model_id], + appearance_uploads: %w[model_id], + bulk_import_export_upload_uploads: %w[model_id], + dependency_list_export_part_uploads: %w[model_id], + dependency_list_export_uploads: %w[model_id], + design_management_action_uploads: %w[model_id], + import_export_upload_uploads: %w[model_id], + issuable_metric_image_uploads: %w[model_id], + namespace_uploads: %w[model_id], + note_uploads: %w[model_id], + organization_detail_uploads: %w[model_id], + project_import_export_relation_export_upload_uploads: %w[model_id], + project_topic_uploads: %w[model_id], + project_uploads: %w[model_id], + snippet_uploads: %w[model_id], + user_permission_export_upload_uploads: %w[model_id], + user_uploads: %w[model_id], + vulnerability_export_part_uploads: %w[model_id], + vulnerability_export_uploads: %w[model_id], + vulnerability_archive_export_uploads: %w[model_id], + vulnerability_remediation_uploads: %w[model_id], user_agent_details: %w[subject_id], users: %w[color_mode_id color_scheme_id created_by_id theme_id managing_group_id accepted_term_id], users_star_projects: %w[user_id], diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb index 989072ba1fb52ba16a3d3ae92766ee5a00149f9a..cbefa815191f7917befd463ea864136178670f7e 100644 --- a/spec/features/snippets/user_creates_snippet_spec.rb +++ b/spec/features/snippets/user_creates_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates snippet', :js, feature_category: :source_code_management do +RSpec.describe 'User creates snippet', :with_current_organization, :js, feature_category: :source_code_management do include DropzoneHelper include Features::SnippetSpecHelpers diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb index ae4ffd583f704c780c8293b7cee50db2730c7761..e51589c8eece7c542bed2bb6a7d5b3b825afff81 100644 --- a/spec/lib/gitlab/database/sharding_key_spec.rb +++ b/spec/lib/gitlab/database/sharding_key_spec.rb @@ -29,7 +29,8 @@ *['labels.project_id', 'labels.group_id'], # https://gitlab.com/gitlab-org/gitlab/-/issues/434356 'member_roles.namespace_id', # https://gitlab.com/gitlab-org/gitlab/-/issues/444161 'sprints.group_id', - *['todos.project_id', 'todos.group_id'] + *['todos.project_id', 'todos.group_id'], + *uploads_and_partitions ] end @@ -47,6 +48,35 @@ ] end + # The following tables are work in progress as part of + # https://gitlab.com/gitlab-org/gitlab/-/issues/398199 + # TODO: Remove these excepttions once the issue is closed. + let(:uploads_and_partitions) do + [ + "achievement_uploads.namespace_id", + "ai_vectorizable_file_uploads.project_id", + "alert_management_alert_metric_image_uploads.project_id", + "bulk_import_export_upload_uploads.project_id", "bulk_import_export_upload_uploads.namespace_id", + "dependency_list_export_part_uploads.organization_id", + "dependency_list_export_uploads.organization_id", "dependency_list_export_uploads.namespace_id", + "dependency_list_export_uploads.project_id", + "design_management_action_uploads.namespace_id", + "import_export_upload_uploads.project_id", "import_export_upload_uploads.namespace_id", + "issuable_metric_image_uploads.namespace_id", + "namespace_uploads.namespace_id", + "note_uploads.namespace_id", + "organization_detail_uploads.organization_id", + "project_import_export_relation_export_upload_uploads.project_id", + "project_topic_uploads.organization_id", + "project_uploads.project_id", + "snippet_uploads.organization_id", + "vulnerability_export_part_uploads.organization_id", + "vulnerability_export_uploads.organization_id", + "vulnerability_archive_export_uploads.project_id", + "vulnerability_remediation_uploads.project_id" + ] + end + # Some reasons to exempt a table: # 1. It has no foreign key for performance reasons # 2. It does not yet have a foreign key as the index is still being backfilled @@ -228,10 +258,38 @@ "oauth_access_grants" => "https://gitlab.com/gitlab-org/gitlab/-/issues/496717", "oauth_openid_requests" => "https://gitlab.com/gitlab-org/gitlab/-/issues/496717", "oauth_device_grants" => "https://gitlab.com/gitlab-org/gitlab/-/issues/496717", - "uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", "bulk_import_trackers" => "https://gitlab.com/gitlab-org/gitlab/-/issues/517823", "ai_duo_chat_events" => "https://gitlab.com/gitlab-org/gitlab/-/issues/516140", - "fork_networks" => "https://gitlab.com/gitlab-org/gitlab/-/issues/522958" + "fork_networks" => "https://gitlab.com/gitlab-org/gitlab/-/issues/522958", + # All the tables below related to uploads are part of the same work to + # add sharding key to the table + "uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "abuse_report_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "achievement_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "ai_vectorizable_file_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "alert_management_alert_metric_image_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "appearance_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "bulk_import_export_upload_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "dependency_list_export_part_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "dependency_list_export_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "design_management_action_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "import_export_upload_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "issuable_metric_image_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "namespace_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "note_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "organization_detail_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "project_import_export_relation_export_upload_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "project_topic_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "project_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "snippet_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "uploads_9ba88c4165" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "user_permission_export_upload_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "user_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "vulnerability_export_part_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "vulnerability_export_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "vulnerability_archive_export_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199", + "vulnerability_remediation_uploads" => "https://gitlab.com/gitlab-org/gitlab/-/issues/398199" + # End of uploads related tables } has_lfk = ->(lfks) { lfks.any? { |k| k.options[:column] == 'organization_id' && k.to_table == 'organizations' } } diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index dcd3ffcd5c96caa59c598b1888b9bc8ab8b66dca..b3f62e91d5b15c50484638379535b45c53cd05a3 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -2617,10 +2617,9 @@ describe '#uploads_sharding_key' do it 'returns organization_id' do - organization = build_stubbed(:organization) - namespace = build_stubbed(:namespace, organization: organization) + namespace = build_stubbed(:namespace) - expect(namespace.uploads_sharding_key).to eq(organization_id: organization.id) + expect(namespace.uploads_sharding_key).to eq(namespace_id: namespace.id) end end end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 94c2076d2e6b60dbd39a981e699e2191d0a3f80e..d015e99d88c74a5e578f38397d66c6feeb57d7e0 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -9922,10 +9922,9 @@ def create_build(new_pipeline = pipeline, name = 'test') describe '#uploads_sharding_key' do it 'returns namespace_id' do - namespace = build_stubbed(:namespace) - project = build_stubbed(:project, namespace: namespace) + project = build_stubbed(:project) - expect(project.uploads_sharding_key).to eq(namespace_id: namespace.id) + expect(project.uploads_sharding_key).to eq(project_id: project.id) end end diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb index 2e1e3cba49be89b9269d85745a207f226d05c70e..b92999cbfe6065b610ce2c9e3c8ad70d46e8a1b7 100644 --- a/spec/models/upload_spec.rb +++ b/spec/models/upload_spec.rb @@ -49,23 +49,23 @@ end context 'before_save' do + let_it_be(:project) { create(:project) } + it 'sets sharding key on create' do - project = build_stubbed(:project) upload = build(:upload, model: project) expect { upload.save! } - .to change { upload.namespace_id }.from(nil) - .to(project.uploads_sharding_key.each_value.first) + .to change { upload.project_id }.from(nil) + .to(project.id) end it 'sets sharding key on update' do - project = build_stubbed(:project) upload = create(:upload, model: project) - other_project = build_stubbed(:project) + other_project = create(:project) expect { upload.update!(model: other_project) } - .to change { upload.namespace_id }.from(project.uploads_sharding_key.each_value.first) - .to(other_project.uploads_sharding_key.each_value.first) + .to change { upload.project_id }.from(project.id) + .to(other_project.id) end end diff --git a/spec/uploaders/namespace_file_uploader_spec.rb b/spec/uploaders/namespace_file_uploader_spec.rb index 0db7f82dcbdfb542660359026bbea4762d1a8bc0..f992236464504bafee5030a52de04d51f5762715 100644 --- a/spec/uploaders/namespace_file_uploader_spec.rb +++ b/spec/uploaders/namespace_file_uploader_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' RSpec.describe NamespaceFileUploader do - let(:group) { build_stubbed(:group) } + let_it_be(:organization) { create(:organization) } + let_it_be(:group) { create(:group, organization: organization) } let(:uploader) { described_class.new(group) } let(:upload) { create(:upload, :namespace_upload, model: group) } let(:identifier) { %r{\h+/\S+} }