diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9534ad5686194f807930b93dcd645ab0d80ce615..0d166619dd7bcf50c8ca48057b2266bd9d1b0320 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -421,7 +421,7 @@ def gitlab_project_import_enabled?
   end
 
   def manifest_import_enabled?
-    Group.supports_nested_objects? && Gitlab::CurrentSettings.import_sources.include?('manifest')
+    Gitlab::CurrentSettings.import_sources.include?('manifest')
   end
 
   def phabricator_import_enabled?
diff --git a/app/controllers/concerns/group_tree.rb b/app/controllers/concerns/group_tree.rb
index e9a7d6a315240d122b05037588122999330eb063..d076c62c707ae90a2f5956a335e118add2dd7cbb 100644
--- a/app/controllers/concerns/group_tree.rb
+++ b/app/controllers/concerns/group_tree.rb
@@ -32,18 +32,14 @@ def render_group_tree(groups)
   def filtered_groups_with_ancestors(groups)
     filtered_groups = groups.search(params[:filter]).page(params[:page])
 
-    if Group.supports_nested_objects?
-      # We find the ancestors by ID of the search results here.
-      # Otherwise the ancestors would also have filters applied,
-      # which would cause them not to be preloaded.
-      #
-      # Pagination needs to be applied before loading the ancestors to
-      # make sure ancestors are not cut off by pagination.
-      Gitlab::ObjectHierarchy.new(Group.where(id: filtered_groups.select(:id)))
-        .base_and_ancestors
-    else
-      filtered_groups
-    end
+    # We find the ancestors by ID of the search results here.
+    # Otherwise the ancestors would also have filters applied,
+    # which would cause them not to be preloaded.
+    #
+    # Pagination needs to be applied before loading the ancestors to
+    # make sure ancestors are not cut off by pagination.
+    Gitlab::ObjectHierarchy.new(Group.where(id: filtered_groups.select(:id)))
+      .base_and_ancestors
   end
   # rubocop: enable CodeReuse/ActiveRecord
 end
diff --git a/app/finders/group_descendants_finder.rb b/app/finders/group_descendants_finder.rb
index ec340f38450f87586b40aefac23bcdc304df597e..4e489a9c930e7ac5a2ec5f63ea218f93da44f8a3 100644
--- a/app/finders/group_descendants_finder.rb
+++ b/app/finders/group_descendants_finder.rb
@@ -132,8 +132,6 @@ def ancestors_of_filtered_subgroups
   end
 
   def subgroups
-    return Group.none unless Group.supports_nested_objects?
-
     # When filtering subgroups, we want to find all matches within the tree of
     # descendants to show to the user
     groups = if params[:filter]
diff --git a/app/graphql/types/group_type.rb b/app/graphql/types/group_type.rb
index 2181b9320f5953de3bf20146f59334f3c6ecea10..0e539bd6b30f8df1baee611606ec0e43b19531c1 100644
--- a/app/graphql/types/group_type.rb
+++ b/app/graphql/types/group_type.rb
@@ -14,11 +14,9 @@ class GroupType < NamespaceType
       group.avatar_url(only_path: false)
     end
 
-    if ::Group.supports_nested_objects?
-      field :parent, GroupType,
-            null: true,
-            resolve: -> (obj, _args, _ctx) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Group, obj.parent_id).find }
-    end
+    field :parent, GroupType,
+          null: true,
+          resolve: -> (obj, _args, _ctx) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Group, obj.parent_id).find }
   end
 end
 
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 1a09ccce1f9ddd25a9331c1d2ee6d15212259f4a..27499d5b74c7c1a9811d11f7a9c046e7ef77545b 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -127,10 +127,6 @@ def parent_group_options(current_group)
     groups.to_json
   end
 
-  def supports_nested_groups?
-    Group.supports_nested_objects?
-  end
-
   private
 
   def get_group_sidebar_links
diff --git a/app/models/concerns/descendant.rb b/app/models/concerns/descendant.rb
deleted file mode 100644
index 4c43652212230aadbcc787dca35809b166555582..0000000000000000000000000000000000000000
--- a/app/models/concerns/descendant.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-module Descendant
-  extend ActiveSupport::Concern
-
-  class_methods do
-    def supports_nested_objects?
-      Gitlab::Database.postgresql?
-    end
-  end
-end
diff --git a/app/models/group.rb b/app/models/group.rb
index b5e95e01bb31d0903fd033ec975062d395b10579..72d999626a108395ac83bb9107b4b991e3a263cc 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -10,7 +10,6 @@ class Group < Namespace
   include Referable
   include SelectForProjectAuthorization
   include LoadedInGroupList
-  include Descendant
   include GroupDescendant
   include TokenAuthenticatable
   include WithUploads
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index 8429493a7bfb1ebe274cad319b831bf4c525f010..ad00d660a983e86c81d111335fe8168dd73f3d56 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -332,8 +332,6 @@ def sync_share_with_group_lock_with_parent
   end
 
   def force_share_with_group_lock_on_descendants
-    return unless Group.supports_nested_objects?
-
     # We can't use `descendants.update_all` since Rails will throw away the WITH
     # RECURSIVE statement. We also can't use WHERE EXISTS since we can't use
     # different table aliases, hence we're just using WHERE IN. Since we have a
diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb
index 03e18dd7be320999433e2945ba2a68e4432b3c2b..2b67339a062b8221505179b67d75aa71023acc7e 100644
--- a/app/policies/group_policy.rb
+++ b/app/policies/group_policy.rb
@@ -16,8 +16,6 @@ class GroupPolicy < BasePolicy
   condition(:maintainer) { access_level >= GroupMember::MAINTAINER }
   condition(:reporter) { access_level >= GroupMember::REPORTER }
 
-  condition(:nested_groups_supported, scope: :global) { Group.supports_nested_objects? }
-
   condition(:has_parent, scope: :subject) { @subject.has_parent? }
   condition(:share_with_group_locked, scope: :subject) { @subject.share_with_group_lock? }
   condition(:parent_share_with_group_locked, scope: :subject) { @subject.parent&.share_with_group_lock? }
@@ -108,8 +106,8 @@ class GroupPolicy < BasePolicy
     enable :read_nested_project_resources
   end
 
-  rule { owner & nested_groups_supported }.enable :create_subgroup
-  rule { maintainer & maintainer_can_create_group & nested_groups_supported }.enable :create_subgroup
+  rule { owner }.enable :create_subgroup
+  rule { maintainer & maintainer_can_create_group }.enable :create_subgroup
 
   rule { public_group | logged_in_viewable }.enable :view_globally
 
diff --git a/app/services/groups/nested_create_service.rb b/app/services/groups/nested_create_service.rb
index 01bd685712bb861b11e61daf028cc5b6a2684a8d..a51ac9aa593f93de8fd517c6253606b85b53334f 100644
--- a/app/services/groups/nested_create_service.rb
+++ b/app/services/groups/nested_create_service.rb
@@ -18,10 +18,6 @@ def execute
         return namespace
       end
 
-      if group_path.include?('/') && !Group.supports_nested_objects?
-        raise 'Nested groups are not supported on MySQL'
-      end
-
       create_group_path
     end
 
diff --git a/app/services/groups/transfer_service.rb b/app/services/groups/transfer_service.rb
index 98e7c311572147b9435d351e12eca2d49a3aa7e6..fe7e07ef9f0856646531d6a234ef535bde8c80b2 100644
--- a/app/services/groups/transfer_service.rb
+++ b/app/services/groups/transfer_service.rb
@@ -43,7 +43,6 @@ def proceed_to_transfer
 
     def ensure_allowed_transfer
       raise_transfer_error(:group_is_already_root) if group_is_already_root?
-      raise_transfer_error(:database_not_supported) unless Group.supports_nested_objects?
       raise_transfer_error(:same_parent_as_current) if same_parent?
       raise_transfer_error(:invalid_policies) unless valid_policies?
       raise_transfer_error(:namespace_with_same_path) if namespace_with_same_path?
diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb
index 00a087b05ab5f45d2802734f83dae82e3c62ec74..6687b319dbfc35ba99b3d13b7fbac64bf4eab5d9 100644
--- a/app/services/members/destroy_service.rb
+++ b/app/services/members/destroy_service.rb
@@ -31,7 +31,7 @@ def delete_subresources(member)
       return unless member.is_a?(GroupMember) && member.user && member.group
 
       delete_project_members(member)
-      delete_subgroup_members(member) if Group.supports_nested_objects?
+      delete_subgroup_members(member)
     end
 
     def delete_project_members(member)
diff --git a/app/services/users/refresh_authorized_projects_service.rb b/app/services/users/refresh_authorized_projects_service.rb
index 4a26d2be2af1717a7e6063c73f18c4d7850b765b..ae67b4f525691c36e98bf2b4b18f1901807a0acb 100644
--- a/app/services/users/refresh_authorized_projects_service.rb
+++ b/app/services/users/refresh_authorized_projects_service.rb
@@ -102,13 +102,7 @@ def current_authorizations
     end
 
     def fresh_authorizations
-      klass = if Group.supports_nested_objects?
-                Gitlab::ProjectAuthorizations::WithNestedGroups
-              else
-                Gitlab::ProjectAuthorizations::WithoutNestedGroups
-              end
-
-      klass.new(user).calculate
+      Gitlab::ProjectAuthorizations.new(user).calculate
     end
   end
 end
diff --git a/app/views/groups/settings/_advanced.html.haml b/app/views/groups/settings/_advanced.html.haml
index 5d211d0e186b9bc76ce13712ddfcc9b047e81240..d1eb6478997797b084a77d17275f50fb1815c89a 100644
--- a/app/views/groups/settings/_advanced.html.haml
+++ b/app/views/groups/settings/_advanced.html.haml
@@ -23,20 +23,19 @@
 
     = f.submit 'Change group path', class: 'btn btn-warning'
 
-- if supports_nested_groups?
-  .sub-section
-    %h4.warning-title Transfer group
-    = form_for @group, url: transfer_group_path(@group), method: :put do |f|
-      .form-group
-        = dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } })
-        = hidden_field_tag 'new_parent_group_id'
+.sub-section
+  %h4.warning-title Transfer group
+  = form_for @group, url: transfer_group_path(@group), method: :put do |f|
+    .form-group
+      = dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } })
+      = hidden_field_tag 'new_parent_group_id'
 
-      %ul
-        %li Be careful. Changing a group's parent can have unintended #{link_to 'side effects', 'https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths', target: 'blank'}.
-        %li You can only transfer the group to a group you manage.
-        %li You will need to update your local repositories to point to the new location.
-        %li If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.
-      = f.submit 'Transfer group', class: 'btn btn-warning'
+    %ul
+      %li Be careful. Changing a group's parent can have unintended #{link_to 'side effects', 'https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths', target: 'blank'}.
+      %li You can only transfer the group to a group you manage.
+      %li You will need to update your local repositories to point to the new location.
+      %li If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.
+    = f.submit 'Transfer group', class: 'btn btn-warning'
 
 .sub-section
   %h4.danger-title= _('Remove group')
diff --git a/ee/app/assets/javascripts/epic/components/epic_body.vue b/ee/app/assets/javascripts/epic/components/epic_body.vue
index c5ff3d520344354de0d5f9a0a6f529492672b0f1..c25f397a212145962a37b5c69bc919d47710f41b 100644
--- a/ee/app/assets/javascripts/epic/components/epic_body.vue
+++ b/ee/app/assets/javascripts/epic/components/epic_body.vue
@@ -25,7 +25,6 @@ export default {
       'canUpdate',
       'canDestroy',
       'canAdmin',
-      'subepicsSupported',
       'initialTitleHtml',
       'initialTitleText',
       'initialDescriptionHtml',
@@ -64,7 +63,7 @@ export default {
       />
     </div>
     <related-items
-      v-if="subepicsSupported && !isEpicTreeEnabled"
+      v-if="!isEpicTreeEnabled"
       :endpoint="epicLinksEndpoint"
       :can-admin="canAdmin"
       :can-reorder="canAdmin"
diff --git a/ee/app/assets/javascripts/epic/store/state.js b/ee/app/assets/javascripts/epic/store/state.js
index 8c6a6a28d6ab52438d754e6d432a8d305633a104..674b92f1e3afbb202d7f2119fbb7e3081f643fe0 100644
--- a/ee/app/assets/javascripts/epic/store/state.js
+++ b/ee/app/assets/javascripts/epic/store/state.js
@@ -21,7 +21,6 @@ export default () => ({
   canUpdate: false,
   canDestroy: false,
   canAdmin: false,
-  subepicsSupported: false,
 
   // Epic Information
   epicId: 0,
diff --git a/ee/app/controllers/groups/epic_links_controller.rb b/ee/app/controllers/groups/epic_links_controller.rb
index 513d5d16118cb3cc47ab9176bdb4def1bcd690fb..eff2e1de08b0348818850faabbfb1d4d275cd9be 100644
--- a/ee/app/controllers/groups/epic_links_controller.rb
+++ b/ee/app/controllers/groups/epic_links_controller.rb
@@ -3,8 +3,6 @@
 class Groups::EpicLinksController < Groups::ApplicationController
   include EpicRelations
 
-  before_action :check_nested_support!
-
   def update
     result = EpicLinks::UpdateService.new(child_epic, current_user, params[:epic]).execute
 
@@ -30,8 +28,4 @@ def list_service
   def child_epic
     @child_epic ||= Epic.find(params[:id])
   end
-
-  def check_nested_support!
-    render_404 unless Epic.supports_nested_objects?
-  end
 end
diff --git a/ee/app/helpers/ee/issuables_helper.rb b/ee/app/helpers/ee/issuables_helper.rb
index 72f345f70f3c5f0ed0359e9ad8c5139ecaa6655d..61da5f2bf57bc60f3e85deecb51bbefbf141f44b 100644
--- a/ee/app/helpers/ee/issuables_helper.rb
+++ b/ee/app/helpers/ee/issuables_helper.rb
@@ -21,7 +21,6 @@ def issuable_initial_data(issuable)
       if parent.is_a?(Group)
         data[:issueLinksEndpoint] = group_epic_issues_path(parent, issuable)
         data[:epicLinksEndpoint] = group_epic_links_path(parent, issuable)
-        data[:subepicsSupported] = ::Epic.supports_nested_objects?
         data[:fullPath] = parent.full_path
       end
 
diff --git a/ee/app/models/ee/epic.rb b/ee/app/models/ee/epic.rb
index 2d24f6415f08cd840967692ec5f760f46a8ff243..afa17d826d686d9a1e537e24f51f1960cd18cb7d 100644
--- a/ee/app/models/ee/epic.rb
+++ b/ee/app/models/ee/epic.rb
@@ -12,7 +12,6 @@ module Epic
       include Referable
       include Awardable
       include LabelEventable
-      include Descendant
       include RelativePositioning
 
       enum state: { opened: 1, closed: 2 }
@@ -164,8 +163,6 @@ def relative_positioning_parent_column
       # epic2 - parent: epic1
       # Returns: 2
       def deepest_relationship_level
-        return unless supports_nested_objects?
-
         ::Gitlab::ObjectHierarchy.new(self.where(parent_id: nil)).max_descendants_depth
       end
 
diff --git a/ee/lib/ee/gitlab/quick_actions/epic_actions.rb b/ee/lib/ee/gitlab/quick_actions/epic_actions.rb
index 23a021d5914a1057703e4ed53df271a552491b32..097802e433a9723771c8641fafcc0e96347c7144 100644
--- a/ee/lib/ee/gitlab/quick_actions/epic_actions.rb
+++ b/ee/lib/ee/gitlab/quick_actions/epic_actions.rb
@@ -82,7 +82,7 @@ def extract_epic(params)
           end
 
           def action_allowed?
-            ::Epic.supports_nested_objects? && quick_action_target.group&.feature_available?(:epics) &&
+            quick_action_target.group&.feature_available?(:epics) &&
               current_user.can?(:"admin_#{quick_action_target.to_ability_name}", quick_action_target)
           end
         end
diff --git a/ee/lib/ee/gitlab/usage_data.rb b/ee/lib/ee/gitlab/usage_data.rb
index 35b180f0a2b05d2f5d95e5170db075c0d01a255b..1c644007c4f6f0eb5d1dfaca1644f6714793d8ff 100644
--- a/ee/lib/ee/gitlab/usage_data.rb
+++ b/ee/lib/ee/gitlab/usage_data.rb
@@ -136,12 +136,9 @@ def system_usage_data
             projects_with_packages: count(::Packages::Package.select('distinct project_id')),
             projects_with_prometheus_alerts: count(PrometheusAlert.distinct_projects),
             projects_with_tracing_enabled: count(ProjectTracingSetting)
-          }).merge(service_desk_counts).merge(security_products_usage)
-
-          # MySql does not support recursive queries so we can't retrieve epics relationship depth
-          if ::Group.supports_nested_objects?
-            usage_data[:counts] = usage_data[:counts].merge(epics_deepest_relationship_level)
-          end
+          }).merge(service_desk_counts)
+            .merge(security_products_usage)
+            .merge(epics_deepest_relationship_level)
 
           usage_data
         end
diff --git a/ee/spec/controllers/admin/geo/nodes_controller_spec.rb b/ee/spec/controllers/admin/geo/nodes_controller_spec.rb
index 097a7695b71c79b99c5ee55fe8d55a4473b02c4e..ab9f6878793ca01c8fc8041675bb65d9ce2e212b 100644
--- a/ee/spec/controllers/admin/geo/nodes_controller_spec.rb
+++ b/ee/spec/controllers/admin/geo/nodes_controller_spec.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 require 'spec_helper'
 
-describe Admin::Geo::NodesController, :postgresql do
+describe Admin::Geo::NodesController do
   shared_examples 'unlicensed geo action' do
     it 'redirects to the license page' do
       expect(response).to redirect_to(admin_license_path)
diff --git a/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb b/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb
index 14366941b849be6bf87d1750ea087e5834322ea5..8b596f1ffa5c01a8e2ff56e10c811b7acad13b5a 100644
--- a/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb
+++ b/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb
@@ -93,7 +93,7 @@
       it_behaves_like 'a routable SSO url'
     end
 
-    context 'with a nested group', :nested_groups do
+    context 'with a nested group' do
       subject { described_class.new(nested_group) }
 
       it_behaves_like 'a routable SSO url'
@@ -105,7 +105,7 @@
       it_behaves_like 'a routable SSO url'
     end
 
-    context 'with a nested project', :nested_groups do
+    context 'with a nested project' do
       subject { described_class.new(nested_project) }
 
       it_behaves_like 'a routable SSO url'
diff --git a/ee/spec/controllers/concerns/routable_actions_spec.rb b/ee/spec/controllers/concerns/routable_actions_spec.rb
index 06758b1b53e01c88b1497e0bba73412d8b1f87df..4ea2f5741775cf521a3ac9019e2dbc11a8f13c79 100644
--- a/ee/spec/controllers/concerns/routable_actions_spec.rb
+++ b/ee/spec/controllers/concerns/routable_actions_spec.rb
@@ -58,7 +58,7 @@ def request_params(routable)
         include_examples 'sso redirects'
       end
 
-      describe 'for a nested group', :nested_groups do
+      describe 'for a nested group' do
         let(:routable) { create(:group, :private, parent: root_group) }
 
         include_examples 'sso redirects'
@@ -70,7 +70,7 @@ def request_params(routable)
         include_examples 'sso redirects'
       end
 
-      describe 'for a nested project', :nested_groups do
+      describe 'for a nested project' do
         let(:routable) { create(:project, :private, group: create(:group, :private, parent: root_group)) }
 
         include_examples 'sso redirects'
diff --git a/ee/spec/controllers/groups/epic_links_controller_spec.rb b/ee/spec/controllers/groups/epic_links_controller_spec.rb
index 6f2c21156718dc8f9095b1f17fea13ee0f4abc3d..84e08920ccf6fe7364dff20b2bc2caf363269e89 100644
--- a/ee/spec/controllers/groups/epic_links_controller_spec.rb
+++ b/ee/spec/controllers/groups/epic_links_controller_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe Groups::EpicLinksController, :postgresql do
+describe Groups::EpicLinksController do
   let(:group) { create(:group, :public) }
   let(:parent_epic) { create(:epic, group: group) }
   let(:epic1) { create(:epic, group: group) }
diff --git a/ee/spec/controllers/groups/saml_providers_controller_spec.rb b/ee/spec/controllers/groups/saml_providers_controller_spec.rb
index eec2919c6907986b2d792d5b722c68c70ea7fa5e..654e5390372fe8b059b15d9bc0fbad4329122b5e 100644
--- a/ee/spec/controllers/groups/saml_providers_controller_spec.rb
+++ b/ee/spec/controllers/groups/saml_providers_controller_spec.rb
@@ -96,7 +96,7 @@ def stub_saml_config(enabled:)
         expect(assigns(:scim_token_url)).to eq("http://localhost/api/scim/v2/groups/#{group.full_path}")
       end
 
-      context 'not on a top level group', :nested_groups do
+      context 'not on a top level group' do
         let(:group) { create(:group, :nested) }
 
         it_behaves_like '404 status'
diff --git a/ee/spec/features/billings/billing_plans_spec.rb b/ee/spec/features/billings/billing_plans_spec.rb
index c57765d7879d3ffd824e6ae52d442e822a042117..73fbe11656527f086107f501dc4eb8b0b00cb538 100644
--- a/ee/spec/features/billings/billing_plans_spec.rb
+++ b/ee/spec/features/billings/billing_plans_spec.rb
@@ -158,7 +158,7 @@
     end
   end
 
-  context 'on sub-group', :nested_groups do
+  context 'on sub-group' do
     let(:user2) { create(:user) }
     let(:user3) { create(:user) }
     let(:group) { create(:group, plan: :bronze_plan) }
diff --git a/ee/spec/features/epics/epic_issues_spec.rb b/ee/spec/features/epics/epic_issues_spec.rb
index da6884b1a878c5b4ee5d396fdd3e2f1bf4a8c0d8..b874ae1a0541d8de0bb1d60318641208ca98f851 100644
--- a/ee/spec/features/epics/epic_issues_spec.rb
+++ b/ee/spec/features/epics/epic_issues_spec.rb
@@ -55,7 +55,7 @@ def visit_epic
       expect(page).not_to have_selector('.related-items-tree-container .js-add-issues-button')
     end
 
-    it 'user cannot add new epics to the epic', :postgresql do
+    it 'user cannot add new epics to the epic' do
       expect(page).not_to have_selector('.related-items-tree-container .js-add-epics-button')
     end
   end
@@ -109,7 +109,7 @@ def add_epics(references)
       end
     end
 
-    it 'user can see all epics of the group and delete the associations', :postgresql do
+    it 'user can see all epics of the group and delete the associations' do
       within('.related-items-tree-container ul.related-items-list') do
         expect(page).to have_selector('li.js-item-type-epic', count: 2)
         expect(page).to have_content(nested_epics[0].title)
@@ -146,7 +146,7 @@ def add_epics(references)
       end
     end
 
-    it 'user can add new epics to the epic', :postgresql do
+    it 'user can add new epics to the epic' do
       references = "#{epic_to_add.to_reference(full: true)}"
       add_epics(references)
 
diff --git a/ee/spec/features/groups/group_settings_spec.rb b/ee/spec/features/groups/group_settings_spec.rb
index 1ea5c6ab2c4dfba2342f09d0840abd32f211461a..cdddf30415b0598c0554e8d211498b3ff176ce1d 100644
--- a/ee/spec/features/groups/group_settings_spec.rb
+++ b/ee/spec/features/groups/group_settings_spec.rb
@@ -148,7 +148,7 @@
     end
   end
 
