diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 1232297db1bb5b40db456594c51bc0c0f63dc91a..d1885b5ae08c70c75730a6fa440f27932bce932b 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -334,8 +334,7 @@ def by_search(items) return items if items.is_a?(ActiveRecord::NullRelation) if use_cte_for_search? - cte = Gitlab::SQL::RecursiveCTE.new(klass.table_name) - cte << items + cte = Gitlab::SQL::CTE.new(klass.table_name, items) items = klass.with(cte.to_arel).from(klass.table_name) end diff --git a/changelogs/unreleased/331089-issue-search-materialized-cte.yml b/changelogs/unreleased/331089-issue-search-materialized-cte.yml new file mode 100644 index 0000000000000000000000000000000000000000..0b9a1a3490b747bf3defcf56bb81cb9a29708c54 --- /dev/null +++ b/changelogs/unreleased/331089-issue-search-materialized-cte.yml @@ -0,0 +1,5 @@ +--- +title: Fix issuable search optimization in PG12 +merge_request: 61880 +author: +type: fixed diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb index a2aac857bf5f0cf7b56b6a16b53eedce00ca05ba..27466ab563f596524a283b9257b77126ab4efc5c 100644 --- a/spec/finders/issues_finder_spec.rb +++ b/spec/finders/issues_finder_spec.rb @@ -1178,6 +1178,7 @@ it 'returns true' do expect(finder.use_cte_for_search?).to be_truthy + expect(finder.execute.to_sql).to match(/^WITH "issues" AS #{Gitlab::Database::AsWithMaterialized.materialized_if_supported}/) end end @@ -1186,6 +1187,7 @@ it 'returns true' do expect(finder.use_cte_for_search?).to be_truthy + expect(finder.execute.to_sql).to match(/^WITH "issues" AS #{Gitlab::Database::AsWithMaterialized.materialized_if_supported}/) end end end