]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/011.schema.authority.sql
89e87e1c4f0c6af855b70e456f6826debdcf1822
[Evergreen.git] / Open-ILS / src / sql / Pg / 011.schema.authority.sql
1 DROP SCHEMA authority CASCADE;
2
3 BEGIN;
4 CREATE SCHEMA authority;
5
6 CREATE TABLE authority.record_entry (
7         id              BIGSERIAL       PRIMARY KEY,
8         arn_source      TEXT            NOT NULL DEFAULT 'AUTOGEN',
9         arn_value       TEXT            NOT NULL,
10         creator         INT             NOT NULL DEFAULT 1,
11         editor          INT             NOT NULL DEFAULT 1,
12         create_date     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now(),
13         edit_date       TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now(),
14         active          BOOL            NOT NULL DEFAULT TRUE,
15         deleted         BOOL            NOT NULL DEFAULT FALSE,
16         source          INT,
17         marc            TEXT            NOT NULL,
18         last_xact_id    TEXT            NOT NULL
19 );
20 CREATE INDEX authority_record_entry_creator_idx ON authority.record_entry ( creator );
21 CREATE INDEX authority_record_entry_editor_idx ON authority.record_entry ( editor );
22 CREATE UNIQUE INDEX authority_record_unique_tcn ON authority.record_entry (arn_source,arn_value) WHERE deleted IS FALSE;
23
24 CREATE TABLE authority.record_note (
25         id              BIGSERIAL       PRIMARY KEY,
26         record          BIGINT          NOT NULL REFERENCES authority.record_entry (id),
27         value           TEXT            NOT NULL,
28         creator         INT             NOT NULL DEFAULT 1,
29         editor          INT             NOT NULL DEFAULT 1,
30         create_date     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now(),
31         edit_date       TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now()
32 );
33 CREATE INDEX authority_record_note_record_idx ON authority.record_note ( record );
34 CREATE INDEX authority_record_note_creator_idx ON authority.record_note ( creator );
35 CREATE INDEX authority_record_note_editor_idx ON authority.record_note ( editor );
36
37 CREATE TABLE authority.rec_descriptor (
38         id              BIGSERIAL PRIMARY KEY,
39         record          BIGINT,
40         record_status   TEXT,
41         char_encoding   TEXT
42 );
43 CREATE INDEX authority_rec_descriptor_record_idx ON authority.rec_descriptor (record);
44
45 CREATE TABLE authority.full_rec (
46         id              BIGSERIAL       PRIMARY KEY,
47         record          BIGINT          NOT NULL,
48         tag             CHAR(3)         NOT NULL,
49         ind1            TEXT,
50         ind2            TEXT,
51         subfield        TEXT,
52         value           TEXT            NOT NULL,
53         index_vector    tsvector        NOT NULL
54 );
55 CREATE INDEX authority_full_rec_record_idx ON authority.full_rec (record);
56 CREATE INDEX authority_full_rec_tag_part_idx ON authority.full_rec (SUBSTRING(tag FROM 2));
57 CREATE TRIGGER authority_full_rec_fti_trigger
58         BEFORE UPDATE OR INSERT ON authority.full_rec
59         FOR EACH ROW EXECUTE PROCEDURE tsearch2(index_vector, value);
60
61 CREATE INDEX authority_full_rec_index_vector_idx ON authority.full_rec USING GIST (index_vector);
62
63 CREATE OR REPLACE VIEW authority.tracing_links AS
64         SELECT  main.record AS record,
65                 main.id AS main_id,
66                 main.tag AS main_tag,
67                 main.value AS main_value,
68                 substr(link.value,1,1) AS relationship,
69                 substr(link.value,2,1) AS use_restriction,
70                 substr(link.value,3,1) AS deprecation,
71                 substr(link.value,4,1) AS display_restriction,
72                 link_value.id AS link_id,
73                 link_value.tag AS link_tag,
74                 link_value.value AS link_value
75           FROM  authority.full_rec main
76                 JOIN authority.full_rec link
77                         ON (    link.record = main.record
78                                 AND link.tag in ((main.tag::int + 400)::text, (main.tag::int + 300)::text)
79                                 AND link.subfield = 'w' )
80                 JOIN authority.full_rec link_value
81                         ON (    link_value.record = main.record
82                                 AND link_value.tag = link.tag
83                                 AND link_value.subfield = 'a' )
84           WHERE main.tag IN ('100','110','111','130','150','151','155','180','181','182','185')
85                 AND main.subfield = 'a';
86
87
88 COMMIT;