-  context 'when custom_project_templates feature', :postgresql do
+  context 'when custom_project_templates feature' do
     let!(:subgroup) { create(:group, :public, parent: group) }
     let!(:subgroup_1) { create(:group, :public, parent: subgroup) }
 
diff --git a/ee/spec/features/labels_hierarchy.rb b/ee/spec/features/labels_hierarchy.rb
index 7961c93f51203d58588bdf9d34e22305e0ba3e0f..424138739eb9014417360a03fe1a47e807b82b37 100644
--- a/ee/spec/features/labels_hierarchy.rb
+++ b/ee/spec/features/labels_hierarchy.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'Labels Hierarchy', :js, :nested_groups do
+describe 'Labels Hierarchy', :js do
   let!(:user) { create(:user) }
   let!(:grandparent) { create(:group) }
   let!(:parent) { create(:group, parent: grandparent) }
diff --git a/ee/spec/features/projects/members/invite_group_and_members_spec.rb b/ee/spec/features/projects/members/invite_group_and_members_spec.rb
index 1535ca40df206d647406108488e13850eaa84692..5fb688dc6640d004b77b1e8b09a0cb0f171115de 100644
--- a/ee/spec/features/projects/members/invite_group_and_members_spec.rb
+++ b/ee/spec/features/projects/members/invite_group_and_members_spec.rb
@@ -104,7 +104,7 @@
       end
     end
 
-    context 'for a project in a subgroup', :nested_groups do
+    context 'for a project in a subgroup' do
       let(:root_group) { create(:group) }
       let(:subgroup) { create(:group, parent: root_group) }
       let(:project) { create(:project, namespace: subgroup) }
diff --git a/ee/spec/features/projects/new_project_spec.rb b/ee/spec/features/projects/new_project_spec.rb
index a3d6131b0b1c47a1288b5bc7bdd8d0e3d2f50d50..c018c50fc181cf96b1482649edc9d226834c43b7 100644
--- a/ee/spec/features/projects/new_project_spec.rb
+++ b/ee/spec/features/projects/new_project_spec.rb
@@ -177,7 +177,7 @@
     end
   end
 
-  context 'Group-level project templates', :js, :postgresql do
+  context 'Group-level project templates', :js do
     def visit_create_from_group_template_tab
       visit url
       click_link 'Create from template'
diff --git a/ee/spec/finders/boards/milestones_finder_spec.rb b/ee/spec/finders/boards/milestones_finder_spec.rb
index cb651040680aa7b0e378a7267e1e401bdca1cc01..170af25480324e3999d61bebd44a00d009c1f541 100644
--- a/ee/spec/finders/boards/milestones_finder_spec.rb
+++ b/ee/spec/finders/boards/milestones_finder_spec.rb
@@ -18,7 +18,7 @@
     let(:user) { create(:user) }
     let(:finder) { described_class.new(board, user) }
 
-    context 'when project board', :nested_groups do
+    context 'when project board' do
       let(:board) { create(:board, project: nested_group_project, group: nil) }
 
       it 'returns milestones from board project and ancestors groups' do
@@ -32,7 +32,7 @@
       end
     end
 
-    context 'when group board', :nested_groups do
+    context 'when group board' do
       let(:board) { create(:board, project: nil, group: nested_group) }
 
       it 'returns milestones from board group and its ancestors' do
diff --git a/ee/spec/finders/epics_finder_spec.rb b/ee/spec/finders/epics_finder_spec.rb
index c55d460eedf5c7f4eb74e89ccfaafae4e965014a..067c9497ea62c875e966adffd9f1ef0a09c39535 100644
--- a/ee/spec/finders/epics_finder_spec.rb
+++ b/ee/spec/finders/epics_finder_spec.rb
@@ -110,7 +110,7 @@ def epics(params = {})
           end
         end
 
-        context 'when subgroups are supported', :nested_groups do
+        context 'when subgroups are supported' do
           let(:subgroup) { create(:group, :private, parent: group) }
           let(:subgroup2) { create(:group, :private, parent: subgroup) }
           let!(:subepic1) { create(:epic, group: subgroup) }
diff --git a/ee/spec/finders/geo/repository_verification_finder_spec.rb b/ee/spec/finders/geo/repository_verification_finder_spec.rb
index 5626768dcbcf719884d8eee1557e45bd7b52ec50..c7d8b1b6f6e00906a6dfd421588291b5d7fc7193 100644
--- a/ee/spec/finders/geo/repository_verification_finder_spec.rb
+++ b/ee/spec/finders/geo/repository_verification_finder_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerificationFinder, :postgresql do
+describe Geo::RepositoryVerificationFinder do
   set(:project) { create(:project) }
 
   describe '#find_failed_repositories' do
diff --git a/ee/spec/graphql/resolvers/epic_resolver_spec.rb b/ee/spec/graphql/resolvers/epic_resolver_spec.rb
index 7c1ad20b426e95cc6c6a2347a444a5fbd4e22307..e95a41a474d8cfeaac154b4b5096aca6fe269725 100644
--- a/ee/spec/graphql/resolvers/epic_resolver_spec.rb
+++ b/ee/spec/graphql/resolvers/epic_resolver_spec.rb
@@ -60,7 +60,7 @@
         end
       end
 
-      context 'with subgroups', :nested_groups do
+      context 'with subgroups' do
         let(:sub_group) { create(:group, parent: group) }
         let(:iids)      { [epic1, epic2].map(&:iid) }
         let!(:epic3)    { create(:epic, group: sub_group, iid: epic1.iid) }
diff --git a/ee/spec/helpers/ee/issuables_helper_spec.rb b/ee/spec/helpers/ee/issuables_helper_spec.rb
index 434c2ff09e78e8dd81a555c87e915b5e341e5a2c..265fafd495dc9193b393ee5c6e48413be217e223 100644
--- a/ee/spec/helpers/ee/issuables_helper_spec.rb
+++ b/ee/spec/helpers/ee/issuables_helper_spec.rb
@@ -35,8 +35,7 @@
         initialTitleText: epic.title,
         initialDescriptionHtml: '<p dir="auto">epic text</p>',
         initialDescriptionText: 'epic text',
-        initialTaskStatus: '0 of 0 tasks completed',
-        subepicsSupported: Gitlab::Database.postgresql?
+        initialTaskStatus: '0 of 0 tasks completed'
       }
       expect(helper.issuable_initial_data(epic)).to eq(expected_data)
     end
diff --git a/ee/spec/helpers/ee/namespaces_helper_spec.rb b/ee/spec/helpers/ee/namespaces_helper_spec.rb
index 6c45e1a8fb7c334a3967b00fd8cbfc99e86e4618..78b0dcb02039ab6ee5a9fc37d04750d9347c3ebd 100644
--- a/ee/spec/helpers/ee/namespaces_helper_spec.rb
+++ b/ee/spec/helpers/ee/namespaces_helper_spec.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 require 'spec_helper'
 
-describe EE::NamespacesHelper, :postgresql do
+describe EE::NamespacesHelper do
   let!(:admin) { create(:admin) }
   let!(:admin_project_creation_level) { nil }
   let!(:admin_group) do
diff --git a/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb b/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb
index a214f98bdc6e251a871f7840c691802d3e3bb676..2dd8848e9b29868766bdb88403b2e97b58683007 100644
--- a/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb
+++ b/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe EE::API::Entities::GeoNodeStatus, :postgresql do
+describe EE::API::Entities::GeoNodeStatus do
   include ::EE::GeoHelpers
 
   let(:geo_node_status) { build(:geo_node_status) }
diff --git a/ee/spec/lib/gitlab/custom_file_templates_spec.rb b/ee/spec/lib/gitlab/custom_file_templates_spec.rb
index 3763b2621c3c5280cf6188f7833adb296d6e8c3a..fcea31fbf4a4af3f5deff85de2551f4e8a46dba6 100644
--- a/ee/spec/lib/gitlab/custom_file_templates_spec.rb
+++ b/ee/spec/lib/gitlab/custom_file_templates_spec.rb
@@ -83,7 +83,7 @@ def template_files(prefix)
           end
         end
 
-        context 'in a subgroup', :nested_groups do
+        context 'in a subgroup' do
           set(:subgroup) { create(:group, parent: group) }
           set(:subproject) { create(:project, namespace: subgroup) }
           set(:subgroup_template_project) { create(:project, :custom_repo, namespace: subgroup, files: template_files('subgroup')) }
@@ -151,7 +151,7 @@ def be_template(key, category)
           end
         end
 
-        context 'in a subgroup', :nested_groups do
+        context 'in a subgroup' do
           let(:subgroup) { create(:group, parent: group) }
           let(:subproject) { create(:project, namespace: subgroup) }
           let(:subgroup_template_project) { create(:project, :custom_repo, namespace: subgroup, files: template_files('subgroup')) }
diff --git a/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb b/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb
index 2392c3f7b83672ae145f0834c3b49534295fc45d..d32eed52f5e4ea90bc2870bc0830c7609fb842c3 100644
--- a/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb
+++ b/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Database::LoadBalancing::Host, :postgresql do
+describe Gitlab::Database::LoadBalancing::Host do
   let(:load_balancer) do
     Gitlab::Database::LoadBalancing::LoadBalancer.new(%w[localhost])
   end
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb
index 347db221a4804894535295e75ab9ee16efae0001..4ad642be235d447ba7d2ce2844193438879a1fb7 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Daemon, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Daemon, :clean_gitlab_redis_shared_state do
   include ::EE::GeoHelpers
   include ExclusiveLeaseHelpers
 
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb
index 0e7c5b917f347fc710615b9134f0ad0c360516a4..7f523945620f7683d34b2a0d4e4526337adec098 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::EventLogs, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::EventLogs, :clean_gitlab_redis_shared_state do
   subject { described_class.new }
 
   describe '#fetch_in_batches' do
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb
index 949628ae20d2c4e40ff692e8f3db3ff0ddf2f9c0..4a9a770d8a83bbe265efbb111927ae54ea6621e3 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::CacheInvalidationEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::CacheInvalidationEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :cache_invalidation_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb
index 69f9325cd946ff01a0bfcc0f3ed47fa799af0cae..0056d86ce266747ce369fc830d9f3d0cd9681246 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::HashedStorageAttachmentsEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::HashedStorageAttachmentsEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :hashed_storage_attachments_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb
index 1432953a135768c1f7c5fad8eeb4f090affb9cab..965c2ae0d903e28d77838b39abf8da697d88d262 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::HashedStorageMigratedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::HashedStorageMigratedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :hashed_storage_migration_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb
index f140b86decf9cc5d0a65f36ac32fbff9198f1d19..a1de7cf500f7cecbed44a5385ae3ea2990737ef9 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::JobArtifactDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::JobArtifactDeletedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :job_artifact_deleted_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb
index d8dd96f9215914ab462f5c69e603c40c23e01224..45a9f6e51079e7d889771317acb842fd6ab0c578 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::LfsObjectDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::LfsObjectDeletedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :lfs_object_deleted_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb
index 15895e69ab4c4a39fb42a2292985ef46287053ea..0c4481624d9269ab645d4c7581aed286b086be6d 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::RepositoriesChangedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::RepositoriesChangedEvent, :clean_gitlab_redis_shared_state do
   include ::EE::GeoHelpers
 
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb
index adc68ac7b89c185f04928c4c58d3c52d0b3ef5ac..58391434d7976f7f0c334f94d6cde026b5c46362 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::RepositoryCreatedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::RepositoryCreatedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:project) { create(:project) }
   let(:repository_created_event) { create(:geo_repository_created_event, project: project) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb
index e9df8cfeca39223aa88afefdecde7f7284e0b650..19f62b1b8ea792373a2d1412be2c231ed3587cc1 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :deleted_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb
index aa0419a6e7d6fb72f5c5ffdcca03c4a9764bd6c6..9e70dae47c965fd0c5f33b1b0260d0e5e599dc4b 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::RepositoryRenamedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::RepositoryRenamedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :renamed_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb
index d22de7ed5e4ebf4a62c68168e2f8f71532f56862..28e9b24d4b6f8b491a2dbb26eb961b61af3d8e68 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::RepositoryUpdatedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::RepositoryUpdatedEvent, :clean_gitlab_redis_shared_state do
   include ::EE::GeoHelpers
 
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb
index 74be808782436f289acb10e2211e34094a348791..2e0d8b0fcf76c9af4b3e32991e320549617c06f3 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::ResetChecksumEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::ResetChecksumEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:event_log) { create(:geo_event_log, :reset_checksum_event) }
   let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) }
diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb
index b97f28f79286728085bed3920fe0558424f2be52..7f6a7d90e3a91d41f5430b0be03c41d0daf05cd1 100644
--- a/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb
+++ b/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::Geo::LogCursor::Events::UploadDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do
+describe Gitlab::Geo::LogCursor::Events::UploadDeletedEvent, :clean_gitlab_redis_shared_state do
   let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) }
   let(:project) { create(:project) }
   let(:upload_deleted_event) { create(:geo_upload_deleted_event, project: project) }
diff --git a/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb b/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb
index dbc1591cdc6fa21d08b6847d62f169d2ad78b5a8..2962f6aff624665be941f27dfcbc34127881db14 100644
--- a/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb
+++ b/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb
@@ -166,7 +166,7 @@ def find(entity, opts)
       end
     end
 
-    context 'for a group with subgroups', :nested_groups do
+    context 'for a group with subgroups' do
       include_examples 'group tests' do
         let(:project) { create(:project, :public, group: create(:group, parent: entity)) }
       end
diff --git a/ee/spec/lib/gitlab/usage_data_spec.rb b/ee/spec/lib/gitlab/usage_data_spec.rb
index 466f23b5c4a743db94bd2c52e523e67a20593c2d..0a3ae0a5395b971f566728c798c4ad5989c7bff8 100644
--- a/ee/spec/lib/gitlab/usage_data_spec.rb
+++ b/ee/spec/lib/gitlab/usage_data_spec.rb
@@ -88,7 +88,7 @@
       expect(count_data[:feature_flags]).to eq(1)
     end
 
-    it 'gathers deepest epic relationship level', :postgresql do
+    it 'gathers deepest epic relationship level' do
       expect(count_data.keys).to include(:epics_deepest_relationship_level)
     end
 
diff --git a/ee/spec/models/burndown_spec.rb b/ee/spec/models/burndown_spec.rb
index 67364ca32f8b1fbb2acee9f635320f94d79b4a1f..ee0a4ddabc513116bc7ed6ac50c99fedd6b45717 100644
--- a/ee/spec/models/burndown_spec.rb
+++ b/ee/spec/models/burndown_spec.rb
@@ -169,7 +169,7 @@
     let(:parent_group_milestone) { create(:milestone, project: nil, group: parent_group, start_date: start_date, due_date: due_date) }
     let(:group_milestone) { create(:milestone, group: group, start_date: start_date, due_date: due_date) }
 
-    context 'when nested group milestone', :nested_groups do
+    context 'when nested group milestone' do
       before do
         parent_group.add_developer(user)
       end
diff --git a/ee/spec/models/concerns/elastic/project_spec.rb b/ee/spec/models/concerns/elastic/project_spec.rb
index 93f3879488397534aebe310ec1828d3c5d735f91..20d1433a9c7841a7d502bcafe4033bca61dcaaa6 100644
--- a/ee/spec/models/concerns/elastic/project_spec.rb
+++ b/ee/spec/models/concerns/elastic/project_spec.rb
@@ -74,7 +74,7 @@
         end
       end
 
-      it 'indexes only projects under the group', :nested_groups do
+      it 'indexes only projects under the group' do
         Sidekiq::Testing.inline! do
           create :project, name: 'test1', group: create(:group, parent: group)
           create :project, name: 'test2', description: 'awesome project'
diff --git a/ee/spec/models/epic_spec.rb b/ee/spec/models/epic_spec.rb
index b6b0d46540b13e345f9215b30c53f8553486d344..7b966f3987766c5d70f211eeaf6498cbe2ff3a22 100644
--- a/ee/spec/models/epic_spec.rb
+++ b/ee/spec/models/epic_spec.rb
@@ -118,7 +118,7 @@ def epics(order_by)
         expect(epic.valid_parent?).to be_falsey
       end
 
-      it 'returns false when level is too deep', :nested_groups do
+      it 'returns false when level is too deep' do
         epic1 = create(:epic, group: group)
         epic2 = create(:epic, group: group, parent: epic1)
         epic3 = create(:epic, group: group, parent: epic2)
@@ -142,7 +142,7 @@ def epics(order_by)
         expect(epic.valid_parent?).to be_truthy
       end
 
-      it 'returns false when total depth after adding would exceed limit', :nested_groups do
+      it 'returns false when total depth after adding would exceed limit' do
         child_epic2 = create(:epic, group: group, parent: child_epic1)
         child_epic3 = create(:epic, group: group, parent: child_epic2)
         child_epic4 = create(:epic, group: group, parent: child_epic3)
@@ -166,7 +166,7 @@ def epics(order_by)
         expect(epic.valid_parent?).to be_truthy
       end
 
-      it 'returns false when total depth after adding would exceed limit', :nested_groups do
+      it 'returns false when total depth after adding would exceed limit' do
         root_epic.update(parent: create(:epic, group: group))
         create(:epic, group: group, parent: child_epic1)
 
@@ -185,14 +185,14 @@ def epics(order_by)
         expect(epic.valid_parent?).to be_falsey
       end
 
-      it 'returns false when child epic is parent of the given parent', :nested_groups do
+      it 'returns false when child epic is parent of the given parent' do
         epic1 = create(:epic, group: group, parent: epic)
         epic.parent = epic1
 
         expect(epic.valid_parent?).to be_falsey
       end
 
-      it 'returns false when child epic is an ancestor of the given parent', :nested_groups do
+      it 'returns false when child epic is an ancestor of the given parent' do
         epic1 = create(:epic, group: group, parent: epic)
         epic2 = create(:epic, group: group, parent: epic1)
         epic.parent = epic2
@@ -207,7 +207,7 @@ def epics(order_by)
     let(:epic2) { create(:epic, group: group, parent: epic1) }
     let(:epic3) { create(:epic, group: group, parent: epic2) }
 
-    describe '#ancestors', :nested_groups do
+    describe '#ancestors' do
       it 'returns all ancestors for an epic' do
         expect(epic3.ancestors).to eq [epic2, epic1]
       end
@@ -217,7 +217,7 @@ def epics(order_by)
       end
     end
 
-    describe '#descendants', :nested_groups do
+    describe '#descendants' do
       it 'returns all descendants for an epic' do
         expect(epic1.descendants).to match_array([epic2, epic3])
       end
@@ -576,7 +576,7 @@ def setup_control_group
     end
   end
 
-  describe '.deepest_relationship_level', :postgresql do
+  describe '.deepest_relationship_level' do
     context 'when there are no epics' do
       it 'returns nil' do
         expect(described_class.deepest_relationship_level).to be_nil
diff --git a/ee/spec/models/gitlab_subscription_spec.rb b/ee/spec/models/gitlab_subscription_spec.rb
index ada7d847bed494daeb4e0e66ebe7b056504cc71c..ac74629d810e27144a8eda7c94a74c213b471420 100644
--- a/ee/spec/models/gitlab_subscription_spec.rb
+++ b/ee/spec/models/gitlab_subscription_spec.rb
@@ -48,14 +48,14 @@
       expect(gitlab_subscription.seats_in_use).to eq(1)
     end
 
-    it 'also counts users from subgroups', :postgresql do
+    it 'also counts users from subgroups' do
       group.add_developer(user_1)
       subgroup_1.add_developer(user_2)
 
       expect(gitlab_subscription.seats_in_use).to eq(2)
     end
 
-    it 'does not count duplicated members', :postgresql do
+    it 'does not count duplicated members' do
       group.add_developer(user_1)
       subgroup_1.add_developer(user_2)
       subgroup_2.add_developer(user_2)
diff --git a/ee/spec/models/namespace_spec.rb b/ee/spec/models/namespace_spec.rb
index f45712fb5898c441d382641cfeb6a48e1a74572e..e402b6775e62c810699c6ca1aa41702df4d95a63 100644
--- a/ee/spec/models/namespace_spec.rb
+++ b/ee/spec/models/namespace_spec.rb
@@ -213,13 +213,11 @@
           end
         end
 
-        if Group.supports_nested_objects?
-          context 'when license is applied to parent group' do
-            let(:child_group) { create :group, parent: group }
+        context 'when license is applied to parent group' do
+          let(:child_group) { create :group, parent: group }
 
-            it 'child group has feature available' do
-              expect(child_group.feature_available?(feature)).to be_truthy
-            end
+          it 'child group has feature available' do
+            expect(child_group.feature_available?(feature)).to be_truthy
           end
         end
       end
@@ -460,7 +458,7 @@
 
         it { is_expected.to be_truthy }
 
-        context 'when is subgroup', :nested_groups do
+        context 'when is subgroup' do
           before do
             namespace.parent = build(:group)
           end
@@ -478,7 +476,7 @@
   describe '#shared_runners_enabled?' do
     subject { namespace.shared_runners_enabled? }
 
-    context 'subgroup with shared runners enabled project', :nested_groups do
+    context 'subgroup with shared runners enabled project' do
       let(:subgroup) { create(:group, parent: namespace) }
       let!(:subproject) { create(:project, namespace: subgroup, shared_runners_enabled: true) }
 
@@ -776,7 +774,7 @@
     end
   end
 
-  describe '#membership_lock with subgroups', :nested_groups do
+  describe '#membership_lock with subgroups' do
     context 'when creating a subgroup' do
       let(:subgroup) { create(:group, parent: root_group) }
 
diff --git a/ee/spec/models/pg_replication_slot_spec.rb b/ee/spec/models/pg_replication_slot_spec.rb
index 541dc1ea91a348c3ae07876899e835759dd0285f..8f334496eba3fb3b3ea11039d3c1710ae70839f0 100644
--- a/ee/spec/models/pg_replication_slot_spec.rb
+++ b/ee/spec/models/pg_replication_slot_spec.rb
@@ -1,13 +1,13 @@
 require 'spec_helper'
 
-describe PgReplicationSlot, :postgresql do
+describe PgReplicationSlot do
   if Gitlab::Database.replication_slots_supported?
     describe 'with replication slot support' do
       it '#max_replication_slots' do
         expect(described_class.max_replication_slots).to be >= 0
       end
 
-      skip_examples = PgReplicationSlot.max_replication_slots <= PgReplicationSlot.count
+      skip_examples = described_class.max_replication_slots <= described_class.count
       context 'with enough slots available' do
         before(:all) do
           skip('max_replication_slots too small') if skip_examples
@@ -37,11 +37,11 @@
         end
 
         it '#max_retained_wal' do
-          expect(PgReplicationSlot.max_retained_wal).not_to be_nil
+          expect(described_class.max_retained_wal).not_to be_nil
         end
 
         it '#slots_retained_bytes' do
-          slot = PgReplicationSlot.slots_retained_bytes.find {|x| x['slot_name'] == 'test_slot' }
+          slot = described_class.slots_retained_bytes.find {|x| x['slot_name'] == 'test_slot' }
 
           expect(slot).not_to be_nil
           expect(slot['retained_bytes']).to be_nil
diff --git a/ee/spec/models/project_spec.rb b/ee/spec/models/project_spec.rb
index 4902eae314c60218c60b71cc1552314b3a7725eb..c82e3b310ba7dd16e0b5b95b9b36af556e062eb0 100644
--- a/ee/spec/models/project_spec.rb
+++ b/ee/spec/models/project_spec.rb
@@ -598,7 +598,7 @@
 
     subject { project.root_namespace }
 
-    context 'when namespace has parent group', :nested_groups do
+    context 'when namespace has parent group' do
       let(:root_ancestor) { create(:group) }
       let(:parent) { create(:group, parent: root_ancestor) }
 
@@ -616,7 +616,7 @@
     end
   end
 
