Revision 1818

online_search/indexer/tables_pgsql.sql (revision 1818)
1 1
CREATE LANGUAGE plpgsql;
2
CREATE TYPE file_type AS ENUM ('Unknown', 'RAR', 'PAR', 'PAR2', 'SFV', 'NFO', 'NZB', 'Other');
3 2

                
4 3
CREATE TABLE row_counts (relname text PRIMARY KEY, reltuples numeric);
4
CLUSTER row_counts USING row_counts_pkey;
5

                
5 6
CREATE OR REPLACE FUNCTION count_trig()
6 7
       RETURNS TRIGGER AS
7 8
       $$
... ...
40 41
CREATE TABLE collections
41 42
       (
42 43
               collection_id           BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('collection_id_seq'),
44
               newsgroup_id            INT NOT NULL REFERENCES newsgroups,
43 45
               stamp                   TIMESTAMP NOT NULL,
44 46
               hash                    BIGINT NOT NULL,
45 47
               collection_name         VARCHAR(256) NOT NULL,
... ...
47 49
               poster                  VARCHAR(128) NOT NULL,
48 50
               total_size              BIGINT NOT NULL,
49 51
               num_parts_found         INT NOT NULL,
50
               num_parts_expected      INT NOT NULL
52
               num_parts_expected      INT NOT NULL,
53
               num_regular_files       INT NOT NULL,
54
               num_par2_files          INT NOT NULL,
55
               stamp_changed_in_db     TIMESTAMP NOT NULL
51 56
       );
57
CREATE INDEX collections_hash_idx ON collections(hash);
58
CLUSTER collections USING collections_pkey;
52 59

                
53
CREATE TABLE collections_in_newsgroups
60
CREATE TABLE files_in_collections
54 61
       (
55 62
               collection_id           BIGINT NOT NULL REFERENCES collections,
63
               file_id                 BIGINT NOT NULL,
56 64
               stamp                   TIMESTAMP NOT NULL,
57
               newsgroup_id            INT NOT NULL REFERENCES newsgroups,
58
                                       PRIMARY KEY(collection_id, newsgroup_id)
65
                                       PRIMARY KEY (collection_id, file_id)
59 66
       );
67
CREATE TABLE files_in_collections_unsorted (PRIMARY KEY (file_id)) INHERITS (files_in_collections);
68
CREATE INDEX files_in_collections_unsorted_stamp_idx ON files_in_collections_unsorted(stamp);
69
CLUSTER files_in_collections_unsorted USING files_in_collections_unsorted_pkey;
70
ALTER TABLE files_in_collections_unsorted ADD FOREIGN KEY (file_id) REFERENCES files_unsorted;
71
ALTER TABLE files_in_collections_unsorted NO INHERIT files_in_collections;
72
CREATE TRIGGER files_in_collections_unsorted_count_delete_trig AFTER DELETE on files_in_collections_unsorted FOR EACH ROW EXECUTE PROCEDURE count_trig();
73
CREATE TRIGGER files_in_collections_unsorted_count_insert_trig AFTER INSERT on files_in_collections_unsorted FOR EACH ROW EXECUTE PROCEDURE count_trig();
74
INSERT INTO row_counts VALUES('files_in_collections_unsorted', 0);
60 75

                
61 76
CREATE SEQUENCE file_id_seq NO CYCLE;
62 77
CREATE TYPE file_type AS ENUM ('Unknown', 'RAR', 'PAR', 'PAR2', 'SFV', 'NFO', 'NZB', 'Other');
... ...
111 126
CREATE TRIGGER file_parts_unsorted_count_insert_trig AFTER INSERT on file_parts_unsorted FOR EACH ROW EXECUTE PROCEDURE count_trig();
112 127
INSERT INTO row_counts VALUES('file_parts_unsorted', 0);
113 128

                
114
CREATE TABLE files_in_newsgroups
115
       (
116
               file_id                 BIGINT NOT NULL REFERENCES files,
117
               stamp                   TIMESTAMP NOT NULL,
118
               newsgroup_id            INT NOT NULL REFERENCES newsgroups,
119
                                       PRIMARY KEY(file_id, newsgroup_id)
120
       );
129
-- CREATE TABLE files_in_newsgroups
130
--     (
131
--             file_id                 BIGINT NOT NULL REFERENCES files,
132
--             stamp                   TIMESTAMP NOT NULL,
133
--             newsgroup_id            INT NOT NULL REFERENCES newsgroups,
134
--                                     PRIMARY KEY(file_id, newsgroup_id)
135
--     );
121 136

                
122 137
CREATE TABLE statistics
123 138
       (
... ...
203 218
               IF (v_base_table = 'file_parts') THEN
204 219
                       EXECUTE 'CLUSTER ' || v_partition_name || ' USING ' || v_partition_name || '_stamp_idx';
205 220
               END IF;
221
               IF (v_base_table = 'files_in_collections') THEN
222
                       EXECUTE 'CLUSTER ' || v_partition_name || ' USING ' || v_partition_name || '_stamp_idx';
223
               END IF;
206 224

                
207 225
               EXECUTE 'CREATE TRIGGER ' || v_partition_name || '_count_delete_trig AFTER DELETE on ' || v_partition_name || ' FOR EACH ROW EXECUTE PROCEDURE count_trig()';
208 226
               EXECUTE 'CREATE TRIGGER ' || v_partition_name || '_count_insert_trig AFTER INSERT on ' || v_partition_name || ' FOR EACH ROW EXECUTE PROCEDURE count_trig()';
... ...
264 282
               BEGIN
265 283
                       EXECUTE 'DROP TABLE ' || v_partition_name;
266 284
                       EXECUTE 'DELETE FROM row_counts WHERE relname=''' || v_partition_name || '''';
267
                       EXECUTE 'DELETE FROM newsgroup_statistics WHERE day < ''' || v_date_from || '''';
285

                
286
                       IF (v_base_table = 'files') THEN
287
                               EXECUTE 'DELETE FROM newsgroup_statistics WHERE day < ''' || v_date_from || '''';
288
                       END IF;
268 289
               EXCEPTION
269 290
                       WHEN dependent_objects_still_exist THEN
270 291
                               RAISE NOTICE 'Unable to drop partition due to referential integrity. Please try again later';
... ...
526 547
-- SELECT manage_partitions('files', 'file_id', 'collection_id', 'collections');
527 548
SELECT manage_partitions('files', 'file_id', NULL, NULL);
528 549
SELECT manage_partitions('file_parts', 'file_id', 'file_id', 'files');
529
-- SELECT manage_partitions('files_in_newsgroups', 'file_id', 'file_id', 'files');
550
SELECT manage_partitions('files_in_collections', 'file_id', 'file_id', 'files');
530 551

                
531 552

                

Also available in: Unified diff