]> git.openstreetmap.org Git - osqa.git/blob - forum_modules/pgfulltext/pg_fts_install.sql
initial import
[osqa.git] / forum_modules / pgfulltext / pg_fts_install.sql
1   CREATE OR REPLACE FUNCTION public.create_plpgsql_language ()
2       RETURNS TEXT
3       AS $$
4           CREATE LANGUAGE plpgsql;
5           SELECT 'language plpgsql created'::TEXT;
6       $$
7   LANGUAGE 'sql';
8
9   SELECT CASE WHEN
10         (SELECT true::BOOLEAN
11            FROM pg_language
12           WHERE lanname='plpgsql')
13       THEN
14         (SELECT 'language already installed'::TEXT)
15       ELSE
16         (SELECT public.create_plpgsql_language())
17       END;
18
19   DROP FUNCTION public.create_plpgsql_language ();
20
21   CREATE OR REPLACE FUNCTION set_question_tsv() RETURNS TRIGGER AS $$
22   begin
23     new.tsv :=
24        setweight(to_tsvector('english', coalesce(new.tagnames,'')), 'A') ||
25        setweight(to_tsvector('english', coalesce(new.title,'')), 'B') ||
26        setweight(to_tsvector('english', coalesce(new.html,'')), 'C');
27     RETURN new;
28   end
29   $$ LANGUAGE plpgsql;
30
31   CREATE OR REPLACE FUNCTION public.create_tsv_question_column ()
32       RETURNS TEXT
33       AS $$
34           ALTER TABLE question ADD COLUMN tsv tsvector;
35           
36           CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
37                 ON question FOR EACH ROW EXECUTE PROCEDURE set_question_tsv();
38
39               CREATE INDEX question_tsv ON question USING gin(tsv);
40
41           SELECT 'tsv column created'::TEXT;
42       $$
43   LANGUAGE 'sql';
44
45   SELECT CASE WHEN
46      (SELECT true::BOOLEAN FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'question') AND attname = 'tsv')
47   THEN
48      (SELECT 'Tsv column already exists'::TEXT)
49   ELSE
50      (SELECT public.create_tsv_question_column())
51
52   END;
53
54   DROP FUNCTION public.create_tsv_question_column ();