-  describe '#shared_runners_limit_namespace', :nested_groups do
+  describe '#shared_runners_limit_namespace' do
     set(:root_ancestor) { create(:group) }
     set(:group) { create(:group, parent: root_ancestor) }
     let(:project) { create(:project, namespace: group) }
diff --git a/ee/spec/models/user_spec.rb b/ee/spec/models/user_spec.rb
index 81baccd1883661c70d774ef4174cdb0144191844..849ca839d1578fa9f8e33e08bb994798f5436917 100644
--- a/ee/spec/models/user_spec.rb
+++ b/ee/spec/models/user_spec.rb
@@ -329,7 +329,7 @@
     end
   end
 
-  describe '#available_subgroups_with_custom_project_templates', :postgresql do
+  describe '#available_subgroups_with_custom_project_templates' do
     let(:user) { create(:user) }
 
     context 'without Groups with custom project templates' do
diff --git a/ee/spec/policies/group_policy_spec.rb b/ee/spec/policies/group_policy_spec.rb
index 0d676bc256457ec409554fa3034a90eb8bda67d4..e87edba006f49ca97786cf1234a0f8822cc0361a 100644
--- a/ee/spec/policies/group_policy_spec.rb
+++ b/ee/spec/policies/group_policy_spec.rb
@@ -348,7 +348,7 @@
     end
   end
 
-  describe 'private nested group use the highest access level from the group and inherited permissions', :nested_groups do
+  describe 'private nested group use the highest access level from the group and inherited permissions' do
     let(:nested_group) { create(:group, :private, parent: group) }
 
     before do
diff --git a/ee/spec/presenters/epic_presenter_spec.rb b/ee/spec/presenters/epic_presenter_spec.rb
index 4ddf12d8b22b46bbab5cb50e0d4cf776de84d567..18194a2280cf75ec5b204ce553667e7279a20d97 100644
--- a/ee/spec/presenters/epic_presenter_spec.rb
+++ b/ee/spec/presenters/epic_presenter_spec.rb
@@ -29,7 +29,7 @@
       expect(presenter.show_data.keys).to match_array([:initial, :meta])
     end
 
-    it 'has correct ancestors', :nested_groups do
+    it 'has correct ancestors' do
       metadata     = JSON.parse(presenter.show_data[:meta])
       ancestor_url = metadata['ancestors'].first['url']
 
@@ -48,7 +48,7 @@
       expect(data[:meta]).to match_schema('epic_meta_data', dir: 'ee')
     end
 
-    it 'avoids N+1 database queries', :nested_groups do
+    it 'avoids N+1 database queries' do
       group1 = create(:group)
       group2 = create(:group, parent: group1)
       epic1 = create(:epic, group: group1)
diff --git a/ee/spec/requests/api/geo_spec.rb b/ee/spec/requests/api/geo_spec.rb
index e4412173ddfd1f3525114416719729e63d713f63..a04ccc638bcfdfad5df509bd2da5175c18a5edbf 100644
--- a/ee/spec/requests/api/geo_spec.rb
+++ b/ee/spec/requests/api/geo_spec.rb
@@ -244,7 +244,7 @@
     end
   end
 
-  describe 'POST /geo/status', :postgresql do
+  describe 'POST /geo/status' do
     let(:geo_base_request) { Gitlab::Geo::BaseRequest.new(scope: ::Gitlab::Geo::API_SCOPE) }
 
     let(:data) do
diff --git a/ee/spec/requests/api/v3/github_spec.rb b/ee/spec/requests/api/v3/github_spec.rb
index 5284ad0f7f23e6ac2753bdf277d34ff88411d4d6..6ec434c604ddeb4c451a4a388b07d9fd4fa02808 100644
--- a/ee/spec/requests/api/v3/github_spec.rb
+++ b/ee/spec/requests/api/v3/github_spec.rb
@@ -308,7 +308,7 @@ def expect_project_under_namespace(projects, namespace, user)
       end
     end
 
-    context 'nested group namespace', :nested_groups do
+    context 'nested group namespace' do
       let(:group) { create(:group, :nested) }
       let!(:parent_group_project) { create(:project, group: group.parent, name: 'parent_group_project') }
       let!(:child_group_project) { create(:project, group: group, name: 'child_group_project') }
diff --git a/ee/spec/requests/groups_controller_spec.rb b/ee/spec/requests/groups_controller_spec.rb
index cd67dc1bab71b9eba874d1ab8ddcdf2935fc1f33..ab0998324d242489650a4a0bce6dfe94a7ed7838 100644
--- a/ee/spec/requests/groups_controller_spec.rb
+++ b/ee/spec/requests/groups_controller_spec.rb
@@ -91,7 +91,7 @@
         end
       end
 
-      context 'subgroup', :nested_groups do
+      context 'subgroup' do
         let(:group) { create(:group, :nested) }
 
         it 'does not create ip restriction' do
diff --git a/ee/spec/serializers/geo_project_registry_entity_spec.rb b/ee/spec/serializers/geo_project_registry_entity_spec.rb
index 7112632fda6f07ac08c92adad9ad390795e0f160..5cfaec6cf493443405e967375a061ab71ab1d00d 100644
--- a/ee/spec/serializers/geo_project_registry_entity_spec.rb
+++ b/ee/spec/serializers/geo_project_registry_entity_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe GeoProjectRegistryEntity, :postgresql do
+describe GeoProjectRegistryEntity do
   let(:registry) { create(:geo_project_registry, :synced) }
 
   let(:entity) do
diff --git a/ee/spec/serializers/storage_shard_entity_spec.rb b/ee/spec/serializers/storage_shard_entity_spec.rb
index 76a179ebff0f1a74933863c0523ebf8ec165b05d..a5f4679bc5ab197c973fcfd178cbb94b66b52263 100644
--- a/ee/spec/serializers/storage_shard_entity_spec.rb
+++ b/ee/spec/serializers/storage_shard_entity_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe StorageShardEntity, :postgresql do
+describe StorageShardEntity do
   let(:entity) { described_class.new(StorageShard.new, request: double) }
 
   subject { entity.as_json }
diff --git a/ee/spec/services/ci/register_job_service_spec.rb b/ee/spec/services/ci/register_job_service_spec.rb
index 035b11dd8da9f23b14b7cf3c47a2a6d1cc6197b5..a68a321bb672563af695b37b385a25c9c92180f8 100644
--- a/ee/spec/services/ci/register_job_service_spec.rb
+++ b/ee/spec/services/ci/register_job_service_spec.rb
@@ -86,7 +86,7 @@
         end
       end
 
-      context 'when group is subgroup', :nested_groups do
+      context 'when group is subgroup' do
         let!(:root_ancestor) { create(:group) }
         let!(:group) { create(:group, parent: root_ancestor) }
         let!(:project) { create :project, shared_runners_enabled: true, group: group }
diff --git a/ee/spec/services/epic_issues/create_service_spec.rb b/ee/spec/services/epic_issues/create_service_spec.rb
index e3fa5cc996c320123ee580f22edbb8b38dc0fd1b..2f520eaee795e07f92cd38c238fe9986ecf6d867 100644
--- a/ee/spec/services/epic_issues/create_service_spec.rb
+++ b/ee/spec/services/epic_issues/create_service_spec.rb
@@ -152,7 +152,7 @@ def assign_issue(references)
             include_examples 'returns success'
           end
 
-          context 'when a link of an issue in a subgroup is given', :nested_groups do
+          context 'when a link of an issue in a subgroup is given' do
             let(:subgroup) { create(:group, parent: group) }
             let(:project2) { create(:project, group: subgroup) }
             let(:issue) { create(:issue, project: project2) }
diff --git a/ee/spec/services/epic_links/create_service_spec.rb b/ee/spec/services/epic_links/create_service_spec.rb
index 40dc6cf57d51eb0df52e3304be35d027623833ca..b75e5d6ea943282e8852753105bc54c006a6687b 100644
--- a/ee/spec/services/epic_links/create_service_spec.rb
+++ b/ee/spec/services/epic_links/create_service_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe EpicLinks::CreateService, :postgresql do
+describe EpicLinks::CreateService do
   describe '#execute' do
     let(:group) { create(:group) }
     let(:user) { create(:user) }
diff --git a/ee/spec/services/epic_links/destroy_service_spec.rb b/ee/spec/services/epic_links/destroy_service_spec.rb
index 58e8f0ef57d44189782424a606667c0b78b7a47a..dee3303c4929e374e5fd24d224d3b6f974a0da25 100644
--- a/ee/spec/services/epic_links/destroy_service_spec.rb
+++ b/ee/spec/services/epic_links/destroy_service_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe EpicLinks::DestroyService, :postgresql do
+describe EpicLinks::DestroyService do
   describe '#execute' do
     let(:group) { create(:group) }
     let(:user) { create(:user) }
diff --git a/ee/spec/services/epic_links/list_service_spec.rb b/ee/spec/services/epic_links/list_service_spec.rb
index 06d9ec97f7113bb82c4556c779762054c1880842..b95f997889895a5b7a9e2ec5e349c80400fbc18e 100644
--- a/ee/spec/services/epic_links/list_service_spec.rb
+++ b/ee/spec/services/epic_links/list_service_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe EpicLinks::ListService, :postgresql do
+describe EpicLinks::ListService do
   let(:user) { create :user }
   let(:group) { create(:group, :public) }
   let(:parent_epic) { create(:epic, group: group) }
diff --git a/ee/spec/services/groups/autocomplete_service_spec.rb b/ee/spec/services/groups/autocomplete_service_spec.rb
index 8bcfbd35297fb24f892f925290d56dab1c12f56e..c211bd86695c8e7528558989fdc22c2067794534 100644
--- a/ee/spec/services/groups/autocomplete_service_spec.rb
+++ b/ee/spec/services/groups/autocomplete_service_spec.rb
@@ -54,7 +54,7 @@ def expect_labels_to_equal(labels, expected_labels)
     end
   end
 
-  describe '#issues', :nested_groups do
+  describe '#issues' do
     let(:project) { create(:project, group: group) }
     let(:sub_group_project) { create(:project, group: sub_group) }
 
@@ -67,7 +67,7 @@ def expect_labels_to_equal(labels, expected_labels)
     end
   end
 
-  describe '#merge_requests', :nested_groups do
+  describe '#merge_requests' do
     let(:project) { create(:project, :repository, group: group) }
     let(:sub_group_project) { create(:project, :repository, group: sub_group) }
 
@@ -104,10 +104,10 @@ def expect_labels_to_equal(labels, expected_labels)
       end
 
       it 'returns available commands' do
-        available_commands = [:todo, :unsubscribe, :award, :shrug, :tableflip, :cc, :title, :close]
-        if ::Epic.supports_nested_objects?
-          available_commands += [:child_epic, :remove_child_epic, :parent_epic, :remove_parent_epic]
-        end
+        available_commands = [
+          :todo, :unsubscribe, :award, :shrug, :tableflip, :cc, :title, :close,
+          :child_epic, :remove_child_epic, :parent_epic, :remove_parent_epic
+        ]
 
         expect(subject.commands(epic).map { |c| c[:name] }).to match_array(available_commands)
       end
@@ -131,7 +131,7 @@ def expect_labels_to_equal(labels, expected_labels)
         subgroup_milestone.update(group: public_subgroup)
       end
 
-      it 'returns milestones from groups and subgroups', :nested_groups do
+      it 'returns milestones from groups and subgroups' do
         subject = described_class.new(public_subgroup, user)
 
         expect(subject.milestones.map(&:iid)).to contain_exactly(group_milestone.iid, subgroup_milestone.iid)
@@ -144,14 +144,14 @@ def expect_labels_to_equal(labels, expected_labels)
       expect(subject.milestones.map(&:title)).to contain_exactly(group_milestone.title)
     end
 
-    it 'returns milestones from groups and subgroups', :nested_groups do
+    it 'returns milestones from groups and subgroups' do
       milestones = described_class.new(sub_group, user).milestones
 
       expect(milestones.map(&:iid)).to contain_exactly(group_milestone.iid, subgroup_milestone.iid)
       expect(milestones.map(&:title)).to contain_exactly(group_milestone.title, subgroup_milestone.title)
     end
 
-    it 'returns only milestones that user can read', :nested_groups do
+    it 'returns only milestones that user can read' do
       user = create(:user)
       sub_group.add_guest(user)
 
diff --git a/ee/spec/services/groups/participants_service_spec.rb b/ee/spec/services/groups/participants_service_spec.rb
index d3ea80ff1433dcac52296812c6caae98ed408272..5af9e7e054f130b67a4f4a636624e72c03e01819 100644
--- a/ee/spec/services/groups/participants_service_spec.rb
+++ b/ee/spec/services/groups/participants_service_spec.rb
@@ -47,7 +47,7 @@ def user_to_autocompletable(user)
     end
   end
 
-  describe '#group_members', :nested_groups do
+  describe '#group_members' do
     let(:parent_group) { create(:group) }
     let(:group) { create(:group, parent: parent_group) }
     let(:subgroup) { create(:group_with_members, parent: group) }
diff --git a/ee/spec/services/groups/update_service_spec.rb b/ee/spec/services/groups/update_service_spec.rb
index d46e658e3fb9aa79f08180eff0791c2222a72d66..d88aaac871e3cc70f9ca28f297bf3db9c71f807f 100644
--- a/ee/spec/services/groups/update_service_spec.rb
+++ b/ee/spec/services/groups/update_service_spec.rb
@@ -108,7 +108,7 @@ def update_file_template_project_id(id)
         expect(group.errors[:file_template_project_id]).to include('is invalid')
       end
 
-      context 'in a subgroup', :nested_groups do
+      context 'in a subgroup' do
         let(:parent_group) { create(:group) }
         let(:hidden_project) { create(:project, :private, namespace: parent_group) }
         let(:group) { create(:group, parent: parent_group) }
diff --git a/ee/spec/services/projects/create_from_template_service_spec.rb b/ee/spec/services/projects/create_from_template_service_spec.rb
index 8b2d3bfee7a34d19991cd9ac792ee8e5bad6a0e1..05d79738cf63e7b264b2c03dc7553644687953b3 100644
--- a/ee/spec/services/projects/create_from_template_service_spec.rb
+++ b/ee/spec/services/projects/create_from_template_service_spec.rb
@@ -113,7 +113,7 @@
     it_behaves_like 'creates project from custom template', nil
     it_behaves_like 'creates project from custom template', ''
 
-    describe 'creating project from a Group project template', :postgresql do
+    describe 'creating project from a Group project template' do
       let(:project_name) { project_template.name }
       let(:group_with_project_templates_id) { subgroup_1_2.id }
       let(:group2) { create(:group) }
diff --git a/ee/spec/services/quick_actions/interpret_service_spec.rb b/ee/spec/services/quick_actions/interpret_service_spec.rb
index bac72f4a9d9e12f120548487e3437375ec4f9e6f..e6513d762f6e9fa4d27f4e46801c146143503a3d 100644
--- a/ee/spec/services/quick_actions/interpret_service_spec.rb
+++ b/ee/spec/services/quick_actions/interpret_service_spec.rb
@@ -298,7 +298,7 @@
       end
     end
 
-    context 'child_epic command', :nested_groups do
+    context 'child_epic command' do
       let(:subgroup) { create(:group, parent: group) }
       let(:another_group) { create(:group) }
       let(:merge_request) { create(:merge_request, source_project: project) }
@@ -427,7 +427,7 @@
       end
     end
 
-    context 'remove_child_epic command', :nested_groups do
+    context 'remove_child_epic command' do
       let(:subgroup) { create(:group, parent: group) }
       let(:another_group) { create(:group) }
       let(:merge_request) { create(:merge_request, source_project: project) }
diff --git a/ee/spec/services/update_build_minutes_service_spec.rb b/ee/spec/services/update_build_minutes_service_spec.rb
index 6e5ae6cb433415d899fb011a47c603a0ef54a655..73088f70976272113e75491a73ca1900400adc8a 100644
--- a/ee/spec/services/update_build_minutes_service_spec.rb
+++ b/ee/spec/services/update_build_minutes_service_spec.rb
@@ -43,7 +43,7 @@
         end
       end
 
-      context 'when namespace is subgroup', :nested_groups do
+      context 'when namespace is subgroup' do
         let(:root_ancestor) { create(:group, shared_runners_minutes_limit: 100) }
         let(:namespace) { create(:namespace, parent: root_ancestor) }
 
diff --git a/ee/spec/support/shared_examples/models/member_shared_examples.rb b/ee/spec/support/shared_examples/models/member_shared_examples.rb
index addb8e3c519a168bdbc864c48f9eb8b0bca6ec40..862d39514e458f614abf8576904745a65e10f99c 100644
--- a/ee/spec/support/shared_examples/models/member_shared_examples.rb
+++ b/ee/spec/support/shared_examples/models/member_shared_examples.rb
@@ -31,7 +31,7 @@
           expect(member.errors.messages[:user]).to eq(['is not linked to a SAML account'])
         end
 
-        context 'subgroups', :nested_groups do
+        context 'subgroups' do
           let!(:subgroup) { create(:group, parent: group) }
 
           before do
diff --git a/ee/spec/views/admin/groups/_form.html.haml_spec.rb b/ee/spec/views/admin/groups/_form.html.haml_spec.rb
index 1fcef2bc201367b1c992e65bd3c94179f894c1c6..1b37df9c98fb4cacdb0d6fb3f74d64ef90fea63b 100644
--- a/ee/spec/views/admin/groups/_form.html.haml_spec.rb
+++ b/ee/spec/views/admin/groups/_form.html.haml_spec.rb
@@ -10,7 +10,7 @@
     allow(view).to receive(:visibility_level) { group.visibility_level }
   end
 
-  context 'when sub group is used', :nested_groups do
+  context 'when sub group is used' do
     let(:root_ancestor) { create(:group) }
     let(:group) { build(:group, parent: root_ancestor) }
 
diff --git a/ee/spec/views/groups/edit.html.haml_spec.rb b/ee/spec/views/groups/edit.html.haml_spec.rb
index 0d8f15ec29d8dab5e3381cb0ae3d5d869454ae9a..3f087facf90c5f60d62383aa76a99e3a876559e3 100644
--- a/ee/spec/views/groups/edit.html.haml_spec.rb
+++ b/ee/spec/views/groups/edit.html.haml_spec.rb
@@ -33,7 +33,7 @@
       end
     end
 
-    context 'subgroup', :nested_groups do
+    context 'subgroup' do
       let(:group) { create(:group, :nested) }
 
       before do
diff --git a/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb b/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb
index a73906f84d2d5419301799a9e6816048e1c18dcd..b2ad2fbd073a950459a0083ccaf42612864210ae 100644
--- a/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb
+++ b/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb
@@ -48,7 +48,7 @@
       end
     end
 
-    context 'when namespace has extra shared runner minutes', :postgresql do
+    context 'when namespace has extra shared runner minutes' do
       let!(:namespace) do
         create(:namespace, shared_runners_minutes_limit: 100, extra_shared_runners_minutes_limit: 10 )
       end
diff --git a/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb
index ebf649c9a4a2df0dd2aa9abf990abd5ce3a13488..fe642054e294b31ddf48b40a77284c2de98a9852 100644
--- a/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerification::Primary::BatchWorker, :postgresql, :clean_gitlab_redis_cache do
+describe Geo::RepositoryVerification::Primary::BatchWorker, :clean_gitlab_redis_cache do
   include ::EE::GeoHelpers
 
   set(:healthy_not_verified) { create(:project) }
diff --git a/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb
index a8ce9af53a87d358a672491fcbf5ec6eff7de807..a81bc7c0efe87b067f13e0057b9bf9d93dc5bcb8 100644
--- a/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerification::Primary::ShardWorker, :postgresql, :clean_gitlab_redis_cache do
+describe Geo::RepositoryVerification::Primary::ShardWorker, :clean_gitlab_redis_cache do
   include ::EE::GeoHelpers
   include ExclusiveLeaseHelpers
 
diff --git a/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb
index 65279c8de42a0fa6a6509d08a822d34c95347cc1..9fafb4cb0fb25da2ecd2124f6458f631159b3a1c 100644
--- a/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerification::Primary::SingleWorker, :postgresql, :clean_gitlab_redis_cache do
+describe Geo::RepositoryVerification::Primary::SingleWorker, :clean_gitlab_redis_cache do
   include ::EE::GeoHelpers
   include ExclusiveLeaseHelpers
 
diff --git a/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb b/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb
index 7e8dfe61793e9b559280da76f9a93eb21d5fa155..d56d05ebe1763c3d9f959242c0793d7c4f589910 100644
--- a/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerification::Secondary::SchedulerWorker, :postgresql, :clean_gitlab_redis_cache do
+describe Geo::RepositoryVerification::Secondary::SchedulerWorker, :clean_gitlab_redis_cache do
   include ::EE::GeoHelpers
 
   set(:healthy_not_verified) { create(:project) }
diff --git a/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb b/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb
index a1b2ca229d25c961b3a0cc1e4e8813793f3076c1..7888ec41550dfb2ebc04b0892acd707e3d36136d 100644
--- a/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Geo::RepositoryVerification::Secondary::SingleWorker, :postgresql, :clean_gitlab_redis_cache do
+describe Geo::RepositoryVerification::Secondary::SingleWorker, :clean_gitlab_redis_cache do
   include ::EE::GeoHelpers
   include ExclusiveLeaseHelpers
 
diff --git a/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb b/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb
index 81062dae1e75be21bb6289947122ab61faeaf996..815b90c648310532a3b05d827cc83099c34cfa0c 100644
--- a/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb
+++ b/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe UpdateMaxSeatsUsedForGitlabComSubscriptionsWorker, :postgresql do
+describe UpdateMaxSeatsUsedForGitlabComSubscriptionsWorker do
   subject { described_class.new }
 
   let!(:user)                { create(:user) }
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 10c81dd510478f31895452588263115bb1b91c0d..300cb215af2e6300070f61372be3d69f04fd9118 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -366,10 +366,7 @@ class Group < BasicGroupDetails
       end
       expose :request_access_enabled
       expose :full_name, :full_path
-
-      if ::Group.supports_nested_objects?
-        expose :parent_id
-      end
+      expose :parent_id
 
       expose :custom_attributes, using: 'API::Entities::CustomAttribute', if: :with_custom_attributes
 
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
index d0c7c4ade43ebeb6014e262de5adfd14c8b52adb..ef95a9e5d8f4da10ffd734158a65396a80aa8802 100644
--- a/lib/api/groups.rb
+++ b/lib/api/groups.rb
@@ -114,10 +114,7 @@ def present_groups(params, groups)
       params do
         requires :name, type: String, desc: 'The name of the group'
         requires :path, type: String, desc: 'The path of the group'
-
-        if ::Group.supports_nested_objects?
-          optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group'
-        end
+        optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group'
 
         use :optional_params
       end
diff --git a/lib/gitlab/object_hierarchy.rb b/lib/gitlab/object_hierarchy.rb
index e3d67f40ec819c1209e662c3c13365011f2cba48..4f2f330ae3f8cc2384acbadc43038c5126f53983 100644
--- a/lib/gitlab/object_hierarchy.rb
+++ b/lib/gitlab/object_hierarchy.rb
@@ -32,11 +32,6 @@ def descendants
     # Returns the maximum depth starting from the base
     # A base object with no children has a maximum depth of `1`
     def max_descendants_depth
-      unless hierarchy_supported?
-        # This makes the return value consistent with the case where hierarchy is supported
-        return descendants_base.exists? ? 1 : nil
-      end
-
       base_and_descendants(with_depth: true).maximum(DEPTH_COLUMN)
     end
 
@@ -66,8 +61,6 @@ def ancestors(upto: nil, hierarchy_order: nil)
     # each parent.
     # rubocop: disable CodeReuse/ActiveRecord
     def base_and_ancestors(upto: nil, hierarchy_order: nil)
