2 * Copyright (C) 2004-2008 Georgia Public Library Service
3 * Copyright (C) 2008 Equinox Software, Inc.
4 * Mike Rylander <miker@esilibrary.com>
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.
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.
18 DROP SCHEMA IF EXISTS biblio CASCADE;
23 CREATE SEQUENCE biblio.autogen_tcn_value_seq;
24 CREATE OR REPLACE FUNCTION biblio.next_autogen_tcn_value () RETURNS TEXT AS $$
25 BEGIN RETURN 'AUTOGENERATED-' || nextval('biblio.autogen_tcn_value_seq'::TEXT); END;
28 CREATE OR REPLACE FUNCTION biblio.check_marcxml_well_formed () RETURNS TRIGGER AS $func$
31 IF xml_is_well_formed(NEW.marc) THEN
34 RAISE EXCEPTION 'Attempted to % MARCXML that is not well formed', TG_OP;
38 $func$ LANGUAGE PLPGSQL;
40 CREATE TABLE biblio.record_entry (
41 id BIGSERIAL PRIMARY KEY,
42 creator INT NOT NULL DEFAULT 1,
43 editor INT NOT NULL DEFAULT 1,
46 create_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
47 edit_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
48 active BOOL NOT NULL DEFAULT TRUE,
49 deleted BOOL NOT NULL DEFAULT FALSE,
51 tcn_source TEXT NOT NULL DEFAULT 'AUTOGEN',
52 tcn_value TEXT NOT NULL DEFAULT biblio.next_autogen_tcn_value(),
54 last_xact_id TEXT NOT NULL,
58 CREATE INDEX biblio_record_entry_creator_idx ON biblio.record_entry ( creator );
59 CREATE INDEX biblio_record_entry_create_date_idx ON biblio.record_entry ( create_date );
60 CREATE INDEX biblio_record_entry_editor_idx ON biblio.record_entry ( editor );
61 CREATE INDEX biblio_record_entry_edit_date_idx ON biblio.record_entry ( edit_date );
62 CREATE INDEX biblio_record_entry_fp_idx ON biblio.record_entry ( fingerprint );
63 CREATE UNIQUE INDEX biblio_record_unique_tcn ON biblio.record_entry (tcn_value) WHERE deleted = FALSE OR deleted IS FALSE;
64 CREATE TRIGGER a_marcxml_is_well_formed BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE biblio.check_marcxml_well_formed();
65 CREATE TRIGGER b_maintain_901 BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE maintain_901();
67 CREATE TABLE biblio.record_note (
68 id BIGSERIAL PRIMARY KEY,
69 record BIGINT NOT NULL,
71 creator INT NOT NULL DEFAULT 1,
72 editor INT NOT NULL DEFAULT 1,
73 pub BOOL NOT NULL DEFAULT FALSE,
74 create_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
75 edit_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
77 CREATE INDEX biblio_record_note_record_idx ON biblio.record_note ( record );
78 CREATE INDEX biblio_record_note_creator_idx ON biblio.record_note ( creator );
79 CREATE INDEX biblio_record_note_editor_idx ON biblio.record_note ( editor );