summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20260626025705_add_search_vector_to_page_translations.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/db/migrate/20260626025705_add_search_vector_to_page_translations.rb b/db/migrate/20260626025705_add_search_vector_to_page_translations.rb
new file mode 100644
index 0000000..0747637
--- /dev/null
+++ b/db/migrate/20260626025705_add_search_vector_to_page_translations.rb
@@ -0,0 +1,47 @@
1class AddSearchVectorToPageTranslations < ActiveRecord::Migration[7.2]
2 def up
3 add_column :page_translations, :search_vector, :tsvector
4
5 execute <<~SQL
6 UPDATE page_translations
7 SET search_vector = to_tsvector(
8 'simple',
9 coalesce(title, '') || ' ' ||
10 coalesce(abstract, '') || ' ' ||
11 coalesce(body, '')
12 )
13 SQL
14
15 add_index :page_translations, :search_vector,
16 using: :gin,
17 name: 'index_page_translations_on_search_vector'
18
19 execute <<~SQL
20 CREATE OR REPLACE FUNCTION page_translations_search_vector_update()
21 RETURNS trigger AS $$
22 BEGIN
23 NEW.search_vector := to_tsvector(
24 'simple',
25 coalesce(NEW.title, '') || ' ' ||
26 coalesce(NEW.abstract, '') || ' ' ||
27 coalesce(NEW.body, '')
28 );
29 RETURN NEW;
30 END;
31 $$ LANGUAGE plpgsql;
32
33 CREATE TRIGGER page_translations_search_vector_trigger
34 BEFORE INSERT OR UPDATE ON page_translations
35 FOR EACH ROW EXECUTE PROCEDURE page_translations_search_vector_update();
36 SQL
37 end
38
39 def down
40 execute <<~SQL
41 DROP TRIGGER IF EXISTS page_translations_search_vector_trigger ON page_translations;
42 DROP FUNCTION IF EXISTS page_translations_search_vector_update();
43 SQL
44 remove_index :page_translations, name: 'index_page_translations_on_search_vector'
45 remove_column :page_translations, :search_vector
46 end
47end