-      return ancestors_base unless hierarchy_supported?
-
       recursive_query = base_and_ancestors_cte(upto, hierarchy_order).apply_to(model.all)
       recursive_query = recursive_query.order(depth: hierarchy_order) if hierarchy_order
 
@@ -81,10 +74,6 @@ def base_and_ancestors(upto: nil, hierarchy_order: nil)
     # When `with_depth` is `true`, a `depth` column is included where it starts with `1` for the base objects
     # and incremented as we go down the descendant tree
     def base_and_descendants(with_depth: false)
-      unless hierarchy_supported?
-        return with_depth ? descendants_base.select("1 as #{DEPTH_COLUMN}", objects_table[Arel.star]) : descendants_base
-      end
-
       read_only(base_and_descendants_cte(with_depth: with_depth).apply_to(model.all))
     end
 
@@ -112,8 +101,6 @@ def base_and_descendants(with_depth: false)
     # If nested objects are not supported, ancestors_base is returned.
     # rubocop: disable CodeReuse/ActiveRecord
     def all_objects
-      return ancestors_base unless hierarchy_supported?
-
       ancestors = base_and_ancestors_cte
       descendants = base_and_descendants_cte
 
@@ -135,10 +122,6 @@ def all_objects
 
     private
 
-    def hierarchy_supported?
-      Gitlab::Database.postgresql?
-    end
-
     # rubocop: disable CodeReuse/ActiveRecord
     def base_and_ancestors_cte(stop_id = nil, hierarchy_order = nil)
       cte = SQL::RecursiveCTE.new(:base_and_ancestors)
diff --git a/lib/gitlab/project_authorizations.rb b/lib/gitlab/project_authorizations.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a9270cd536e08996ab6563a5db7e4cde254cf2c3
--- /dev/null
+++ b/lib/gitlab/project_authorizations.rb
@@ -0,0 +1,121 @@
+# frozen_string_literal: true
+
+# This class relies on Common Table Expressions to efficiently get all data,
+# including data for nested groups.
+module Gitlab
+  class ProjectAuthorizations
+    attr_reader :user
+
+    # user - The User object for which to calculate the authorizations.
+    def initialize(user)
+      @user = user
+    end
+
+    def calculate
+      cte = recursive_cte
+      cte_alias = cte.table.alias(Group.table_name)
+      projects = Project.arel_table
+      links = ProjectGroupLink.arel_table
+
+      relations = [
+        # The project a user has direct access to.
+        user.projects.select_for_project_authorization,
+
+        # The personal projects of the user.
+        user.personal_projects.select_as_maintainer_for_project_authorization,
+
+        # Projects that belong directly to any of the groups the user has
+        # access to.
+        Namespace
+          .unscoped
+          .select([alias_as_column(projects[:id], 'project_id'),
+                   cte_alias[:access_level]])
+          .from(cte_alias)
+          .joins(:projects),
+
+        # Projects shared with any of the namespaces the user has access to.
+        Namespace
+          .unscoped
+          .select([
+            links[:project_id],
+            least(cte_alias[:access_level], links[:group_access], 'access_level')
+          ])
+          .from(cte_alias)
+          .joins('INNER JOIN project_group_links ON project_group_links.group_id = namespaces.id')
+          .joins('INNER JOIN projects ON projects.id = project_group_links.project_id')
+          .joins('INNER JOIN namespaces p_ns ON p_ns.id = projects.namespace_id')
+          .where('p_ns.share_with_group_lock IS FALSE')
+      ]
+
+      ProjectAuthorization
+        .unscoped
+        .with
+        .recursive(cte.to_arel)
+        .select_from_union(relations)
+    end
+
+    private
+
+    # Builds a recursive CTE that gets all the groups the current user has
+    # access to, including any nested groups.
+    def recursive_cte
+      cte = Gitlab::SQL::RecursiveCTE.new(:namespaces_cte)
+      members = Member.arel_table
+      namespaces = Namespace.arel_table
+
+      # Namespaces the user is a member of.
+      cte << user.groups
+        .select([namespaces[:id], members[:access_level]])
+        .except(:order)
+
+      # Sub groups of any groups the user is a member of.
+      cte << Group.select([
+          namespaces[:id],
+          greatest(members[:access_level], cte.table[:access_level], 'access_level')
+        ])
+        .joins(join_cte(cte))
+        .joins(join_members)
+        .except(:order)
+
+      cte
+    end
+
+    # Builds a LEFT JOIN to join optional memberships onto the CTE.
+    def join_members
+      members = Member.arel_table
+      namespaces = Namespace.arel_table
+
+      cond = members[:source_id]
+        .eq(namespaces[:id])
+        .and(members[:source_type].eq('Namespace'))
+        .and(members[:requested_at].eq(nil))
+        .and(members[:user_id].eq(user.id))
+
+      Arel::Nodes::OuterJoin.new(members, Arel::Nodes::On.new(cond))
+    end
+
+    # Builds an INNER JOIN to join namespaces onto the CTE.
+    def join_cte(cte)
+      namespaces = Namespace.arel_table
+      cond = cte.table[:id].eq(namespaces[:parent_id])
+
+      Arel::Nodes::InnerJoin.new(cte.table, Arel::Nodes::On.new(cond))
+    end
+
+    def greatest(left, right, column_alias)
+      sql_function('GREATEST', [left, right], column_alias)
+    end
+
+    def least(left, right, column_alias)
+      sql_function('LEAST', [left, right], column_alias)
+    end
+
+    def sql_function(name, args, column_alias)
+      alias_as_column(Arel::Nodes::NamedFunction.new(name, args), column_alias)
+    end
+
+    def alias_as_column(value, alias_to)
+      Arel::Nodes::As.new(value, Arel::Nodes::SqlLiteral.new(alias_to))
+    end
+  end
+end
diff --git a/lib/gitlab/project_authorizations/with_nested_groups.rb b/lib/gitlab/project_authorizations/with_nested_groups.rb
deleted file mode 100644
index 2372a316ab0f8805bea9eaa149c4f58398021668..0000000000000000000000000000000000000000
--- a/lib/gitlab/project_authorizations/with_nested_groups.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module ProjectAuthorizations
-    # Calculating new project authorizations when supporting nested groups.
-    #
-    # This class relies on Common Table Expressions to efficiently get all data,
-    # including data for nested groups. As a result this class can only be used
-    # on PostgreSQL.
-    class WithNestedGroups
-      attr_reader :user
-
-      # user - The User object for which to calculate the authorizations.
-      def initialize(user)
-        @user = user
-      end
-
-      def calculate
-        cte = recursive_cte
-        cte_alias = cte.table.alias(Group.table_name)
-        projects = Project.arel_table
-        links = ProjectGroupLink.arel_table
-
-        relations = [
-          # The project a user has direct access to.
-          user.projects.select_for_project_authorization,
-
-          # The personal projects of the user.
-          user.personal_projects.select_as_maintainer_for_project_authorization,
-
-          # Projects that belong directly to any of the groups the user has
-          # access to.
-          Namespace
-            .unscoped
-            .select([alias_as_column(projects[:id], 'project_id'),
-                     cte_alias[:access_level]])
-            .from(cte_alias)
-            .joins(:projects),
-
-          # Projects shared with any of the namespaces the user has access to.
-          Namespace
-            .unscoped
-            .select([links[:project_id],
-                     least(cte_alias[:access_level],
-                           links[:group_access],
-                           'access_level')])
-            .from(cte_alias)
-            .joins('INNER JOIN project_group_links ON project_group_links.group_id = namespaces.id')
-            .joins('INNER JOIN projects ON projects.id = project_group_links.project_id')
-            .joins('INNER JOIN namespaces p_ns ON p_ns.id = projects.namespace_id')
-            .where('p_ns.share_with_group_lock IS FALSE')
-        ]
-
-        ProjectAuthorization
-          .unscoped
-          .with
-          .recursive(cte.to_arel)
-          .select_from_union(relations)
-      end
-
-      private
-
-      # Builds a recursive CTE that gets all the groups the current user has
-      # access to, including any nested groups.
-      def recursive_cte
-        cte = Gitlab::SQL::RecursiveCTE.new(:namespaces_cte)
-        members = Member.arel_table
-        namespaces = Namespace.arel_table
-
-        # Namespaces the user is a member of.
-        cte << user.groups
-          .select([namespaces[:id], members[:access_level]])
-          .except(:order)
-
-        # Sub groups of any groups the user is a member of.
-        cte << Group.select([namespaces[:id],
-                             greatest(members[:access_level],
-                                      cte.table[:access_level], 'access_level')])
-          .joins(join_cte(cte))
-          .joins(join_members)
-          .except(:order)
-
-        cte
-      end
-
-      # Builds a LEFT JOIN to join optional memberships onto the CTE.
-      def join_members
-        members = Member.arel_table
-        namespaces = Namespace.arel_table
-
-        cond = members[:source_id]
-          .eq(namespaces[:id])
-          .and(members[:source_type].eq('Namespace'))
-          .and(members[:requested_at].eq(nil))
-          .and(members[:user_id].eq(user.id))
-
-        Arel::Nodes::OuterJoin.new(members, Arel::Nodes::On.new(cond))
-      end
-
-      # Builds an INNER JOIN to join namespaces onto the CTE.
-      def join_cte(cte)
-        namespaces = Namespace.arel_table
-        cond = cte.table[:id].eq(namespaces[:parent_id])
-
-        Arel::Nodes::InnerJoin.new(cte.table, Arel::Nodes::On.new(cond))
-      end
-
-      def greatest(left, right, column_alias)
-        sql_function('GREATEST', [left, right], column_alias)
-      end
-
-      def least(left, right, column_alias)
-        sql_function('LEAST', [left, right], column_alias)
-      end
-
-      def sql_function(name, args, column_alias)
-        alias_as_column(Arel::Nodes::NamedFunction.new(name, args), column_alias)
-      end
-
-      def alias_as_column(value, alias_to)
-        Arel::Nodes::As.new(value, Arel::Nodes::SqlLiteral.new(alias_to))
-      end
-    end
-  end
-end
diff --git a/lib/gitlab/project_authorizations/without_nested_groups.rb b/lib/gitlab/project_authorizations/without_nested_groups.rb
deleted file mode 100644
index 50b41b176496ce45db069a39580e0608c785ec14..0000000000000000000000000000000000000000
--- a/lib/gitlab/project_authorizations/without_nested_groups.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module ProjectAuthorizations
-    # Calculating new project authorizations when not supporting nested groups.
-    class WithoutNestedGroups
-      attr_reader :user
-
-      # user - The User object for which to calculate the authorizations.
-      def initialize(user)
-        @user = user
-      end
-
-      def calculate
-        relations = [
-          # Projects the user is a direct member of
-          user.projects.select_for_project_authorization,
-
-          # Personal projects
-          user.personal_projects.select_as_maintainer_for_project_authorization,
-
-          # Projects of groups the user is a member of
-          user.groups_projects.select_for_project_authorization,
-
-          # Projects shared with groups the user is a member of
-          user.groups.joins(:shared_projects).select_for_project_authorization
-        ]
-
-        ProjectAuthorization
-          .unscoped
-          .select_from_union(relations)
-      end
-    end
-  end
-end
diff --git a/spec/controllers/boards/issues_controller_spec.rb b/spec/controllers/boards/issues_controller_spec.rb
index 0db58fbefc1abac3603859ef1e341fcc920d37e2..d54f7ad33cf008045882cd026418b45464b8858b 100644
--- a/spec/controllers/boards/issues_controller_spec.rb
+++ b/spec/controllers/boards/issues_controller_spec.rb
@@ -85,7 +85,7 @@
           expect { list_issues(user: user, board: group_board, list: list3) }.not_to exceed_query_limit(control_count + (2 * 8 - 1))
         end
 
-        it 'avoids N+1 database queries when adding a subgroup, project, and issue', :nested_groups do
+        it 'avoids N+1 database queries when adding a subgroup, project, and issue' do
           create(:project, group: sub_group_1)
           create(:labeled_issue, project: project, labels: [development])
           control_count = ActiveRecord::QueryRecorder.new { list_issues(user: user, board: group_board, list: list3) }.count
diff --git a/spec/controllers/concerns/group_tree_spec.rb b/spec/controllers/concerns/group_tree_spec.rb
index aa3cd690e3fd24123ec7758103a4bda768ebac7c..835c3d9b3af6cebaf9f0db306d35c8d86315bdca 100644
--- a/spec/controllers/concerns/group_tree_spec.rb
+++ b/spec/controllers/concerns/group_tree_spec.rb
@@ -30,7 +30,7 @@ def index
       expect(assigns(:groups)).to contain_exactly(other_group)
     end
 
-    context 'for subgroups', :nested_groups do
+    context 'for subgroups' do
       it 'only renders root groups when no parent was given' do
         create(:group, :public, parent: group)
 
@@ -85,7 +85,7 @@ def index
         expect(json_response.first['id']).to eq(group.id)
       end
 
-      context 'nested groups', :nested_groups do
+      context 'nested groups' do
         it 'expands the tree when filtering' do
           subgroup = create(:group, :public, parent: group, name: 'filter')
 
diff --git a/spec/controllers/dashboard/groups_controller_spec.rb b/spec/controllers/dashboard/groups_controller_spec.rb
index 48373d29412ddd8582cbb034dd7b8d510d383ef9..20a0951423bb4f986577a5f2f45a173afe299e45 100644
--- a/spec/controllers/dashboard/groups_controller_spec.rb
+++ b/spec/controllers/dashboard/groups_controller_spec.rb
@@ -26,7 +26,7 @@
       expect(assigns(:groups)).to contain_exactly(member_of_group)
     end
 
-    context 'when rendering an expanded hierarchy with public groups you are not a member of', :nested_groups do
+    context 'when rendering an expanded hierarchy with public groups you are not a member of' do
       let!(:top_level_result) { create(:group, name: 'chef-top') }
       let!(:top_level_a) { create(:group, name: 'top-a') }
       let!(:sub_level_result_a) { create(:group, name: 'chef-sub-a', parent: top_level_a) }
diff --git a/spec/controllers/groups/children_controller_spec.rb b/spec/controllers/groups/children_controller_spec.rb
index 02fb971bd9a008964019822c939bab5d1ede8a41..bced300a24ccc1ad624c5559bf906e4267b0d2c6 100644
--- a/spec/controllers/groups/children_controller_spec.rb
+++ b/spec/controllers/groups/children_controller_spec.rb
@@ -46,7 +46,7 @@
       end
     end
 
-    context 'for subgroups', :nested_groups do
+    context 'for subgroups' do
       let!(:public_subgroup) { create(:group, :public, parent: group) }
       let!(:private_subgroup) { create(:group, :private, parent: group) }
       let!(:public_project) { create(:project, :public, namespace: group) }
@@ -292,7 +292,7 @@ def get_filtered_list
         end
       end
 
-      context 'with subgroups and projects', :nested_groups do
+      context 'with subgroups and projects' do
         let!(:first_page_subgroups) { create_list(:group, per_page, :public, parent: group) }
         let!(:other_subgroup) { create(:group, :public, parent: group) }
         let!(:next_page_projects) { create_list(:project, per_page, :public, namespace: group) }
diff --git a/spec/controllers/groups/labels_controller_spec.rb b/spec/controllers/groups/labels_controller_spec.rb
index 3cc6fc6f066a0c9068a57b989569fb83e87a2b87..98a4c50fc49590676be6a74e12f27988ad6281d9 100644
--- a/spec/controllers/groups/labels_controller_spec.rb
+++ b/spec/controllers/groups/labels_controller_spec.rb
@@ -24,7 +24,7 @@
       expect(label_ids).to match_array([label_1.title, group_label_1.title])
     end
 
-    context 'with ancestor group', :nested_groups do
+    context 'with ancestor group' do
       set(:subgroup) { create(:group, parent: group) }
       set(:subgroup_label_1) { create(:group_label, group: subgroup, title: 'subgroup_label_1') }
 
@@ -32,7 +32,7 @@
         subgroup.add_owner(user)
       end
 
-      it 'returns ancestor group labels', :nested_groups do
+      it 'returns ancestor group labels' do
         get :index, params: { group_id: subgroup, include_ancestor_groups: true, only_group_labels: true }, format: :json
 
         label_ids = json_response.map {|label| label['title']}
diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb
index d2faef5b12b4f8fd77af10f24e0f3a82652796e4..404e61c5271ef1c0109a99d8e6ed851d5ec1a6f1 100644
--- a/spec/controllers/groups_controller_spec.rb
+++ b/spec/controllers/groups_controller_spec.rb
@@ -89,7 +89,7 @@
   end
 
   describe 'GET #new' do
-    context 'when creating subgroups', :nested_groups do
+    context 'when creating subgroups' do
       [true, false].each do |can_create_group_status|
         context "and can_create_group is #{can_create_group_status}" do
           before do
@@ -166,7 +166,7 @@
       end
     end
 
-    context 'when creating subgroups', :nested_groups do
+    context 'when creating subgroups' do
       [true, false].each do |can_create_group_status|
         context "and can_create_group is #{can_create_group_status}" do
           context 'and logged in as Owner' do
@@ -584,7 +584,7 @@ def group_moved_message(redirect_route, group)
     end
   end
 
-  describe 'PUT transfer', :postgresql do
+  describe 'PUT transfer' do
     before do
       sign_in(user)
     end
diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb
index 64a6650273281aea3d6504b51b1c9a560d5c4ea1..38388c217497f3f72f8b4ea21755a896f882e52e 100644
--- a/spec/controllers/import/bitbucket_controller_spec.rb
+++ b/spec/controllers/import/bitbucket_controller_spec.rb
@@ -231,7 +231,7 @@ def assign_session_tokens
       end
     end
 
-    context 'user has chosen an existing nested namespace and name for the project', :postgresql do
+    context 'user has chosen an existing nested namespace and name for the project' do
       let(:parent_namespace) { create(:group, name: 'foo') }
       let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) }
       let(:test_name) { 'test_name' }
@@ -250,7 +250,7 @@ def assign_session_tokens
       end
     end
 
-    context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do
+    context 'user has chosen a non-existent nested namespaces and name for the project' do
       let(:test_name) { 'test_name' }
 
       it 'takes the selected namespace and name' do
@@ -281,7 +281,7 @@ def assign_session_tokens
       end
     end
 
-    context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do
+    context 'user has chosen existent and non-existent nested namespaces and name for the project' do
       let(:test_name) { 'test_name' }
       let!(:parent_namespace) { create(:group, name: 'foo') }
 
diff --git a/spec/controllers/import/gitlab_controller_spec.rb b/spec/controllers/import/gitlab_controller_spec.rb
index 5af7572e74ead987563b8f8735e6c11f630b6fb1..e465eca6c7139bd39d8bb69ff7cffc923c991225 100644
--- a/spec/controllers/import/gitlab_controller_spec.rb
+++ b/spec/controllers/import/gitlab_controller_spec.rb
@@ -197,7 +197,7 @@ def assign_session_token
         end
       end
 
-      context 'user has chosen an existing nested namespace for the project', :postgresql do
+      context 'user has chosen an existing nested namespace for the project' do
         let(:parent_namespace) { create(:group, name: 'foo') }
         let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) }
 
@@ -215,7 +215,7 @@ def assign_session_token
         end
       end
 
-      context 'user has chosen a non-existent nested namespaces for the project', :postgresql do
+      context 'user has chosen a non-existent nested namespaces for the project' do
         let(:test_name) { 'test_name' }
 
         it 'takes the selected namespace and name' do
@@ -246,7 +246,7 @@ def assign_session_token
         end
       end
 
-      context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do
+      context 'user has chosen existent and non-existent nested namespaces and name for the project' do
         let(:test_name) { 'test_name' }
         let!(:parent_namespace) { create(:group, name: 'foo') }
 
diff --git a/spec/controllers/projects/milestones_controller_spec.rb b/spec/controllers/projects/milestones_controller_spec.rb
index 767cee7d54acf6533dea7ab7c08358fe9d76f9cd..9b2025b836c70d8351130c9d7a5b5c98d467ec95 100644
--- a/spec/controllers/projects/milestones_controller_spec.rb
+++ b/spec/controllers/projects/milestones_controller_spec.rb
@@ -115,7 +115,7 @@ def render_index(project:, page:, search_title: '')
         end
       end
 
-      context 'with nested groups', :nested_groups do
+      context 'with nested groups' do
         let!(:subgroup) { create(:group, :public, parent: group) }
         let!(:subgroup_milestone) { create(:milestone, group: subgroup) }
 
diff --git a/spec/features/dashboard/groups_list_spec.rb b/spec/features/dashboard/groups_list_spec.rb
index fb76e2b00146a4bf1dedc72b4b79089856aea5f4..bdab3c6324439cc2020455d10e9474cae81a3562 100644
--- a/spec/features/dashboard/groups_list_spec.rb
+++ b/spec/features/dashboard/groups_list_spec.rb
@@ -27,7 +27,7 @@ def click_group_caret(group)
     expect(page).not_to have_content(another_group.name)
   end
 
-  it 'shows subgroups the user is member of', :nested_groups do
+  it 'shows subgroups the user is member of' do
     group.add_owner(user)
     nested_group.add_owner(user)
 
@@ -40,7 +40,7 @@ def click_group_caret(group)
     expect(page).to have_content(nested_group.name)
   end
 
-  context 'when filtering groups', :nested_groups do
+  context 'when filtering groups' do
     before do
       group.add_owner(user)
       nested_group.add_owner(user)
@@ -79,7 +79,7 @@ def click_group_caret(group)
     end
   end
 
-  context 'with subgroups', :nested_groups do
+  context 'with subgroups' do
     let!(:subgroup) { create(:group, :public, parent: group) }
 
     before do
diff --git a/spec/features/groups/empty_states_spec.rb b/spec/features/groups/empty_states_spec.rb
index e4eb0d355d160aa9beace6e6c229850ed2fdb8ac..3fbc0f78d38bbd72cdd4523281c995371b14c024 100644
--- a/spec/features/groups/empty_states_spec.rb
+++ b/spec/features/groups/empty_states_spec.rb
@@ -110,7 +110,7 @@
       end
 
       context 'group without a project' do
-        context 'group has a subgroup', :nested_groups do
+        context 'group has a subgroup' do
           let(:subgroup) { create(:group, parent: group) }
           let(:subgroup_project) { create(:project, namespace: subgroup) }
 
diff --git a/spec/features/groups/group_settings_spec.rb b/spec/features/groups/group_settings_spec.rb
index 676769c25fe2b6571f243d2d0472fd4c0cb85381..257aeae7e23bca493ed1f16d8cca0b7053efdec8 100644
--- a/spec/features/groups/group_settings_spec.rb
+++ b/spec/features/groups/group_settings_spec.rb
@@ -121,7 +121,7 @@
       expect(find(:css, '.group-root-path').text).to eq(root_url)
     end
 
-    it 'has a parent group URL label for a subgroup group', :postgresql do
+    it 'has a parent group URL label for a subgroup group' do
       subgroup = create(:group, parent: group)
 
       visit edit_group_path(subgroup)
diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb
index 0ada530781c40e892c127ee2276c9a3aa3eae5e2..a16004c79cae0472c3023d2af2842f6d58861b3e 100644
--- a/spec/features/groups/issues_spec.rb
+++ b/spec/features/groups/issues_spec.rb
@@ -50,7 +50,7 @@
     end
   end
 
-  context 'issues list', :nested_groups do
+  context 'issues list' do
     let(:subgroup) { create(:group, parent: group) }
     let(:subgroup_project) { create(:project, :public, group: subgroup)}
     let(:user_in_group) { create(:group_member, :maintainer, user: create(:user), group: group ).user }
