adding some indexes that are needed for large installations -- beware the speed impac...
[Evergreen.git] / Open-ILS / src / sql / Pg / 030.schema.metabib.sql
1 /*
2  * Copyright (C) 2004-2008  Georgia Public Library Service
3  * Copyright (C) 2007-2008  Equinox Software, Inc.
4  * Mike Rylander <miker@esilibrary.com> 
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17
18 DROP SCHEMA metabib CASCADE;
19
20 BEGIN;
21 CREATE SCHEMA metabib;
22
23 CREATE TABLE metabib.metarecord (
24         id              BIGSERIAL       PRIMARY KEY,
25         fingerprint     TEXT            NOT NULL,
26         master_record   BIGINT,
27         mods            TEXT
28 );
29 CREATE INDEX metabib_metarecord_master_record_idx ON metabib.metarecord (master_record);
30 CREATE INDEX metabib_metarecord_fingerprint_idx ON metabib.metarecord (fingerprint);
31
32 CREATE TABLE metabib.title_field_entry (
33         id              BIGSERIAL       PRIMARY KEY,
34         source          BIGINT          NOT NULL,
35         field           INT             NOT NULL,
36         value           TEXT            NOT NULL,
37         index_vector    tsvector        NOT NULL
38 );
39 CREATE TRIGGER metabib_title_field_entry_fti_trigger
40         BEFORE UPDATE OR INSERT ON metabib.title_field_entry
41         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('title');
42
43 CREATE INDEX metabib_title_field_entry_index_vector_idx ON metabib.title_field_entry USING GIST (index_vector);
44
45
46 CREATE TABLE metabib.author_field_entry (
47         id              BIGSERIAL       PRIMARY KEY,
48         source          BIGINT          NOT NULL,
49         field           INT             NOT NULL,
50         value           TEXT            NOT NULL,
51         index_vector    tsvector        NOT NULL
52 );
53 CREATE TRIGGER metabib_author_field_entry_fti_trigger
54         BEFORE UPDATE OR INSERT ON metabib.author_field_entry
55         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('author');
56
57 CREATE INDEX metabib_author_field_entry_index_vector_idx ON metabib.author_field_entry USING GIST (index_vector);
58
59
60 CREATE TABLE metabib.subject_field_entry (
61         id              BIGSERIAL       PRIMARY KEY,
62         source          BIGINT          NOT NULL,
63         field           INT             NOT NULL,
64         value           TEXT            NOT NULL,
65         index_vector    tsvector        NOT NULL
66 );
67 CREATE TRIGGER metabib_subject_field_entry_fti_trigger
68         BEFORE UPDATE OR INSERT ON metabib.subject_field_entry
69         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('subject');
70
71 CREATE INDEX metabib_subject_field_entry_index_vector_idx ON metabib.subject_field_entry USING GIST (index_vector);
72
73
74 CREATE TABLE metabib.keyword_field_entry (
75         id              BIGSERIAL       PRIMARY KEY,
76         source          BIGINT          NOT NULL,
77         field           INT             NOT NULL,
78         value           TEXT            NOT NULL,
79         index_vector    tsvector        NOT NULL
80 );
81 CREATE TRIGGER metabib_keyword_field_entry_fti_trigger
82         BEFORE UPDATE OR INSERT ON metabib.keyword_field_entry
83         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('keyword');
84
85 CREATE INDEX metabib_keyword_field_entry_index_vector_idx ON metabib.keyword_field_entry USING GIST (index_vector);
86
87
88 CREATE TABLE metabib.series_field_entry (
89         id              BIGSERIAL       PRIMARY KEY,
90         source          BIGINT          NOT NULL,
91         field           INT             NOT NULL,
92         value           TEXT            NOT NULL,
93         index_vector    tsvector        NOT NULL
94 );
95 CREATE TRIGGER metabib_series_field_entry_fti_trigger
96         BEFORE UPDATE OR INSERT ON metabib.series_field_entry
97         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('series');
98
99 CREATE INDEX metabib_series_field_entry_index_vector_idx ON metabib.series_field_entry USING GIST (index_vector);
100
101
102 CREATE TABLE metabib.rec_descriptor (
103         id              BIGSERIAL PRIMARY KEY,
104         record          BIGINT,
105         item_type       TEXT,
106         item_form       TEXT,
107         bib_level       TEXT,
108         control_type    TEXT,
109         char_encoding   TEXT,
110         enc_level       TEXT,
111         audience        TEXT,
112         lit_form        TEXT,
113         type_mat        TEXT,
114         cat_form        TEXT,
115         pub_status      TEXT,
116         item_lang       TEXT,
117         vr_format       TEXT
118 );
119 CREATE INDEX metabib_rec_descriptor_record_idx ON metabib.rec_descriptor (record);
120 /* We may not need these...
121
122 CREATE INDEX metabib_rec_descriptor_item_type_idx ON metabib.rec_descriptor (item_type);
123 CREATE INDEX metabib_rec_descriptor_item_form_idx ON metabib.rec_descriptor (item_form);
124 CREATE INDEX metabib_rec_descriptor_bib_level_idx ON metabib.rec_descriptor (bib_level);
125 CREATE INDEX metabib_rec_descriptor_control_type_idx ON metabib.rec_descriptor (control_type);
126 CREATE INDEX metabib_rec_descriptor_char_encoding_idx ON metabib.rec_descriptor (char_encoding);
127 CREATE INDEX metabib_rec_descriptor_enc_level_idx ON metabib.rec_descriptor (enc_level);
128 CREATE INDEX metabib_rec_descriptor_audience_idx ON metabib.rec_descriptor (audience);
129 CREATE INDEX metabib_rec_descriptor_lit_form_idx ON metabib.rec_descriptor (lit_form);
130 CREATE INDEX metabib_rec_descriptor_cat_form_idx ON metabib.rec_descriptor (cat_form);
131 CREATE INDEX metabib_rec_descriptor_pub_status_idx ON metabib.rec_descriptor (pub_status);
132 CREATE INDEX metabib_rec_descriptor_item_lang_idx ON metabib.rec_descriptor (item_lang);
133 CREATE INDEX metabib_rec_descriptor_vr_format_idx ON metabib.rec_descriptor (vr_format);
134
135 */
136
137
138 CREATE TABLE metabib.full_rec (
139         id              BIGSERIAL       PRIMARY KEY,
140         record          BIGINT          NOT NULL,
141         tag             CHAR(3)         NOT NULL,
142         ind1            TEXT,
143         ind2            TEXT,
144         subfield        TEXT,
145         value           TEXT            NOT NULL,
146         index_vector    tsvector        NOT NULL
147 );
148 CREATE INDEX metabib_full_rec_tag_subfield_idx ON metabib.full_rec (tag,subfield);
149 CREATE INDEX metabib_full_rec_value_idx ON metabib.full_rec (value);
150 CREATE INDEX metabib_full_rec_record_idx ON metabib.full_rec (record);
151 CREATE TRIGGER metabib_full_rec_fti_trigger
152         BEFORE UPDATE OR INSERT ON metabib.full_rec
153         FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('default');
154
155 CREATE INDEX metabib_full_rec_index_vector_idx ON metabib.full_rec USING GIST (index_vector);
156
157
158 CREATE TABLE metabib.metarecord_source_map (
159         id              BIGSERIAL       PRIMARY KEY,
160         metarecord      BIGINT          NOT NULL,
161         source          BIGINT          NOT NULL
162 );
163 CREATE INDEX metabib_metarecord_source_map_metarecord_idx ON metabib.metarecord_source_map (metarecord);
164 CREATE INDEX metabib_metarecord_source_map_source_record_idx ON metabib.metarecord_source_map (source);
165
166
167 COMMIT;