diff --git a/spec/features/groups/members/list_members_spec.rb b/spec/features/groups/members/list_members_spec.rb
index 4ba7161601e7b0ff1a17104b5c973eee30751511..ffff755793ffc7d9ff46851415df60e803c879d8 100644
--- a/spec/features/groups/members/list_members_spec.rb
+++ b/spec/features/groups/members/list_members_spec.rb
@@ -13,7 +13,7 @@
     sign_in(user1)
   end
 
-  it 'show members from current group and parent', :nested_groups do
+  it 'show members from current group and parent' do
     group.add_developer(user1)
     nested_group.add_developer(user2)
 
@@ -23,7 +23,7 @@
     expect(second_row.text).to include(user2.name)
   end
 
-  it 'show user once if member of both current group and parent', :nested_groups do
+  it 'show user once if member of both current group and parent' do
     group.add_developer(user1)
     nested_group.add_developer(user1)
 
diff --git a/spec/features/groups/share_lock_spec.rb b/spec/features/groups/share_lock_spec.rb
index 704d9f128889b9037e0fde5d61e49b5279ca3689..86b523fbdd9ea2e2d5aa425e3ec54cf201e86c47 100644
--- a/spec/features/groups/share_lock_spec.rb
+++ b/spec/features/groups/share_lock_spec.rb
@@ -9,7 +9,7 @@
     sign_in(root_owner)
   end
 
-  context 'with a subgroup', :nested_groups do
+  context 'with a subgroup' do
     let!(:subgroup) { create(:group, parent: root_group) }
 
     context 'when enabling the parent group share with group lock' do
diff --git a/spec/features/groups/show_spec.rb b/spec/features/groups/show_spec.rb
index bed998a085911e90fb4cf1b64f5e3486ddd12187..0d78bd23973e3ef872722bf1fbe589f4127ec327 100644
--- a/spec/features/groups/show_spec.rb
+++ b/spec/features/groups/show_spec.rb
@@ -75,11 +75,7 @@
         sign_in(owner)
       end
 
-      context 'when subgroups are supported', :nested_groups do
-        before do
-          allow(Group).to receive(:supports_nested_objects?) { true }
-        end
-
+      context 'when subgroups are supported' do
         it 'allows creating subgroups' do
           visit path
 
@@ -87,19 +83,6 @@
             .to have_css("li[data-text='New subgroup']", visible: false)
         end
       end
-
-      context 'when subgroups are not supported' do
-        before do
-          allow(Group).to receive(:supports_nested_objects?) { false }
-        end
-
-        it 'does not allow creating subgroups' do
-          visit path
-
-          expect(page)
-            .not_to have_selector("li[data-text='New subgroup']", visible: false)
-        end
-      end
     end
 
     context 'for maintainers' do
@@ -107,11 +90,7 @@
         sign_in(maintainer)
       end
 
-      context 'when subgroups are supported', :nested_groups do
-        before do
-          allow(Group).to receive(:supports_nested_objects?) { true }
-        end
-
+      context 'when subgroups are supported' do
         context 'when subgroup_creation_level is set to maintainers' do
           before do
             relaxed_group.add_maintainer(maintainer)
@@ -141,19 +120,6 @@
           end
         end
       end
-
-      context 'when subgroups are not supported' do
-        before do
-          allow(Group).to receive(:supports_nested_objects?) { false }
-        end
-
-        it 'does not allow creating subgroups' do
-          visit path
-
-          expect(page)
-            .not_to have_selector("li[data-text='New subgroup']", visible: false)
-        end
-      end
     end
   end
 
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 8e7f78cab81d6977abf53af601bea5b1a3355d77..ad645643919b61873df6dd496e224344d27f448f 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -105,7 +105,7 @@
     end
   end
 
-  describe 'create a nested group', :nested_groups, :js do
+  describe 'create a nested group', :js do
     let(:group) { create(:group, path: 'foo') }
 
     context 'as admin' do
@@ -231,7 +231,7 @@
     end
   end
 
-  describe 'group page with nested groups', :nested_groups, :js do
+  describe 'group page with nested groups', :js do
     let!(:group) { create(:group) }
     let!(:nested_group) { create(:group, parent: group) }
     let!(:project) { create(:project, namespace: group) }
diff --git a/spec/features/ide_spec.rb b/spec/features/ide_spec.rb
index 6eb59ef72c255f52d16dc599212b2ac0ec0481b1..65989c36c1e43107588f8e96e171f3f351ff2c5f 100644
--- a/spec/features/ide_spec.rb
+++ b/spec/features/ide_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe 'IDE', :js do
-  describe 'sub-groups', :nested_groups do
+  describe 'sub-groups' do
     let(:user) { create(:user) }
     let(:group) { create(:group) }
     let(:subgroup) { create(:group, parent: group) }
diff --git a/spec/features/import/manifest_import_spec.rb b/spec/features/import/manifest_import_spec.rb
index a90cdd8d92007a74062c554cb24b6687fad64d62..90b499efd72fa15e028b216d61ba6345be294384 100644
--- a/spec/features/import/manifest_import_spec.rb
+++ b/spec/features/import/manifest_import_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'Import multiple repositories by uploading a manifest file', :js, :postgresql do
+describe 'Import multiple repositories by uploading a manifest file', :js do
   include Select2Helper
 
   let(:user) { create(:admin) }
diff --git a/spec/features/labels_hierarchy_spec.rb b/spec/features/labels_hierarchy_spec.rb
index 489651fea1597adbccf67f98b41b4942956e129c..45bd2218ee6cc01d0d6719d2b2c249471441b7a9 100644
--- a/spec/features/labels_hierarchy_spec.rb
+++ b/spec/features/labels_hierarchy_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'Labels Hierarchy', :js, :nested_groups do
+describe 'Labels Hierarchy', :js do
   include FilteredSearchHelpers
 
   let!(:user) { create(:user) }
diff --git a/spec/features/projects/members/invite_group_spec.rb b/spec/features/projects/members/invite_group_spec.rb
index 7432c600c1ec1950408f0291c27948757a4c392c..c5423ec4662682282164edbe013ec14f4aeb9fe1 100644
--- a/spec/features/projects/members/invite_group_spec.rb
+++ b/spec/features/projects/members/invite_group_spec.rb
@@ -58,7 +58,7 @@
       end
     end
 
-    context 'for a project in a subgroup', :nested_groups do
+    context 'for a project in a subgroup' do
       let!(:group_to_share_with) { create(:group) }
       let(:root_group) { create(:group) }
       let(:subgroup) { create(:group, parent: root_group) }
@@ -181,7 +181,7 @@
         group_to_share_with.add_maintainer(maintainer)
       end
 
-      it 'the groups dropdown does not show ancestors', :nested_groups do
+      it 'the groups dropdown does not show ancestors' do
         visit project_settings_members_path(project)
 
         click_on 'invite-group-tab'
diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb
index 7602935b47e09bedbebed07915d984c54ffd6334..8cdaed43fbc2d1e80b4d4bfbd02269c23e853107 100644
--- a/spec/features/projects/new_project_spec.rb
+++ b/spec/features/projects/new_project_spec.rb
@@ -294,7 +294,7 @@
         end
       end
 
-      context 'from manifest file', :postgresql do
+      context 'from manifest file' do
         before do
           first('.import_manifest').click
         end
diff --git a/spec/features/projects/settings/pipelines_settings_spec.rb b/spec/features/projects/settings/pipelines_settings_spec.rb
index bf0c0de89b217ebcdb233f1c9e34bb45dd30f3bd..31fdd3082926608b2aaa504712c01afe0e15bfc8 100644
--- a/spec/features/projects/settings/pipelines_settings_spec.rb
+++ b/spec/features/projects/settings/pipelines_settings_spec.rb
@@ -126,7 +126,7 @@
           end
         end
 
-        context 'when auto devops is turned on group parent level', :nested_groups do
+        context 'when auto devops is turned on group parent level' do
           before do
             group = create(:group, parent: create(:group, :auto_devops_enabled))
             project.update!(namespace: group)
diff --git a/spec/features/projects/settings/user_transfers_a_project_spec.rb b/spec/features/projects/settings/user_transfers_a_project_spec.rb
index 2fdbc04fa62139565c15888ba6853328c256ce63..9af2e47a334758b5cce251e83bc960c76c8d4967 100644
--- a/spec/features/projects/settings/user_transfers_a_project_spec.rb
+++ b/spec/features/projects/settings/user_transfers_a_project_spec.rb
@@ -68,7 +68,7 @@ def transfer_project(project, group, confirm: true)
     end
   end
 
-  context 'when nested groups are available', :nested_groups do
+  context 'when nested groups are available' do
     it 'allows transferring a project to a subgroup' do
       subgroup = create(:group, parent: group)
 
diff --git a/spec/features/projects/sub_group_issuables_spec.rb b/spec/features/projects/sub_group_issuables_spec.rb
index 50e7e934cf6cf99772b911fea5a19ac3223ea97e..8afbcf72ca7d6fbe5e204532d7e5e6fb676378cb 100644
--- a/spec/features/projects/sub_group_issuables_spec.rb
+++ b/spec/features/projects/sub_group_issuables_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'Subgroup Issuables', :js, :nested_groups do
+describe 'Subgroup Issuables', :js do
   let!(:group)    { create(:group, name: 'group') }
   let!(:subgroup) { create(:group, parent: group, name: 'subgroup') }
   let!(:project)  { create(:project, namespace: subgroup, name: 'project') }
diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb
index c0932539131f6b74b9425c1337dae93093bd1a72..19262a635ac7a0ba2085cd24afabe8c8dac08d81 100644
--- a/spec/features/projects/user_creates_project_spec.rb
+++ b/spec/features/projects/user_creates_project_spec.rb
@@ -26,7 +26,7 @@
     expect(page).to have_content(project.url_to_repo)
   end
 
-  context 'in a subgroup they do not own', :nested_groups do
+  context 'in a subgroup they do not own' do
     let(:parent) { create(:group) }
     let!(:subgroup) { create(:group, parent: parent) }
 
diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb
index b5112758475442ce2e6ccd185dc13972da5afed8..d1e2d17e9cc36d952b7ed47bcd150c04fa8c9f67 100644
--- a/spec/features/projects_spec.rb
+++ b/spec/features/projects_spec.rb
@@ -314,7 +314,7 @@
       end
     end
 
-    context 'for subgroups', :js, :nested_groups do
+    context 'for subgroups', :js do
       let(:group) { create(:group) }
       let(:subgroup) { create(:group, parent: group) }
       let(:project) { create(:project, :repository, group: subgroup) }
diff --git a/spec/finders/autocomplete/users_finder_spec.rb b/spec/finders/autocomplete/users_finder_spec.rb
index bcde115b1a661e5b3ef4a6571769bc242192cb21..f3b54ca0461dc4b61f42f41974f3ca85f0b14039 100644
--- a/spec/finders/autocomplete/users_finder_spec.rb
+++ b/spec/finders/autocomplete/users_finder_spec.rb
@@ -50,7 +50,7 @@
       it { is_expected.to match_array([user1]) }
     end
 
-    context 'when passed a subgroup', :nested_groups do
+    context 'when passed a subgroup' do
       let(:grandparent) { create(:group, :public) }
       let(:parent) { create(:group, :public, parent: grandparent) }
       let(:child) { create(:group, :public, parent: parent) }
diff --git a/spec/finders/cluster_ancestors_finder_spec.rb b/spec/finders/cluster_ancestors_finder_spec.rb
index 750042b6b54299b3e368ddc123c2ae2e70585b72..4aedb41d4460bd137d845531de6667d04eb02cf8 100644
--- a/spec/finders/cluster_ancestors_finder_spec.rb
+++ b/spec/finders/cluster_ancestors_finder_spec.rb
@@ -32,7 +32,7 @@
       is_expected.to eq([project_cluster, group_cluster, instance_cluster])
     end
 
-    context 'nested groups', :nested_groups do
+    context 'nested groups' do
       let(:group) { create(:group, parent: parent_group) }
       let(:parent_group) { create(:group) }
 
@@ -65,7 +65,7 @@
       is_expected.to eq([group_cluster, instance_cluster])
     end
 
-    context 'nested groups', :nested_groups do
+    context 'nested groups' do
       let(:group) { create(:group, parent: parent_group) }
       let(:parent_group) { create(:group) }
 
diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb
index c28fd7cad11e3355346f39453995b9814dc88e7a..5fb6739d6e25387bc71d2fc2013d32b63c61f134 100644
--- a/spec/finders/group_descendants_finder_spec.rb
+++ b/spec/finders/group_descendants_finder_spec.rb
@@ -19,7 +19,7 @@
       expect(finder.has_children?).to be_truthy
     end
 
-    context 'when there are subgroups', :nested_groups do
+    context 'when there are subgroups' do
       it 'is true when there are projects' do
         create(:group, parent: group)
 
@@ -99,7 +99,7 @@
         )
       end
 
-      context 'with nested groups', :nested_groups do
+      context 'with nested groups' do
         let!(:subgroup1) { create(:group, parent: group, name: 'a', path: 'sub-a') }
         let!(:subgroup2) { create(:group, parent: group, name: 'z', path: 'sub-z') }
 
@@ -126,7 +126,7 @@
     end
   end
 
-  context 'with nested groups', :nested_groups do
+  context 'with nested groups' do
     let!(:project) { create(:project, namespace: group) }
     let!(:subgroup) { create(:group, :private, parent: group) }
 
diff --git a/spec/finders/group_members_finder_spec.rb b/spec/finders/group_members_finder_spec.rb
index 8975ea0f063b0f884f089bc79549984040a8c113..49b0e14241e9c95b256d4492b94cf35337d500b5 100644
--- a/spec/finders/group_members_finder_spec.rb
+++ b/spec/finders/group_members_finder_spec.rb
@@ -18,7 +18,7 @@
     expect(result.to_a).to match_array([member3, member2, member1])
   end
 
-  it 'returns members for nested group', :nested_groups do
+  it 'returns members for nested group' do
     group.add_developer(user2)
     nested_group.request_access(user4)
     member1 = group.add_maintainer(user1)
@@ -30,7 +30,7 @@
     expect(result.to_a).to match_array([member1, member3, member4])
   end
 
-  it 'returns members for descendant groups if requested', :nested_groups do
+  it 'returns members for descendant groups if requested' do
     member1 = group.add_maintainer(user2)
     member2 = group.add_maintainer(user1)
     nested_group.add_maintainer(user2)
diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb
index f8fcc2d0e40c14e04b0311b0bdae9c7d8a1c7441..f4bd8a3f6ba7a08f28cd7ab53ff3f9431a94f206 100644
--- a/spec/finders/group_projects_finder_spec.rb
+++ b/spec/finders/group_projects_finder_spec.rb
@@ -19,7 +19,7 @@
     context "only owned" do
       let(:options) { { only_owned: true } }
 
-      context 'with subgroups projects', :nested_groups do
+      context 'with subgroups projects' do
         before do
           options[:include_subgroups] = true
         end
@@ -33,7 +33,7 @@
     end
 
     context "all" do
-      context 'with subgroups projects', :nested_groups do
+      context 'with subgroups projects' do
         before do
           options[:include_subgroups] = true
         end
@@ -78,7 +78,7 @@
           subgroup_private_project.add_maintainer(current_user)
         end
 
-        context 'with subgroups projects', :nested_groups do
+        context 'with subgroups projects' do
           before do
             options[:include_subgroups] = true
           end
@@ -96,7 +96,7 @@
           current_user.update(external: true)
         end
 
-        context 'with subgroups projects', :nested_groups do
+        context 'with subgroups projects' do
           before do
             options[:include_subgroups] = true
           end
@@ -111,7 +111,7 @@
     end
 
     context "all" do
-      context 'with subgroups projects', :nested_groups do
+      context 'with subgroups projects' do
         before do
           options[:include_subgroups] = true
         end
@@ -153,7 +153,7 @@
     context "only owned" do
       let(:options) { { only_owned: true } }
 
-      context 'with subgroups projects', :nested_groups do
+      context 'with subgroups projects' do
         before do
           options[:include_subgroups] = true
         end
diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb
index 367ca43bdfe443b3c414a6e2b97260a897c99593..c8875d1f92dbf6ee40031393da3e65e9253515a9 100644
--- a/spec/finders/groups_finder_spec.rb
+++ b/spec/finders/groups_finder_spec.rb
@@ -65,7 +65,7 @@
       end
     end
 
-    context 'subgroups', :nested_groups do
+    context 'subgroups' do
       let(:user) { create(:user) }
       let!(:parent_group) { create(:group, :public) }
       let!(:public_subgroup) { create(:group, :public, parent: parent_group) }
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index bf38d083ca6b1d522c9c7ffaf176d992685c8a61..7fbe27c19395b54023bf481f554e711b61d1800a 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -51,7 +51,7 @@
           end
         end
 
-        context 'when include_subgroup param is true', :nested_groups do
+        context 'when include_subgroup param is true' do
           before do
             params[:include_subgroups] = true
           end
diff --git a/spec/finders/labels_finder_spec.rb b/spec/finders/labels_finder_spec.rb
index 98b4933fef6e3d54b52fe8423b0e11a4d5ec3a9a..ba41ded112a38c67c107ab2ca375c2ad6527378f 100644
--- a/spec/finders/labels_finder_spec.rb
+++ b/spec/finders/labels_finder_spec.rb
@@ -89,7 +89,7 @@
         end
       end
 
-      context 'when including labels from group ancestors', :nested_groups do
+      context 'when including labels from group ancestors' do
         it 'returns labels from group and its ancestors' do
           private_group_1.add_developer(user)
           private_subgroup_1.add_developer(user)
@@ -108,7 +108,7 @@
         end
       end
 
-      context 'when including labels from group descendants', :nested_groups do
+      context 'when including labels from group descendants' do
         it 'returns labels from group and its descendants' do
           private_group_1.add_developer(user)
           private_subgroup_1.add_developer(user)
@@ -128,7 +128,7 @@
       end
     end
 
-    context 'filtering by project_id', :nested_groups do
+    context 'filtering by project_id' do
       context 'when include_ancestor_groups is true' do
         let!(:sub_project) { create(:project, namespace: private_subgroup_1 ) }
         let!(:project_label) { create(:label, project: sub_project, title: 'Label 5') }
diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb
index 83348457caa7269d0511e6fb22846e9ea4d4633f..4203f58fe81a3968c1e18cc82ceb04019a9816e0 100644
--- a/spec/finders/members_finder_spec.rb
+++ b/spec/finders/members_finder_spec.rb
@@ -9,7 +9,7 @@
   set(:user3)        { create(:user) }
   set(:user4)        { create(:user) }
 
-  it 'returns members for project and parent groups', :nested_groups do
+  it 'returns members for project and parent groups' do
     nested_group.request_access(user1)
     member1 = group.add_maintainer(user2)
     member2 = nested_group.add_maintainer(user3)
@@ -20,7 +20,7 @@
     expect(result.to_a).to match_array([member1, member2, member3])
   end
 
-  it 'includes nested group members if asked', :nested_groups do
+  it 'includes nested group members if asked' do
     project = create(:project, namespace: group)
     nested_group.request_access(user1)
     member1 = group.add_maintainer(user2)
@@ -32,7 +32,7 @@
     expect(result.to_a).to match_array([member1, member2, member3])
   end
 
-  context 'when include_invited_groups_members == true', :nested_groups do
+  context 'when include_invited_groups_members == true' do
     subject { described_class.new(project, user2).execute(include_invited_groups_members: true) }
 
     set(:linked_group) { create(:group, :public, :access_requestable) }
@@ -40,7 +40,7 @@
     set(:linked_group_member) { linked_group.add_developer(user1) }
     set(:nested_linked_group_member) { nested_linked_group.add_developer(user2) }
 
-    it 'includes all the invited_groups members including members inherited from ancestor groups', :nested_groups do
+    it 'includes all the invited_groups members including members inherited from ancestor groups' do
       create(:project_group_link, project: project, group: nested_linked_group)
 
       expect(subject).to contain_exactly(linked_group_member, nested_linked_group_member)
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb
index da5e9dab0585ce9fa6593cf2ae8bda37ef9f30da..78224f0b9da94635b788e71a42746277880ea31f 100644
--- a/spec/finders/merge_requests_finder_spec.rb
+++ b/spec/finders/merge_requests_finder_spec.rb
@@ -42,7 +42,7 @@
           expect(merge_requests).to contain_exactly(merge_request1, merge_request2)
         end
 
-        it 'filters by group including subgroups', :nested_groups do
+        it 'filters by group including subgroups' do
           params = { group_id: group.id, include_subgroups: true }
 
           merge_requests = described_class.new(user, params).execute
diff --git a/spec/finders/todos_finder_spec.rb b/spec/finders/todos_finder_spec.rb
index 22318a9946a428d49167d5c256ab9f12f43689c4..f7b35e76925469c4243024411d9355abe7a40729 100644
--- a/spec/finders/todos_finder_spec.rb
+++ b/spec/finders/todos_finder_spec.rb
@@ -36,7 +36,7 @@
           expect(todos).to match_array([todo1])
         end
 
-        context 'with subgroups', :nested_groups do
+        context 'with subgroups' do
           let(:subgroup) { create(:group, parent: group) }
           let!(:todo3) { create(:todo, user: user, group: subgroup, target: issue) }
 
diff --git a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb
index 20e197e9f73e8ee09535727229a28a9bcd621522..47591445fc0f252ef9b241f8cb042adf65bd4a07 100644
--- a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb
+++ b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe Resolvers::NamespaceProjectsResolver, :nested_groups do
+describe Resolvers::NamespaceProjectsResolver do
   include GraphqlHelpers
 
   let(:current_user) { create(:user) }
diff --git a/spec/helpers/auto_devops_helper_spec.rb b/spec/helpers/auto_devops_helper_spec.rb
index d2540696b17e0f9dd0070bc39ee29964ee9d7b1c..e80388f9ea7fd0423d9c46f9d6dcb624d5735598 100644
--- a/spec/helpers/auto_devops_helper_spec.rb
+++ b/spec/helpers/auto_devops_helper_spec.rb
@@ -118,7 +118,7 @@
           it { is_expected.to eq('instance enabled') }
         end
 
-        context 'with groups', :nested_groups do
+        context 'with groups' do
           before do
             receiver.update(parent: parent)
           end
@@ -170,7 +170,7 @@
           it { is_expected.to eq('instance enabled') }
         end
 
-        context 'with groups', :nested_groups do
+        context 'with groups' do
           let(:receiver) { create(:project, :repository, namespace: group) }
 
           before do
@@ -203,7 +203,7 @@
           it { is_expected.to be_nil }
         end
 
-        context 'with groups', :nested_groups do
+        context 'with groups' do
           let(:receiver) { create(:project, :repository, namespace: group) }
 
           context 'when auto devops is disabled on group level' do
diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb
index 1763c46389a86c82fb83a3bc13de94a8fafe9ae4..037b16c90ed63288f37e4dfac7cb1c5de91fa6f7 100644
--- a/spec/helpers/groups_helper_spec.rb
+++ b/spec/helpers/groups_helper_spec.rb
@@ -86,7 +86,7 @@
     end
   end
 
-  describe 'group_title', :nested_groups do
+  describe 'group_title' do
     let(:group) { create(:group) }
     let(:nested_group) { create(:group, parent: group) }
     let(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -99,7 +99,7 @@
   end
 
   # rubocop:disable Layout/SpaceBeforeComma
-  describe '#share_with_group_lock_help_text', :nested_groups do
+  describe '#share_with_group_lock_help_text' do
     let!(:root_group) { create(:group) }
     let!(:subgroup) { create(:group, parent: root_group) }
     let!(:sub_subgroup) { create(:group, parent: subgroup) }
@@ -230,7 +230,7 @@
     end
   end
 
-  describe 'parent_group_options', :nested_groups do
+  describe 'parent_group_options' do
     let(:current_user) { create(:user) }
     let(:group) { create(:group, name: 'group') }
     let(:group2) { create(:group, name: 'group2') }
diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb
index 601f864ef36af3d329dd80bfd5c7ec1fc032d1e1..e38513f6d94108704acaed08cef55d5f961c4b43 100644
--- a/spec/helpers/namespaces_helper_spec.rb
+++ b/spec/helpers/namespaces_helper_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe NamespacesHelper, :postgresql do
+describe NamespacesHelper do
   let!(:admin) { create(:admin) }
   let!(:admin_project_creation_level) { nil }
   let!(:admin_group) do
@@ -109,7 +109,7 @@
       expect(options).to include(user_group.name)
     end
 
-    context 'when nested groups are available', :nested_groups do
+    context 'when nested groups are available' do
       it 'includes groups nested in groups the user can administer' do
         allow(helper).to receive(:current_user).and_return(user)
         child_group = create(:group, :private, parent: user_group)
diff --git a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
index f0a5dc8d0d7ee05ec77b2a0b21376583bdd91b49..91edadfa234b39e621b9a0af8c108ab997b43e60 100644
--- a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
@@ -363,7 +363,7 @@
       expect(doc.css('a')).to be_empty
     end
 
-    it 'supports parent group references', :nested_groups do
+    it 'supports parent group references' do
       milestone.update!(group: parent_group)
 
       doc = reference_filter("See #{reference}")
@@ -396,7 +396,7 @@
     context 'when group milestone' do
       let(:group_milestone) { create(:milestone, title: 'group_milestone', group: group) }
 
-      context 'for subgroups', :nested_groups do
+      context 'for subgroups' do
         let(:sub_group) { create(:group, parent: group) }
         let(:sub_group_milestone) { create(:milestone, title: 'sub_group_milestone', group: sub_group) }
 
diff --git a/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb b/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb
index 20af63bc6c82a61ddbe9ef68cab161265d70739e..84ccd57a50b9657a5d88afdffe56900daa84de25 100644
--- a/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb
+++ b/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb
@@ -75,7 +75,7 @@ def create_resource(target_type, id, project_id)
         create_resource(target_type, 1, 2)
       end
 
-      it 'ignores label links referencing ancestor group labels', :nested_groups do
+      it 'ignores label links referencing ancestor group labels' do
         labels_table.create(id: 4, title: 'bug', color: 'red', project_id: 2, type: 'ProjectLabel')
         label_links_table.create(label_id: 4, target_type: target_type, target_id: 1)
         link = label_links_table.create(label_id: 1, target_type: target_type, target_id: 1)
@@ -85,7 +85,7 @@ def create_resource(target_type, id, project_id)
         expect(link.reload.label_id).to eq(1)
       end
 
-      it 'checks also issues and MRs in subgroups', :nested_groups do
+      it 'checks also issues and MRs in subgroups' do
         link = label_links_table.create(label_id: 2, target_type: target_type, target_id: 1)
 
         subject.perform(1, 100)
diff --git a/spec/lib/gitlab/bare_repository_import/importer_spec.rb b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
index f4759b695387533029a950a6e038389cc315adcc..ebd3c28f130fd96f17bae659c3856f794705cc2b 100644
--- a/spec/lib/gitlab/bare_repository_import/importer_spec.rb
+++ b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
@@ -103,7 +103,7 @@
     end
   end
 
-  context 'with subgroups', :nested_groups do
+  context 'with subgroups' do
     let(:project_path) { 'a-group/a-sub-group/a-project' }
 
     let(:existing_group) do
@@ -188,20 +188,6 @@
     end
   end
 
-  context 'when subgroups are not available' do
-    let(:project_path) { 'a-group/a-sub-group/a-project' }
-
-    before do
-      expect(Group).to receive(:supports_nested_objects?) { false }
-    end
-
-    describe '#create_project_if_needed' do
-      it 'raises an error' do
-        expect { importer.create_project_if_needed }.to raise_error('Nested groups are not supported on MySQL')
-      end
-    end
-  end
-
   def prepare_repository(project_path, source_project)
     repo_path = File.join(base_dir, project_path)
 
diff --git a/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb b/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb
index a528707c9dc71c2a35a04c75c99d4e6a490c1f92..959f3fdc28938fc2e49bb2c93c0dd79b8c3860ab 100644
--- a/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb
+++ b/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb
@@ -8,7 +8,7 @@
 
   subject { described_class.new(models).count }
 
-  describe '#count', :postgresql do
+  describe '#count' do
     let(:models) { [Project, Identity] }
 
     context 'when reltuples is up to date' do
diff --git a/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb b/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb
index a57f033b5edda6632d2c7b4ab2f03098ed9491f3..cc9d778e5799b34e34dbcd3dc43cf8fd44c1bd02 100644
--- a/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb
+++ b/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb
@@ -12,7 +12,7 @@
 
   subject { strategy.count }
 
-  describe '#count', :postgresql do
+  describe '#count' do
     let(:estimates) do
       {
         Project => threshold + 1,
diff --git a/spec/lib/gitlab/database/grant_spec.rb b/spec/lib/gitlab/database/grant_spec.rb
index 5ebf3f399b601aa45425ba82cac6b1a5360b4084..9e62dc14d77bbc0ebc9e077a4ad3bd290ef6afc3 100644
--- a/spec/lib/gitlab/database/grant_spec.rb
+++ b/spec/lib/gitlab/database/grant_spec.rb
@@ -8,7 +8,7 @@
       expect(described_class.create_and_execute_trigger?('users')).to eq(true)
     end
 
-    it 'returns false when the user can not create and/or execute a trigger', :postgresql do
+    it 'returns false when the user can not create and/or execute a trigger' do
       # In case of MySQL the user may have SUPER permissions, making it
       # impossible to have `false` returned when running tests; hence we only
       # run these tests on PostgreSQL.
diff --git a/spec/lib/gitlab/group_search_results_spec.rb b/spec/lib/gitlab/group_search_results_spec.rb
index 2734fcef0a0e5201315614c193ce80f94feca0a5..53a91a35ec99931c49a76a8b6749f1b6d0625d09 100644
--- a/spec/lib/gitlab/group_search_results_spec.rb
+++ b/spec/lib/gitlab/group_search_results_spec.rb
@@ -20,7 +20,7 @@
       expect(result).to eq [user1]
     end
 
-    it 'returns the user belonging to the subgroup matching the search query', :nested_groups do
+    it 'returns the user belonging to the subgroup matching the search query' do
       user1 = create(:user, username: 'gob_bluth')
       subgroup = create(:group, parent: group)
       create(:group_member, :developer, user: user1, group: subgroup)
@@ -32,7 +32,7 @@
       expect(result).to eq [user1]
     end
 
-    it 'returns the user belonging to the parent group matching the search query', :nested_groups do
+    it 'returns the user belonging to the parent group matching the search query' do
       user1 = create(:user, username: 'gob_bluth')
       parent_group = create(:group, children: [group])
       create(:group_member, :developer, user: user1, group: parent_group)
@@ -44,7 +44,7 @@
       expect(result).to eq [user1]
     end
 
-    it 'does not return the user belonging to the private subgroup', :nested_groups do
+    it 'does not return the user belonging to the private subgroup' do
       user1 = create(:user, username: 'gob_bluth')
       subgroup = create(:group, :private, parent: group)
       create(:group_member, :developer, user: user1, group: subgroup)
diff --git a/spec/lib/gitlab/manifest_import/manifest_spec.rb b/spec/lib/gitlab/manifest_import/manifest_spec.rb
index ab305fb23161e9c0cf5a3c74cd134274f27e61d6..ded93e23c0873f2be42199c78015c28fbadf67e4 100644
--- a/spec/lib/gitlab/manifest_import/manifest_spec.rb
+++ b/spec/lib/gitlab/manifest_import/manifest_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::ManifestImport::Manifest, :postgresql do
+describe Gitlab::ManifestImport::Manifest do
   let(:file) { File.open(Rails.root.join('spec/fixtures/aosp_manifest.xml')) }
   let(:manifest) { described_class.new(file) }
 
diff --git a/spec/lib/gitlab/manifest_import/project_creator_spec.rb b/spec/lib/gitlab/manifest_import/project_creator_spec.rb
index 1d01d4375355957d714cace8084614cb27fea21a..a7487972f512ac2e78b75663623e769ecaddf884 100644
--- a/spec/lib/gitlab/manifest_import/project_creator_spec.rb
+++ b/spec/lib/gitlab/manifest_import/project_creator_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::ManifestImport::ProjectCreator, :postgresql do
+describe Gitlab::ManifestImport::ProjectCreator do
   let(:group) { create(:group) }
   let(:user) { create(:user) }
   let(:repository) do
diff --git a/spec/lib/gitlab/object_hierarchy_spec.rb b/spec/lib/gitlab/object_hierarchy_spec.rb
index 4154f9cbe800348191f7d088c69d17a2288177a0..737fd62a8553a2799fd33c32c9c1ce547e8b829f 100644
--- a/spec/lib/gitlab/object_hierarchy_spec.rb
+++ b/spec/lib/gitlab/object_hierarchy_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::ObjectHierarchy, :postgresql do
+describe Gitlab::ObjectHierarchy do
   let!(:parent) { create(:group) }
   let!(:child1) { create(:group, parent: parent) }
   let!(:child2) { create(:group, parent: child1) }
diff --git a/spec/lib/gitlab/performance_bar_spec.rb b/spec/lib/gitlab/performance_bar_spec.rb
index ee3c571c9c052c3a41ea6629b358d7f387245786..71c109db1f1db5999fd4a331ade8da3f3f95ffbf 100644
--- a/spec/lib/gitlab/performance_bar_spec.rb
+++ b/spec/lib/gitlab/performance_bar_spec.rb
@@ -96,7 +96,7 @@
       end
     end
 
-    context 'when allowed group is nested', :nested_groups do
+    context 'when allowed group is nested' do
       let!(:nested_my_group) { create(:group, parent: create(:group, path: 'my-org'), path: 'my-group') }
 
       before do
@@ -110,7 +110,7 @@
       end
     end
 
-    context 'when a nested group has the same path', :nested_groups do
+    context 'when a nested group has the same path' do
       before do
         create(:group, :nested, path: 'my-group').add_developer(user)
       end
diff --git a/spec/lib/gitlab/project_authorizations_spec.rb b/spec/lib/gitlab/project_authorizations_spec.rb
index bd0bc2c90443ea7178b67aa9f0b629c4fa721602..75e2d5e1319bce72db95d662001c1f7a31c0ba16 100644
--- a/spec/lib/gitlab/project_authorizations_spec.rb
+++ b/spec/lib/gitlab/project_authorizations_spec.rb
@@ -20,13 +20,7 @@ def map_access_levels(rows)
   end
 
   let(:authorizations) do
-    klass = if Group.supports_nested_objects?
-              Gitlab::ProjectAuthorizations::WithNestedGroups
-            else
-              Gitlab::ProjectAuthorizations::WithoutNestedGroups
-            end
-
-    klass.new(user).calculate
+    described_class.new(user).calculate
   end
 
   it 'returns the correct number of authorizations' do
@@ -46,28 +40,26 @@ def map_access_levels(rows)
     expect(mapping[group_project.id]).to eq(Gitlab::Access::DEVELOPER)
   end
 
-  if Group.supports_nested_objects?
-    context 'with nested groups' do
-      let!(:nested_group) { create(:group, parent: group) }
-      let!(:nested_project) { create(:project, namespace: nested_group) }
+  context 'with nested groups' do
+    let!(:nested_group) { create(:group, parent: group) }
+    let!(:nested_project) { create(:project, namespace: nested_group) }
 
-      it 'includes nested groups' do
-        expect(authorizations.pluck(:project_id)).to include(nested_project.id)
-      end
+    it 'includes nested groups' do
+      expect(authorizations.pluck(:project_id)).to include(nested_project.id)
+    end
 
-      it 'inherits access levels when the user is not a member of a nested group' do
-        mapping = map_access_levels(authorizations)
+    it 'inherits access levels when the user is not a member of a nested group' do
+      mapping = map_access_levels(authorizations)
 
-        expect(mapping[nested_project.id]).to eq(Gitlab::Access::DEVELOPER)
-      end
+      expect(mapping[nested_project.id]).to eq(Gitlab::Access::DEVELOPER)
+    end
 
-      it 'uses the greatest access level when a user is a member of a nested group' do
-        nested_group.add_maintainer(user)
+    it 'uses the greatest access level when a user is a member of a nested group' do
+      nested_group.add_maintainer(user)
 
-        mapping = map_access_levels(authorizations)
+      mapping = map_access_levels(authorizations)
 
-        expect(mapping[nested_project.id]).to eq(Gitlab::Access::MAINTAINER)
-      end
+      expect(mapping[nested_project.id]).to eq(Gitlab::Access::MAINTAINER)
     end
   end
 end
diff --git a/spec/lib/gitlab/sql/cte_spec.rb b/spec/lib/gitlab/sql/cte_spec.rb
index d6763c7b2e1d2e7bfc61679c5645d586903b19ce..5d2164491b5dcf99215c1baef10c84fc0bf86f29 100644
--- a/spec/lib/gitlab/sql/cte_spec.rb
+++ b/spec/lib/gitlab/sql/cte_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::SQL::CTE, :postgresql do
+describe Gitlab::SQL::CTE do
   describe '#to_arel' do
     it 'generates an Arel relation for the CTE body' do
       relation = User.where(id: 1)
diff --git a/spec/lib/gitlab/sql/recursive_cte_spec.rb b/spec/lib/gitlab/sql/recursive_cte_spec.rb
index 7fe39dd5a963d5bca2a222b3f1ce360ba1956a6f..407a4d8a2474c3b70d506d762f0b512e60a4e7a9 100644
--- a/spec/lib/gitlab/sql/recursive_cte_spec.rb
+++ b/spec/lib/gitlab/sql/recursive_cte_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe Gitlab::SQL::RecursiveCTE, :postgresql do
+describe Gitlab::SQL::RecursiveCTE do
   let(:cte) { described_class.new(:cte_name) }
 
   describe '#to_arel' do
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index 24ea059e871eb57d36832b95b5a060a3f4eddc9a..78b151631c1d4910c94a1759e3041d5e775d141a 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -146,7 +146,7 @@
       expect(described_class.belonging_to_parent_group_of_project(project.id)).to contain_exactly(runner)
     end
 
-    context 'with a parent group with a runner', :nested_groups do
+    context 'with a parent group with a runner' do
       let(:runner) { create(:ci_runner, :group, groups: [parent_group]) }
       let(:project) { create(:project, group: group) }
       let(:group) { create(:group, parent: parent_group) }
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index 52661178d769c3959083b42f3ecfe33a487fd507..8f2f1b200e4956b9037745597e230ff68054efa4 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -342,7 +342,7 @@
       end
     end
 
-    context 'when sub-group has configured kubernetes cluster', :nested_groups do
+    context 'when sub-group has configured kubernetes cluster' do
       let(:sub_group_cluster) { create(:cluster, :provided_by_gcp, :group) }
       let(:sub_group) { sub_group_cluster.group }
       let(:project) { create(:project, group: sub_group) }
diff --git a/spec/models/concerns/deployment_platform_spec.rb b/spec/models/concerns/deployment_platform_spec.rb
index c4f9f62ece51c5543d324ebb479cb36791e74604..27f535487c8be59a16d2234f77a6142268b08940 100644
--- a/spec/models/concerns/deployment_platform_spec.rb
+++ b/spec/models/concerns/deployment_platform_spec.rb
@@ -45,7 +45,7 @@
         is_expected.to eq(group_cluster.platform_kubernetes)
       end
 
-      context 'when child group has configured kubernetes cluster', :nested_groups do
+      context 'when child group has configured kubernetes cluster' do
         let(:child_group1) { create(:group, parent: group) }
         let!(:child_group1_cluster) { create(:cluster_for_group, groups: [child_group1]) }
 
diff --git a/spec/models/concerns/group_descendant_spec.rb b/spec/models/concerns/group_descendant_spec.rb
index 194caac3fce75b3f9805c7ad0d2a23c9a4b38879..192e884f3e883e3b00042266a5126da49c089ef0 100644
--- a/spec/models/concerns/group_descendant_spec.rb
+++ b/spec/models/concerns/group_descendant_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe GroupDescendant, :nested_groups do
+describe GroupDescendant do
   let(:parent) { create(:group) }
   let(:subgroup) { create(:group, parent: parent) }
   let(:subsub_group) { create(:group, parent: subgroup) }
@@ -84,7 +84,7 @@ def all_preloaded_groups(*groups)
       it 'tracks the exception when a parent was not preloaded' do
         expect(Gitlab::Sentry).to receive(:track_exception).and_call_original
 
-        expect { GroupDescendant.build_hierarchy([subsub_group]) }.to raise_error(ArgumentError)
+        expect { described_class.build_hierarchy([subsub_group]) }.to raise_error(ArgumentError)
       end
 
       it 'recovers if a parent was not reloaded by querying for the parent' do
@@ -93,7 +93,7 @@ def all_preloaded_groups(*groups)
         # this does not raise in production, so stubbing it here.
         allow(Gitlab::Sentry).to receive(:track_exception)
 
-        expect(GroupDescendant.build_hierarchy([subsub_group])).to eq(expected_hierarchy)
+        expect(described_class.build_hierarchy([subsub_group])).to eq(expected_hierarchy)
       end
 
       it 'raises an error if not all elements were preloaded' do
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index e19da41c3feb466e9eb0ee24e47c5755c1ed204f..39680c0e51afaf0375f687c1de93e9309d9bc52e 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -128,7 +128,7 @@ def build_issuable(milestone_id)
       expect(build_issuable(milestone.id).milestone_available?).to be_truthy
     end
 
-    it 'returns true with a milestone from the the parent of the issue project group', :nested_groups do
+    it 'returns true with a milestone from the the parent of the issue project group' do
       parent = create(:group)
       group.update(parent: parent)
       milestone = create(:milestone, group: parent)
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 90e0900445e1804c25f0e0cb91071e54fab62fe3..7e9bbf5a40798935ccfcdf40dc484c022f4e5d55 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -71,7 +71,7 @@
       end
     end
 
-    describe '#notification_settings', :nested_groups do
+    describe '#notification_settings' do
       let(:user) { create(:user) }
       let(:group) { create(:group) }
       let(:sub_group) { create(:group, parent_id: group.id) }
@@ -237,7 +237,7 @@
         it { is_expected.to match_array([private_group, internal_group, group]) }
       end
 
-      context 'when user is a member of private subgroup', :postgresql do
+      context 'when user is a member of private subgroup' do
         let!(:private_subgroup) { create(:group, :private, parent: private_group) }
 
         before do
@@ -416,7 +416,7 @@
       it { expect(group.last_owner?(@members[:owner])).to be_falsy }
     end
 
-    context 'with owners from a parent', :postgresql do
+    context 'with owners from a parent' do
       before do
         parent_group = create(:group)
         create(:group_member, :owner, group: parent_group)
@@ -524,7 +524,7 @@ def setup_group_members(group)
     it { expect(subject.parent).to be_kind_of(described_class) }
   end
 
-  describe '#members_with_parents', :nested_groups do
+  describe '#members_with_parents' do
     let!(:group) { create(:group, :nested) }
     let!(:maintainer) { group.parent.add_user(create(:user), GroupMember::MAINTAINER) }
     let!(:developer) { group.add_user(create(:user), GroupMember::DEVELOPER) }
@@ -535,7 +535,7 @@ def setup_group_members(group)
     end
   end
 
-  describe '#direct_and_indirect_members', :nested_groups do
+  describe '#direct_and_indirect_members' do
     let!(:group) { create(:group, :nested) }
     let!(:sub_group) { create(:group, parent: group) }
     let!(:maintainer) { group.parent.add_user(create(:user), GroupMember::MAINTAINER) }
@@ -552,7 +552,7 @@ def setup_group_members(group)
     end
   end
 
-  describe '#users_with_descendants', :nested_groups do
+  describe '#users_with_descendants' do
     let(:user_a) { create(:user) }
     let(:user_b) { create(:user) }
 
@@ -571,7 +571,7 @@ def setup_group_members(group)
     end
   end
 
-  describe '#direct_and_indirect_users', :nested_groups do
+  describe '#direct_and_indirect_users' do
     let(:user_a) { create(:user) }
     let(:user_b) { create(:user) }
     let(:user_c) { create(:user) }
@@ -601,7 +601,7 @@ def setup_group_members(group)
     end
   end
 
-  describe '#project_users_with_descendants', :nested_groups do
+  describe '#project_users_with_descendants' do
     let(:user_a) { create(:user) }
     let(:user_b) { create(:user) }
     let(:user_c) { create(:user) }
@@ -678,7 +678,7 @@ def setup_group_members(group)
       end
     end
 
-    context 'sub groups and projects', :nested_groups do
+    context 'sub groups and projects' do
       it 'enables two_factor_requirement for group member' do
         group.add_user(user, GroupMember::OWNER)
 
@@ -687,7 +687,7 @@ def setup_group_members(group)
         expect(user.reload.require_two_factor_authentication_from_group).to be_truthy
       end
 
-      context 'expanded group members', :nested_groups do
+      context 'expanded group members' do
         let(:indirect_user) { create(:user) }
 
         it 'enables two_factor_requirement for subgroup member' do
@@ -720,7 +720,7 @@ def setup_group_members(group)
           expect(user.reload.require_two_factor_authentication_from_group).to be_falsey
         end
 
-        it 'does not enable two_factor_requirement for subgroup child project member', :nested_groups do
+        it 'does not enable two_factor_requirement for subgroup child project member' do
           subgroup = create(:group, :nested, parent: group)
           project = create(:project, group: subgroup)
           project.add_maintainer(user)
@@ -820,7 +820,7 @@ def setup_group_members(group)
       it_behaves_like 'ref is protected'
     end
 
-    context 'when group has children', :postgresql do
+    context 'when group has children' do
       let(:group_child)      { create(:group, parent: group) }
       let(:group_child_2)    { create(:group, parent: group_child) }
       let(:group_child_3)    { create(:group, parent: group_child_2) }
@@ -843,7 +843,7 @@ def setup_group_members(group)
     end
   end
 
-  describe '#highest_group_member', :nested_groups do
+  describe '#highest_group_member' do
     let(:nested_group) { create(:group, parent: group) }
     let(:nested_group_2) { create(:group, parent: nested_group) }
     let(:user) { create(:user) }
@@ -932,7 +932,7 @@ def setup_group_members(group)
       it { is_expected.to eq(config) }
     end
 
-    context 'with parent groups', :nested_groups do
+    context 'with parent groups' do
       where(:instance_value, :parent_value, :group_value, :config) do
         # Instance level enabled
         true | nil   | nil    | { status: true, scope: :instance }
diff --git a/spec/models/members/group_member_spec.rb b/spec/models/members/group_member_spec.rb
index f227abd3daeac5cb92a19356ca87efeb18f4f2ad..ebb0bfca369b0d691e023be5d194c419cc78475b 100644
--- a/spec/models/members/group_member_spec.rb
+++ b/spec/models/members/group_member_spec.rb
@@ -69,7 +69,7 @@
     end
   end
 
-  context 'access levels', :nested_groups do
+  context 'access levels' do
     context 'with parent group' do
       it_behaves_like 'inherited access level as a member of entity' do
         let(:entity) { create(:group, parent: parent_entity) }
diff --git a/spec/models/members/project_member_spec.rb b/spec/models/members/project_member_spec.rb
index 497764b68254f2d4a4015edeca52003b2e357105..79c39b81196d4ee3f36f9c8e9211f94518b8d430 100644
--- a/spec/models/members/project_member_spec.rb
+++ b/spec/models/members/project_member_spec.rb
@@ -130,7 +130,7 @@
       end
     end
 
-    context 'with parent group and a subgroup', :nested_groups do
+    context 'with parent group and a subgroup' do
       it_behaves_like 'inherited access level as a member of entity' do
         let(:subgroup) { create(:group, parent: parent_entity) }
         let(:entity) { create(:project, group: subgroup) }
diff --git a/spec/models/namespace/root_storage_statistics_spec.rb b/spec/models/namespace/root_storage_statistics_spec.rb
index 3229a32234e57f7f51444e507977f2b7da379514..5341278db7c25aa8a0fd7e03f2fb382cb79b5159 100644
--- a/spec/models/namespace/root_storage_statistics_spec.rb
+++ b/spec/models/namespace/root_storage_statistics_spec.rb
@@ -56,7 +56,7 @@
 
     it_behaves_like 'data refresh'
 
-    context 'with subgroups', :nested_groups do
+    context 'with subgroups' do
       let(:subgroup1) { create(:group, parent: namespace)}
       let(:subgroup2) { create(:group, parent: subgroup1)}
 
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index f908f3504e003b7fdeaa9e89815528936aa0122e..2b9c3c43af98c0a27620e1c9e13abc0b8d625a0c 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -191,7 +191,7 @@
     end
   end
 
-  describe '#ancestors_upto', :nested_groups do
+  describe '#ancestors_upto' do
     let(:parent) { create(:group) }
     let(:child) { create(:group, parent: parent) }
     let(:child2) { create(:group, parent: child) }
@@ -271,7 +271,7 @@
         end
       end
 
-      context 'with subgroups', :nested_groups do
+      context 'with subgroups' do
         let(:parent) { create(:group, name: 'parent', path: 'parent') }
         let(:new_parent) { create(:group, name: 'new_parent', path: 'new_parent') }
         let(:child) { create(:group, name: 'child', path: 'child', parent: parent) }
@@ -475,7 +475,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#self_and_hierarchy', :nested_groups do
+  describe '#self_and_hierarchy' do
     let!(:group) { create(:group, path: 'git_lab') }
     let!(:nested_group) { create(:group, parent: group) }
     let!(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -490,7 +490,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#ancestors', :nested_groups do
+  describe '#ancestors' do
     let(:group) { create(:group) }
     let(:nested_group) { create(:group, parent: group) }
     let(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -504,7 +504,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#self_and_ancestors', :nested_groups do
+  describe '#self_and_ancestors' do
     let(:group) { create(:group) }
     let(:nested_group) { create(:group, parent: group) }
     let(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -518,7 +518,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#descendants', :nested_groups do
+  describe '#descendants' do
     let!(:group) { create(:group, path: 'git_lab') }
     let!(:nested_group) { create(:group, parent: group) }
     let!(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -534,7 +534,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#self_and_descendants', :nested_groups do
+  describe '#self_and_descendants' do
     let!(:group) { create(:group, path: 'git_lab') }
     let!(:nested_group) { create(:group, parent: group) }
     let!(:deep_nested_group) { create(:group, parent: nested_group) }
@@ -550,7 +550,7 @@ def project_rugged(project)
     end
   end
 
-  describe '#users_with_descendants', :nested_groups do
+  describe '#users_with_descendants' do
     let(:user_a) { create(:user) }
     let(:user_b) { create(:user) }
 
@@ -597,7 +597,7 @@ def project_rugged(project)
     it { expect(group.all_pipelines.to_a).to match_array([pipeline1, pipeline2]) }
   end
 
-  describe '#share_with_group_lock with subgroups', :nested_groups do
+  describe '#share_with_group_lock with subgroups' do
     context 'when creating a subgroup' do
       let(:subgroup) { create(:group, parent: root_group )}
 
@@ -738,7 +738,7 @@ def project_rugged(project)
   end
 
   describe '#root_ancestor' do
-    it 'returns the top most ancestor', :nested_groups do
+    it 'returns the top most ancestor' do
       root_group = create(:group)
       nested_group = create(:group, parent: root_group)
       deep_nested_group = create(:group, parent: nested_group)
diff --git a/spec/models/notification_recipient_spec.rb b/spec/models/notification_recipient_spec.rb
index 20278d81f6d8d0b4d3c02a3b70a7444c4d49693f..4122736c148c9358da45c77c5e9b2ff963daad36 100644
--- a/spec/models/notification_recipient_spec.rb
+++ b/spec/models/notification_recipient_spec.rb
@@ -49,7 +49,7 @@
   end
 
   context '#notification_setting' do
-    context 'for child groups', :nested_groups do
+    context 'for child groups' do
       let!(:moved_group) { create(:group) }
       let(:group) { create(:group) }
       let(:sub_group_1) { create(:group, parent: group) }
diff --git a/spec/models/postgresql/replication_slot_spec.rb b/spec/models/postgresql/replication_slot_spec.rb
index 95ae204a8a8280c1ac37c3cb9f207634d4c4b00e..d435fccc09a61e9f8be5eb4f192c656db9f3997a 100644
--- a/spec/models/postgresql/replication_slot_spec.rb
+++ b/spec/models/postgresql/replication_slot_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe Postgresql::ReplicationSlot, :postgresql do
+describe Postgresql::ReplicationSlot do
   describe '.in_use?' do
     it 'returns true when replication slots are present' do
       expect(described_class).to receive(:exists?).and_return(true)
diff --git a/spec/models/project_group_link_spec.rb b/spec/models/project_group_link_spec.rb
index dad5506900bada267e0ba0d8418bc6bb53e3f97f..cd997224122cc5437d832331bd5f618caba5ea48 100644
--- a/spec/models/project_group_link_spec.rb
+++ b/spec/models/project_group_link_spec.rb
@@ -25,7 +25,7 @@
       expect(project_group_link).not_to be_valid
     end
 
-    it "doesn't allow a project to be shared with an ancestor of the group it is in", :nested_groups do
+    it "doesn't allow a project to be shared with an ancestor of the group it is in" do
       project_group_link.group = parent_group
 
       expect(project_group_link).not_to be_valid
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 7d458324c2009f9a4bf629157b7bb146da054dcf..15a7d943009ccbd4dbdd6a2f1c4e0881ebc201a0 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2292,7 +2292,7 @@
     end
   end
 
-  describe '#ancestors_upto', :nested_groups do
+  describe '#ancestors_upto' do
     let(:parent) { create(:group) }
     let(:child) { create(:group, parent: parent) }
     let(:child2) { create(:group, parent: child) }
@@ -2331,7 +2331,7 @@
       it { is_expected.to eq(group) }
     end
 
-    context 'in a nested group', :nested_groups do
+    context 'in a nested group' do
       let(:root) { create(:group) }
       let(:child) { create(:group, parent: root) }
       let(:project) { create(:project, group: child) }
@@ -2479,7 +2479,7 @@
         expect(forked_project.in_fork_network_of?(project)).to be_truthy
       end
 
-      it 'is true for a fork of a fork', :postgresql do
+      it 'is true for a fork of a fork' do
         other_fork = fork_project(forked_project)
 
         expect(other_fork.in_fork_network_of?(project)).to be_truthy
@@ -3801,7 +3801,7 @@ def enable_lfs
         end
       end
 
-      context 'when enabled on root parent', :nested_groups do
+      context 'when enabled on root parent' do
         let(:parent_group) { create(:group, parent: create(:group, :auto_devops_enabled)) }
 
         context 'when auto devops instance enabled' do
@@ -3821,7 +3821,7 @@ def enable_lfs
         end
       end
 
-      context 'when disabled on root parent', :nested_groups do
+      context 'when disabled on root parent' do
         let(:parent_group) { create(:group, parent: create(:group, :auto_devops_disabled)) }
 
         context 'when auto devops instance enabled' do
@@ -4264,18 +4264,16 @@ def enable_lfs
       expect(project.badges.count).to eq 3
     end
 
-    if Group.supports_nested_objects?
-      context 'with nested_groups' do
-        let(:parent_group) { create(:group) }
+    context 'with nested_groups' do
+      let(:parent_group) { create(:group) }
 
-        before do
-          create_list(:group_badge, 2, group: project_group)
-          project_group.update(parent: parent_group)
-        end
+      before do
+        create_list(:group_badge, 2, group: project_group)
+        project_group.update(parent: parent_group)
+      end
 
-        it 'returns the project and the project nested groups badges' do
-          expect(project.badges.count).to eq 5
-        end
+      it 'returns the project and the project nested groups badges' do
+        expect(project.badges.count).to eq 5
       end
     end
   end
diff --git a/spec/models/todo_spec.rb b/spec/models/todo_spec.rb
index b5bf294790a2322d0c1116bd5424d9bc08c58e59..9aeef7c3b4b5382e4ec069b4f8439820c43d6071 100644
--- a/spec/models/todo_spec.rb
+++ b/spec/models/todo_spec.rb
@@ -262,11 +262,7 @@
       todo2 = create(:todo, group: child_group)
       todos = described_class.for_group_and_descendants(parent_group)
 
-      expect(todos).to include(todo1)
-
-      # Nested groups only work on PostgreSQL, so on MySQL todo2 won't be
-      # present.
-      expect(todos).to include(todo2) if Gitlab::Database.postgresql?
+      expect(todos).to contain_exactly(todo1, todo2)
     end
   end
 
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 2d20f8c78cce9ef7a0827883f6bb0b610eb045f1..35c335c5b5c4d7fd79d217a713f9162da5b26b39 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -985,7 +985,7 @@
     it { expect(user.namespaces).to contain_exactly(user.namespace, group) }
     it { expect(user.manageable_namespaces).to contain_exactly(user.namespace, group) }
 
-    context 'with child groups', :nested_groups do
+    context 'with child groups' do
       let!(:subgroup) { create(:group, parent: group) }
 
       describe '#manageable_namespaces' do
@@ -2082,11 +2082,7 @@
 
     subject { user.membership_groups }
 
-    if Group.supports_nested_objects?
-      it { is_expected.to contain_exactly parent_group, child_group }
-    else
-      it { is_expected.to contain_exactly parent_group }
-    end
+    it { is_expected.to contain_exactly parent_group, child_group }
   end
 
   describe '#authorizations_for_projects' do
@@ -2386,7 +2382,7 @@ def add_user(access)
       it_behaves_like :member
     end
 
-    context 'with subgroup with different owner for project runner', :nested_groups do
+    context 'with subgroup with different owner for project runner' do
       let(:group) { create(:group) }
       let(:another_user) { create(:user) }
       let(:subgroup) { create(:group, parent: group) }
@@ -2490,22 +2486,16 @@ def add_user(access)
         group.add_owner(user)
       end
 
-      if Group.supports_nested_objects?
-        it 'returns all groups' do
-          is_expected.to match_array [
-            group,
-            nested_group_1, nested_group_1_1,
-            nested_group_2, nested_group_2_1
-          ]
-        end
-      else
-        it 'returns the top-level groups' do
-          is_expected.to match_array [group]
-        end
+      it 'returns all groups' do
+        is_expected.to match_array [
+          group,
+          nested_group_1, nested_group_1_1,
+          nested_group_2, nested_group_2_1
+        ]
       end
     end
 
-    context 'user is member of the first child (internal node), branch 1', :nested_groups do
+    context 'user is member of the first child (internal node), branch 1' do
       before do
         nested_group_1.add_owner(user)
       end
@@ -2518,7 +2508,7 @@ def add_user(access)
       end
     end
 
-    context 'user is member of the first child (internal node), branch 2', :nested_groups do
+    context 'user is member of the first child (internal node), branch 2' do
       before do
         nested_group_2.add_owner(user)
       end
@@ -2531,7 +2521,7 @@ def add_user(access)
       end
     end
 
-    context 'user is member of the last child (leaf node)', :nested_groups do
+    context 'user is member of the last child (leaf node)' do
       before do
         nested_group_1_1.add_owner(user)
       end
@@ -2687,7 +2677,7 @@ def add_user(access)
       end
     end
 
-    context 'with 2FA requirement from expanded groups', :nested_groups do
+    context 'with 2FA requirement from expanded groups' do
       let!(:group1) { create :group, require_two_factor_authentication: true }
       let!(:group1a) { create :group, parent: group1 }
 
@@ -2702,7 +2692,7 @@ def add_user(access)
       end
     end
 
-    context 'with 2FA requirement on nested child group', :nested_groups do
+    context 'with 2FA requirement on nested child group' do
       let!(:group1) { create :group, require_two_factor_authentication: false }
       let!(:group1a) { create :group, require_two_factor_authentication: true, parent: group1 }
 
diff --git a/spec/policies/group_member_policy_spec.rb b/spec/policies/group_member_policy_spec.rb
index 7bd7184cffe54b5944e5edfb9457547579565997..a4f3301a06481fbf38b45f7a2397e8f8b796eeb6 100644
--- a/spec/policies/group_member_policy_spec.rb
+++ b/spec/policies/group_member_policy_spec.rb
@@ -58,7 +58,7 @@ def expect_disallowed(*permissions)
     end
   end
 
-  context 'with the group parent', :postgresql do
+  context 'with the group parent' do
     let(:current_user) { create :user }
     let(:subgroup) { create(:group, :private, parent: group)}
 
diff --git a/spec/policies/group_policy_spec.rb b/spec/policies/group_policy_spec.rb
index dc3675a7b9eeb0f87db91cddce2dd4688e1369fb..be55d94daec40b2d0580824c8af2e991842d8b3c 100644
--- a/spec/policies/group_policy_spec.rb
+++ b/spec/policies/group_policy_spec.rb
@@ -51,7 +51,7 @@
 
     it { expect_allowed(:read_label, :read_list) }
 
-    context 'in subgroups', :nested_groups do
+    context 'in subgroups' do
       let(:subgroup) { create(:group, :private, parent: group) }
       let(:project) { create(:project, namespace: subgroup) }
 
@@ -104,8 +104,6 @@
       end
 
       it 'allows every maintainer permission plus creating subgroups' do
-        allow(Group).to receive(:supports_nested_objects?).and_return(true)
-
         create_subgroup_permission = [:create_subgroup]
         updated_maintainer_permissions =
           maintainer_permissions + create_subgroup_permission
@@ -122,8 +120,6 @@
 
     context 'with subgroup_creation_level set to owner' do
       it 'allows every maintainer permission' do
-        allow(Group).to receive(:supports_nested_objects?).and_return(true)
-
         expect_allowed(*guest_permissions)
         expect_allowed(*reporter_permissions)
         expect_allowed(*developer_permissions)
@@ -137,8 +133,6 @@
     let(:current_user) { owner }
 
     it do
-      allow(Group).to receive(:supports_nested_objects?).and_return(true)
-
       expect_allowed(*guest_permissions)
       expect_allowed(*reporter_permissions)
       expect_allowed(*developer_permissions)
@@ -151,8 +145,6 @@
     let(:current_user) { admin }
 
     it do
-      allow(Group).to receive(:supports_nested_objects?).and_return(true)
-
       expect_allowed(*guest_permissions)
       expect_allowed(*reporter_permissions)
       expect_allowed(*developer_permissions)
@@ -161,52 +153,7 @@
     end
   end
 
-  describe 'when nested group support feature is disabled' do
-    before do
-      allow(Group).to receive(:supports_nested_objects?).and_return(false)
-    end
-
-    context 'admin' do
-      let(:current_user) { admin }
-
-      it 'allows every owner permission except creating subgroups' do
-        create_subgroup_permission = [:create_subgroup]
-        updated_owner_permissions =
-          owner_permissions - create_subgroup_permission
-
-        expect_disallowed(*create_subgroup_permission)
-        expect_allowed(*updated_owner_permissions)
-      end
-    end
-
-    context 'owner' do
-      let(:current_user) { owner }
-
-      it 'allows every owner permission except creating subgroups' do
-        create_subgroup_permission = [:create_subgroup]
-        updated_owner_permissions =
-          owner_permissions - create_subgroup_permission
-
-        expect_disallowed(*create_subgroup_permission)
-        expect_allowed(*updated_owner_permissions)
-      end
-    end
-
-    context 'maintainer' do
-      let(:current_user) { maintainer }
-
-      it 'allows every maintainer permission except creating subgroups' do
-        create_subgroup_permission = [:create_subgroup]
-        updated_maintainer_permissions =
-          maintainer_permissions - create_subgroup_permission
-
-        expect_disallowed(*create_subgroup_permission)
-        expect_allowed(*updated_maintainer_permissions)
-      end
-    end
-  end
-
-  describe 'private nested group use the highest access level from the group and inherited permissions', :nested_groups do
+  describe 'private nested group use the highest access level from the group and inherited permissions' do
     let(:nested_group) do
       create(:group, :private, :owner_subgroup_creation_only, parent: group)
     end
@@ -289,8 +236,6 @@
       let(:current_user) { owner }
 
       it do
-        allow(Group).to receive(:supports_nested_objects?).and_return(true)
-
         expect_allowed(*guest_permissions)
         expect_allowed(*reporter_permissions)
         expect_allowed(*developer_permissions)
diff --git a/spec/presenters/clusters/cluster_presenter_spec.rb b/spec/presenters/clusters/cluster_presenter_spec.rb
index 7054a70e2ed8827d9e43a12edabfcebf4220d0b2..6b988e2645b6a954f3a01350a41a4174bff0ed4d 100644
--- a/spec/presenters/clusters/cluster_presenter_spec.rb
+++ b/spec/presenters/clusters/cluster_presenter_spec.rb
@@ -43,7 +43,7 @@
       end
 
       shared_examples 'ancestor clusters' do
-        context 'ancestor clusters', :nested_groups do
+        context 'ancestor clusters' do
           let(:root_group) { create(:group, name: 'Root Group') }
           let(:parent) { create(:group, name: 'parent', parent: root_group) }
           let(:child) { create(:group, name: 'child', parent: parent) }
diff --git a/spec/requests/api/boards_spec.rb b/spec/requests/api/boards_spec.rb
index de79e8c4c5c5e6379908ff58ccc8ebada36a4365..0b9c0c2ebe93ff114f94a2e5e64462b34990a578 100644
--- a/spec/requests/api/boards_spec.rb
+++ b/spec/requests/api/boards_spec.rb
@@ -63,7 +63,7 @@
     end
   end
 
-  describe "POST /groups/:id/boards/lists", :nested_groups do
+  describe "POST /groups/:id/boards/lists" do
     set(:group) { create(:group) }
     set(:board_parent) { create(:group, parent: group ) }
     let(:url) { "/groups/#{board_parent.id}/boards/#{board.id}/lists" }
diff --git a/spec/requests/api/graphql/namespace/projects_spec.rb b/spec/requests/api/graphql/namespace/projects_spec.rb
index 63fa16c79cac56d64205200fbfb1da3b3e5607fd..815e9531ecf87c5c37e17be6c918696e26af00ce 100644
--- a/spec/requests/api/graphql/namespace/projects_spec.rb
+++ b/spec/requests/api/graphql/namespace/projects_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-describe 'getting projects', :nested_groups do
+describe 'getting projects' do
   include GraphqlHelpers
 
   let(:group)             { create(:group) }
diff --git a/spec/requests/api/group_labels_spec.rb b/spec/requests/api/group_labels_spec.rb
index 3769f8b78e49eb58986af641ddcd4c7db389ceec..fcea57d9df7386985acd19eda9f52d64fe869e5e 100644
--- a/spec/requests/api/group_labels_spec.rb
+++ b/spec/requests/api/group_labels_spec.rb
@@ -94,7 +94,7 @@
       expect(response).to have_gitlab_http_status(400)
     end
 
-    it "does not delete parent's group labels", :nested_groups do
+    it "does not delete parent's group labels" do
       subgroup = create(:group, parent: group)
       subgroup_label = create(:group_label, title: 'feature', group: subgroup)
 
@@ -127,7 +127,7 @@
       expect(json_response['description']).to eq('test')
     end
 
-    it "does not update parent's group label", :nested_groups do
+    it "does not update parent's group label" do
       subgroup = create(:group, parent: group)
       subgroup_label = create(:group_label, title: 'feature', group: subgroup)
 
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 52d926d5484b10bd1e1e01d6881494163de82e44..50f36141aed22d89f23a6d9c322846a768ee82ae 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -530,7 +530,7 @@ def response_project_ids(json_response, key)
         expect(json_response.length).to eq(2)
       end
 
-      it "returns projects including those in subgroups", :nested_groups do
+      it "returns projects including those in subgroups" do
         subgroup = create(:group, parent: group1)
         create(:project, group: subgroup)
         create(:project, group: subgroup)
@@ -642,7 +642,7 @@ def response_project_ids(json_response, key)
     end
   end
 
-  describe 'GET /groups/:id/subgroups', :nested_groups do
+  describe 'GET /groups/:id/subgroups' do
     let!(:subgroup1) { create(:group, parent: group1) }
     let!(:subgroup2) { create(:group, :private, parent: group1) }
     let!(:subgroup3) { create(:group, :private, parent: group2) }
@@ -786,7 +786,7 @@ def response_project_ids(json_response, key)
         expect(response).to have_gitlab_http_status(403)
       end
 
-      context 'as owner', :nested_groups do
+      context 'as owner' do
         before do
           group2.add_owner(user1)
         end
@@ -798,7 +798,7 @@ def response_project_ids(json_response, key)
         end
       end
 
-      context 'as maintainer', :nested_groups do
+      context 'as maintainer' do
         before do
           group2.add_maintainer(user1)
         end
@@ -825,7 +825,7 @@ def response_project_ids(json_response, key)
         expect(json_response["visibility"]).to eq(Gitlab::VisibilityLevel.string_level(Gitlab::CurrentSettings.current_application_settings.default_group_visibility))
       end
 
-      it "creates a nested group", :nested_groups do
+      it "creates a nested group" do
         parent = create(:group)
         parent.add_owner(user3)
         group = attributes_for(:group, { parent_id: parent.id })
diff --git a/spec/requests/api/issues/get_group_issues_spec.rb b/spec/requests/api/issues/get_group_issues_spec.rb
index 9a41d790945b8ef1075e142acf1eea6330fbad4d..5916bb1151668fd474075b1d3be4e08c2ac09c16 100644
--- a/spec/requests/api/issues/get_group_issues_spec.rb
+++ b/spec/requests/api/issues/get_group_issues_spec.rb
@@ -82,7 +82,7 @@
       end
     end
 
-    context 'when group has subgroups', :nested_groups do
+    context 'when group has subgroups' do
       let(:subgroup_1) { create(:group, parent: group) }
       let(:subgroup_2) { create(:group, parent: subgroup_1) }
 
diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb
index 55f38079b1f77104cc0eb5a20f694cd4a02abd83..26f6e7055287f56c9ca68a913392fb94dde77f91 100644
--- a/spec/requests/api/members_spec.rb
+++ b/spec/requests/api/members_spec.rb
@@ -99,7 +99,7 @@
     end
   end
 
-  describe 'GET /:source_type/:id/members/all', :nested_groups do
+  describe 'GET /:source_type/:id/members/all' do
     let(:nested_user) { create(:user) }
     let(:project_user) { create(:user) }
     let(:linked_group_user) { create(:user) }
@@ -238,7 +238,7 @@
       end
 
       context 'access levels' do
-        it 'does not create the member if group level is higher', :nested_groups do
+        it 'does not create the member if group level is higher' do
           parent = create(:group)
 
           group.update(parent: parent)
@@ -252,7 +252,7 @@
           expect(json_response['message']['access_level']).to eq(["should be greater than or equal to Developer inherited membership from group #{parent.name}"])
         end
 
-        it 'creates the member if group level is lower', :nested_groups do
+        it 'creates the member if group level is lower' do
           parent = create(:group)
 
           group.update(parent: parent)
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index ced853caab4790f005ba128561953f034e62c9ea..7a6f1cd548c73ed8145a5db6d8c31412c59730c3 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -723,7 +723,7 @@
 
     it_behaves_like 'merge requests list'
 
-    context 'when have subgroups', :nested_groups do
+    context 'when have subgroups' do
       let!(:group) { create(:group, :public) }
       let!(:subgroup) { create(:group, parent: group) }
       let!(:project) { create(:project, :public, :repository, creator: user, namespace: subgroup, only_allow_merge_if_pipeline_succeeds: false) }
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index fee300e9d7af61c1724c220a98566d4befa89716..5b3a2412afff9124985209c20ca3dab2c67e8694 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1357,7 +1357,7 @@
           end
         end
 
-        context 'nested group project', :nested_groups do
+        context 'nested group project' do
           let(:group) { create(:group) }
           let(:nested_group) { create(:group, parent: group) }
           let(:project2) { create(:project, group: nested_group) }
diff --git a/spec/requests/openid_connect_spec.rb b/spec/requests/openid_connect_spec.rb
index 86e41cbdf004970b401bdf9f6d38a409a48dc592..025568d8bead3b5dc2758771c7fd9355d8b95a6d 100644
--- a/spec/requests/openid_connect_spec.rb
+++ b/spec/requests/openid_connect_spec.rb
@@ -104,7 +104,7 @@ def request_user_info!
         expect(json_response).to match(id_token_claims.merge(user_info_claims))
 
         expected_groups = [group1.full_path, group3.full_path]
-        expected_groups << group4.full_path if Group.supports_nested_objects?
+        expected_groups << group4.full_path
         expect(json_response['groups']).to match_array(expected_groups)
       end
 
diff --git a/spec/serializers/group_child_entity_spec.rb b/spec/serializers/group_child_entity_spec.rb
index b58d95ccb43917e0cb9016e93854221461f6debe..00e2f9315493dfc683c70ffcf5eb5f1346b4aed1 100644
--- a/spec/serializers/group_child_entity_spec.rb
+++ b/spec/serializers/group_child_entity_spec.rb
@@ -62,7 +62,7 @@
     it_behaves_like 'group child json'
   end
 
-  describe 'for a group', :nested_groups do
+  describe 'for a group' do
     let(:description) { 'Awesomeness' }
     let(:object) do
       create(:group, :nested, :with_avatar,
diff --git a/spec/serializers/group_child_serializer_spec.rb b/spec/serializers/group_child_serializer_spec.rb
index 5541ada375098455b4e188c6feb8ea1f927834a2..c9e8535585b4afa0d5c0e89fcdb8ce3bbd7ab1c0 100644
--- a/spec/serializers/group_child_serializer_spec.rb
+++ b/spec/serializers/group_child_serializer_spec.rb
@@ -16,7 +16,7 @@
       end
     end
 
-    context 'with a hierarchy', :nested_groups do
+    context 'with a hierarchy' do
       let(:parent) { create(:group) }
 
       subject(:serializer) do
@@ -75,7 +75,7 @@
         expect(serializer.represent(build_list(:project, 2))).to be_kind_of(Array)
       end
 
-      context 'with a hierarchy', :nested_groups do
+      context 'with a hierarchy' do
         let(:parent) { create(:group) }
 
         subject(:serializer) do
diff --git a/spec/serializers/pipeline_serializer_spec.rb b/spec/serializers/pipeline_serializer_spec.rb
index 54e6abc2d3a4a09f54cfd2c43049c6796ce45768..7f9827329b3ae838fd49526712138d249b77dd43 100644
--- a/spec/serializers/pipeline_serializer_spec.rb
+++ b/spec/serializers/pipeline_serializer_spec.rb
@@ -126,7 +126,7 @@
         expect(subject.all? { |entry| entry[:merge_request].present? }).to be_truthy
       end
 
-      it 'preloads related merge requests', :postgresql do
+      it 'preloads related merge requests' do
         recorded = ActiveRecord::QueryRecorder.new { subject }
 
         expect(recorded.log)
diff --git a/spec/services/boards/issues/list_service_spec.rb b/spec/services/boards/issues/list_service_spec.rb
index 40878e24cb42adc429aa6e8bfdc05642bc0298e3..931b67b2950ff66a7412767ad130016a36baa2e3 100644
--- a/spec/services/boards/issues/list_service_spec.rb
+++ b/spec/services/boards/issues/list_service_spec.rb
@@ -112,7 +112,7 @@
         it_behaves_like 'issues list service'
       end
 
-      context 'and group is an ancestor', :nested_groups do
+      context 'and group is an ancestor' do
         let(:parent) { create(:group) }
         let(:group) { create(:group, parent: parent) }
         let!(:backlog) { create(:backlog_list, board: board) }
diff --git a/spec/services/groups/auto_devops_service_spec.rb b/spec/services/groups/auto_devops_service_spec.rb
index 7f8ab517cef9fdc87536e9e79c3283c046a582c5..7591b2f6f12da52527d365beadd0a2a5fd8a98a2 100644
--- a/spec/services/groups/auto_devops_service_spec.rb
+++ b/spec/services/groups/auto_devops_service_spec.rb
@@ -47,7 +47,7 @@
         expect(subgroup_1.auto_devops_enabled?).to eq(false)
       end
 
-      context 'when subgroups have projects', :nested_groups do
+      context 'when subgroups have projects' do
         it 'reflects changes on projects' do
           subgroup_1 = create(:group, parent: group)
           project_1 = create(:project, namespace: subgroup_1)
diff --git a/spec/services/groups/create_service_spec.rb b/spec/services/groups/create_service_spec.rb
index a7c954284853535372c6c9c51eb7d061e85147b0..0f9f20de58656342ab7e5d4fc5ad27acdae16081 100644
--- a/spec/services/groups/create_service_spec.rb
+++ b/spec/services/groups/create_service_spec.rb
@@ -44,7 +44,7 @@
     end
   end
 
-  describe 'creating subgroup', :nested_groups do
+  describe 'creating subgroup' do
     let!(:group) { create(:group) }
     let!(:service) { described_class.new(user, group_params.merge(parent_id: group.id)) }
 
@@ -54,47 +54,31 @@
       end
 
       it { is_expected.to be_persisted }
+    end
 
-      context 'when nested groups feature is disabled' do
-        it 'does not save group and returns an error' do
-          allow(Group).to receive(:supports_nested_objects?).and_return(false)
+    context 'as guest' do
+      it 'does not save group and returns an error' do
+        is_expected.not_to be_persisted
 
-          is_expected.not_to be_persisted
-          expect(subject.errors[:parent_id]).to include('You don’t have permission to create a subgroup in this group.')
-          expect(subject.parent_id).to be_nil
-        end
+        expect(subject.errors[:parent_id].first).to eq('You don’t have permission to create a subgroup in this group.')
+        expect(subject.parent_id).to be_nil
       end
     end
 
-    context 'when nested groups feature is enabled' do
+    context 'as owner' do
       before do
-        allow(Group).to receive(:supports_nested_objects?).and_return(true)
-      end
-
-      context 'as guest' do
-        it 'does not save group and returns an error' do
-          is_expected.not_to be_persisted
-
-          expect(subject.errors[:parent_id].first).to eq('You don’t have permission to create a subgroup in this group.')
-          expect(subject.parent_id).to be_nil
-        end
+        group.add_owner(user)
       end
 
-      context 'as owner' do
-        before do
-          group.add_owner(user)
-        end
+      it { is_expected.to be_persisted }
+    end
 
-        it { is_expected.to be_persisted }
+    context 'as maintainer' do
+      before do
+        group.add_maintainer(user)
       end
 
-      context 'as maintainer' do
-        before do
-          group.add_maintainer(user)
-        end
-
-        it { is_expected.to be_persisted }
-      end
+      it { is_expected.to be_persisted }
     end
   end
 
diff --git a/spec/services/groups/nested_create_service_spec.rb b/spec/services/groups/nested_create_service_spec.rb
index 13acf9e055bd6f1055ee04a3e13c9b32652c9fbc..b30392c1b12f64ae493a56394edf7deabee26a0c 100644
--- a/spec/services/groups/nested_create_service_spec.rb
+++ b/spec/services/groups/nested_create_service_spec.rb
@@ -28,35 +28,7 @@
     end
   end
 
-  describe 'without subgroups' do
-    let(:params) { { group_path: 'a-group' } }
-
-    before do
-      allow(Group).to receive(:supports_nested_objects?) { false }
-    end
-
-    it 'creates the group' do
-      group = service.execute
-
-      expect(group).to be_persisted
-    end
-
-    it 'returns the group if it already existed' do
-      existing_group = create(:group, path: 'a-group')
-
-      expect(service.execute).to eq(existing_group)
-    end
-
-    it 'raises an error when tring to create a subgroup' do
-      service = described_class.new(user, group_path: 'a-group/a-sub-group')
-
-      expect { service.execute }.to raise_error('Nested groups are not supported on MySQL')
-    end
-
-    it_behaves_like 'with a visibility level'
-  end
-
-  describe 'with subgroups', :nested_groups do
+  describe 'with subgroups' do
     let(:params) { { group_path: 'a-group/a-sub-group' } }
 
     describe "#execute" do
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index b5708ebba76a19687b24ab322bd4cb2b00a17094..f3af8cf5f3b3a5a49a93655f20e019321761d498 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -2,28 +2,13 @@
 
 require 'rails_helper'
 
-describe Groups::TransferService, :postgresql do
+describe Groups::TransferService do
   let(:user) { create(:user) }
   let(:new_parent_group) { create(:group, :public) }
   let!(:group_member) { create(:group_member, :owner, group: group, user: user) }
   let(:transfer_service) { described_class.new(group, user) }
 
   shared_examples 'ensuring allowed transfer for a group' do
-    context 'with other database than PostgreSQL' do
-      before do
-        allow(Group).to receive(:supports_nested_objects?).and_return(false)
-      end
-
-      it 'returns false' do
-        expect(transfer_service.execute(new_parent_group)).to be_falsy
-      end
-
-      it 'adds an error on group' do
-        transfer_service.execute(new_parent_group)
-        expect(transfer_service.error).to eq('Transfer failed: Database is not supported.')
-      end
-    end
-
     context "when there's an exception on GitLab shell directories" do
       let(:new_parent_group) { create(:group, :public) }
 
diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb
index d081c20f66965d4da9284c13ff6b8b09c285adb0..5d4576139f7c104916746e780e207df617b7ce38 100644
--- a/spec/services/groups/update_service_spec.rb
+++ b/spec/services/groups/update_service_spec.rb
@@ -133,7 +133,7 @@
     end
   end
 
-  context 'for a subgroup', :nested_groups do
+  context 'for a subgroup' do
     let(:subgroup) { create(:group, :private, parent: private_group) }
 
     context 'when the parent group share_with_group_lock is enabled' do
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 68b7913209636400f80c846fcff01dfaa03e26d0..3ae7c7b1c1db031c4e45c27307e23bb26e6d2975 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -116,7 +116,7 @@ def update_issue(opts)
         expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position)
       end
 
-      context 'when moving issue between issues from different projects', :nested_groups do
+      context 'when moving issue between issues from different projects' do
         let(:group) { create(:group) }
         let(:subgroup) { create(:group, parent: group) }
 
@@ -703,7 +703,7 @@ def update_issue(opts)
       end
     end
 
-    context 'when moving an issue ', :nested_groups do
+    context 'when moving an issue ' do
       it 'raises an error for invalid move ids within a project' do
         opts = { move_between_ids: [9000, 9999] }
 
diff --git a/spec/services/members/destroy_service_spec.rb b/spec/services/members/destroy_service_spec.rb
index 52f9a305d8f5601360f5965fd0391cfaa5e219f0..7dce7f035d4063a8cb73e2cb2d45825e6e3dde40 100644
--- a/spec/services/members/destroy_service_spec.rb
+++ b/spec/services/members/destroy_service_spec.rb
@@ -267,15 +267,15 @@
       expect(group.members.map(&:user)).not_to include(member_user)
     end
 
-    it 'removes the subgroup membership', :postgresql do
+    it 'removes the subgroup membership' do
       expect(subgroup.members.map(&:user)).not_to include(member_user)
     end
 
-    it 'removes the subsubgroup membership', :postgresql do
+    it 'removes the subsubgroup membership' do
       expect(subsubgroup.members.map(&:user)).not_to include(member_user)
     end
 
-    it 'removes the subsubproject membership', :postgresql do
+    it 'removes the subsubproject membership' do
       expect(subsubproject.members.map(&:user)).not_to include(member_user)
     end
 
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index c20de1fd0798bb81b114f93eab1f710929d67ffa..1dcade1de0d7cad220316e7ebee41172fb3979b2 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -111,7 +111,7 @@
       should_email(participant)
     end
 
-    context 'for subgroups', :nested_groups do
+    context 'for subgroups' do
       before do
         build_group(project)
       end
@@ -337,7 +337,7 @@
 
         it_behaves_like 'new note notifications'
 
-        context 'which is a subgroup', :nested_groups do
+        context 'which is a subgroup' do
           let!(:parent) { create(:group) }
           let!(:group) { create(:group, parent: parent) }
 
@@ -388,7 +388,7 @@
         should_email(admin)
       end
 
-      context 'on project that belongs to subgroup', :nested_groups do
+      context 'on project that belongs to subgroup' do
         let(:group_reporter) { create(:user) }
         let(:group_guest) { create(:user) }
         let(:parent_group) { create(:group) }
@@ -458,7 +458,7 @@
           should_not_email_nested_group_user(@pg_disabled)
         end
 
-        it 'notifies parent group members with mention level', :nested_groups do
+        it 'notifies parent group members with mention level' do
           note = create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: "@#{@pg_mention.username}")
 
           notification.new_note(note)
@@ -2410,52 +2410,40 @@ def build_group(project, visibility: :public)
     group
   end
 
-  # Creates a nested group only if supported
-  # to avoid errors on MySQL
   def create_nested_group(visibility)
-    if Group.supports_nested_objects?
-      parent_group = create(:group, visibility)
-      child_group = create(:group, visibility, parent: parent_group)
+    parent_group = create(:group, visibility)
+    child_group = create(:group, visibility, parent: parent_group)
 
-      # Parent group member: global=disabled, parent_group=watch, child_group=global
-      @pg_watcher ||= create_user_with_notification(:watch, 'parent_group_watcher', parent_group)
-      @pg_watcher.notification_settings_for(nil).disabled!
+    # Parent group member: global=disabled, parent_group=watch, child_group=global
+    @pg_watcher ||= create_user_with_notification(:watch, 'parent_group_watcher', parent_group)
+    @pg_watcher.notification_settings_for(nil).disabled!
 
-      # Parent group member: global=global, parent_group=disabled, child_group=global
-      @pg_disabled ||= create_user_with_notification(:disabled, 'parent_group_disabled', parent_group)
-      @pg_disabled.notification_settings_for(nil).global!
+    # Parent group member: global=global, parent_group=disabled, child_group=global
+    @pg_disabled ||= create_user_with_notification(:disabled, 'parent_group_disabled', parent_group)
+    @pg_disabled.notification_settings_for(nil).global!
 
-      # Parent group member: global=global, parent_group=mention, child_group=global
-      @pg_mention ||= create_user_with_notification(:mention, 'parent_group_mention', parent_group)
-      @pg_mention.notification_settings_for(nil).global!
+    # Parent group member: global=global, parent_group=mention, child_group=global
+    @pg_mention ||= create_user_with_notification(:mention, 'parent_group_mention', parent_group)
+    @pg_mention.notification_settings_for(nil).global!
 
-      # Parent group member: global=global, parent_group=participating, child_group=global
-      @pg_participant ||= create_user_with_notification(:participating, 'parent_group_participant', parent_group)
-      @pg_mention.notification_settings_for(nil).global!
+    # Parent group member: global=global, parent_group=participating, child_group=global
+    @pg_participant ||= create_user_with_notification(:participating, 'parent_group_participant', parent_group)
+    @pg_mention.notification_settings_for(nil).global!
 
-      child_group
-    else
-      create(:group, visibility)
-    end
+    child_group
   end
 
   def add_member_for_parent_group(user, project)
-    return unless Group.supports_nested_objects?
-
     project.reload
 
     project.group.parent.add_maintainer(user)
   end
 
   def should_email_nested_group_user(user, times: 1, recipients: email_recipients)
-    return unless Group.supports_nested_objects?
-
     should_email(user, times: 1, recipients: email_recipients)
   end
 
   def should_not_email_nested_group_user(user, recipients: email_recipients)
-    return unless Group.supports_nested_objects?
-
     should_not_email(user, recipients: email_recipients)
   end
 
diff --git a/spec/services/projects/autocomplete_service_spec.rb b/spec/services/projects/autocomplete_service_spec.rb
index 2f70c8ea94d74bf7c4749ef21509caf300fe4e96..b625653bc77e8d661e006a95d8911211004d1799 100644
--- a/spec/services/projects/autocomplete_service_spec.rb
+++ b/spec/services/projects/autocomplete_service_spec.rb
@@ -118,7 +118,7 @@
       expect(milestone_titles).to eq([group_milestone2.title, group_milestone1.title])
     end
 
-    context 'with nested groups', :nested_groups do
+    context 'with nested groups' do
       let(:subgroup) { create(:group, :public, parent: group) }
       let!(:subgroup_milestone) { create(:milestone, group: subgroup) }
 
diff --git a/spec/services/todos/destroy/entity_leave_service_spec.rb b/spec/services/todos/destroy/entity_leave_service_spec.rb
index 2a553e18807896355ce1e3c28abdeb8777a4d127..ce809bbf6c5e5324968a8f3deed609e9edb1b7a6 100644
--- a/spec/services/todos/destroy/entity_leave_service_spec.rb
+++ b/spec/services/todos/destroy/entity_leave_service_spec.rb
@@ -176,7 +176,7 @@
           end
         end
 
-        context 'with nested groups', :nested_groups do
+        context 'with nested groups' do
           let(:subgroup) { create(:group, :private, parent: group) }
           let(:subgroup2) { create(:group, :private, parent: group) }
           let(:subproject) { create(:project, group: subgroup) }
diff --git a/spec/services/todos/destroy/group_private_service_spec.rb b/spec/services/todos/destroy/group_private_service_spec.rb
index a1798686d7c1a723d50640409de82ec6b532838e..7dd495847b3af419bec06c379f0d49af91203bde 100644
--- a/spec/services/todos/destroy/group_private_service_spec.rb
+++ b/spec/services/todos/destroy/group_private_service_spec.rb
@@ -35,7 +35,7 @@
         expect(project_member.todos).to match_array([todo_project_member])
       end
 
-      context 'with nested groups', :nested_groups do
+      context 'with nested groups' do
         let(:parent_group) { create(:group) }
         let(:subgroup)     { create(:group, :private, parent: group) }
         let(:subproject)   { create(:project, group: subgroup) }
diff --git a/spec/services/users/refresh_authorized_projects_service_spec.rb b/spec/services/users/refresh_authorized_projects_service_spec.rb
index 0287a24808d2e6901756dd88fc8279120c9f8c57..f5a914bb482b04672b742d68ef8a9bf724447753 100644
--- a/spec/services/users/refresh_authorized_projects_service_spec.rb
+++ b/spec/services/users/refresh_authorized_projects_service_spec.rb
@@ -135,7 +135,7 @@
       end
     end
 
-    context 'projects of subgroups of groups the user is a member of', :nested_groups do
+    context 'projects of subgroups of groups the user is a member of' do
       let(:group) { create(:group) }
       let(:nested_group) { create(:group, parent: group) }
       let!(:other_project) { create(:project, group: nested_group) }
@@ -163,7 +163,7 @@
       end
     end
 
-    context 'projects shared with subgroups of groups the user is a member of', :nested_groups do
+    context 'projects shared with subgroups of groups the user is a member of' do
       let(:group) { create(:group) }
       let(:nested_group) { create(:group, parent: group) }
       let(:other_project) { create(:project) }
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index cfecdb06f33021e7323bf2ec58508351acb0a854..0255e15054318cfba72342afc1e26ff19819080a 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -260,14 +260,6 @@
     Gitlab::CurrentSettings.clear_in_memory_application_settings!
   end
 
-  config.around(:each, :nested_groups) do |example|
-    example.run if Group.supports_nested_objects?
-  end
-
-  config.around(:each, :postgresql) do |example|
-    example.run if Gitlab::Database.postgresql?
-  end
-
   # This makes sure the `ApplicationController#can?` method is stubbed with the
   # original implementation for all view specs.
   config.before(:each, type: :view) do
diff --git a/spec/support/controllers/githubish_import_controller_shared_examples.rb b/spec/support/controllers/githubish_import_controller_shared_examples.rb
index 5bb1269a19df29ba496e5167690e9841c76139d8..5fd303e73364de36a3953c8c6b258135f811c4e0 100644
--- a/spec/support/controllers/githubish_import_controller_shared_examples.rb
+++ b/spec/support/controllers/githubish_import_controller_shared_examples.rb
@@ -321,7 +321,7 @@ def assign_session_token(provider)
       end
     end
 
-    context 'user has chosen an existing nested namespace and name for the project', :postgresql do
+    context 'user has chosen an existing nested namespace and name for the project' do
       let(:parent_namespace) { create(:group, name: 'foo') }
       let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) }
       let(:test_name) { 'test_name' }
@@ -340,7 +340,7 @@ def assign_session_token(provider)
       end
     end
 
-    context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do
+    context 'user has chosen a non-existent nested namespaces and name for the project' do
       let(:test_name) { 'test_name' }
 
       it 'takes the selected namespace and name' do
@@ -371,7 +371,7 @@ def assign_session_token(provider)
       end
     end
 
-    context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do
+    context 'user has chosen existent and non-existent nested namespaces and name for the project' do
       let(:test_name) { 'test_name' }
       let!(:parent_namespace) { create(:group, name: 'foo') }
 
diff --git a/spec/support/shared_contexts/policies/group_policy_shared_context.rb b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
index 74389c4d82bcc38c85b50c909f9ed3a6e84c6c24..c11725c63d23e195725a4281d92b00d31f7098ea 100644
--- a/spec/support/shared_contexts/policies/group_policy_shared_context.rb
+++ b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
@@ -31,7 +31,7 @@
       :admin_group_member,
       :change_visibility_level,
       :set_note_created_at,
-      (Gitlab::Database.postgresql? ? :create_subgroup : nil)
+      :create_subgroup
     ].compact
   end
 
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
index 29e15960fb806104771d89044f92dfc35c3463dd..47804411b9d2de4aa04c66958dc292e78ab9c20e 100644
--- a/spec/views/groups/edit.html.haml_spec.rb
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -35,7 +35,7 @@
       it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false }
     end
 
-    context 'for a subgroup', :nested_groups do
+    context 'for a subgroup' do
       let!(:subgroup) { create(:group, parent: root_group) }
       let(:sub_owner) { create(:user) }
       let(:test_group) { subgroup }
diff --git a/spec/views/layouts/header/_new_dropdown.haml_spec.rb b/spec/views/layouts/header/_new_dropdown.haml_spec.rb
index 2e19d0cec2609cc6889ad70b233dc4c3a2cba747..26e429ac5d039143f145c76a4818113bf2bc54e1 100644
--- a/spec/views/layouts/header/_new_dropdown.haml_spec.rb
+++ b/spec/views/layouts/header/_new_dropdown.haml_spec.rb
@@ -28,7 +28,7 @@
         )
       end
 
-      it 'has a "New subgroup" link', :nested_groups do
+      it 'has a "New subgroup" link' do
         render
 
         expect(rendered).to have_link(