]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/cats/make_postgresql_tables.in
Add new PostgreSQL indexes
[bacula/bacula] / bacula / src / cats / make_postgresql_tables.in
1 #!/bin/sh
2 #
3 # shell script to create Bacula PostgreSQL tables
4 #
5 bindir=@SQL_BINDIR@
6
7 if $bindir/psql $* bacula -f - <<END-OF-DATA
8
9 create table version
10 (
11     versionid         integer               not null
12 );
13
14 INSERT INTO Version (VersionId) VALUES (7);
15
16 create table counters
17 (
18     counter           text                  not null,
19     minvalue          integer                       ,
20     maxvalue          integer                       ,
21     currentvalue      integer                       ,
22     wrapcounter       text                  not null,
23     primary key (counter)
24 );
25
26 create table filename
27 (
28     filenameid        serial                not null,
29     name              text                  not null,
30     primary key (filenameid)
31 );
32
33 create index filename_name_idx on filename (name);
34
35 create table path
36 (
37     pathid            serial                not null,
38     path              text                  not null,
39     primary key (pathid)
40 );
41
42 create index path_name_idx on path (path);
43
44 create table fileset
45 (
46     filesetid         serial                not null,
47     fileset           text                  not null,
48     md5               text                  not null,
49     createtime        timestamp without time zone not null,
50     primary key (filesetid)
51 );
52
53 create index fileset_name_idx on fileset (fileset);
54
55 create table pool
56 (
57     poolid            serial                not null,
58     name              text                  not null,
59     numvols           integer               not null
60         default 0,
61     maxvols           integer               not null
62         default 0,
63     useonce           smallint              not null,
64     usecatalog        smallint              not null,
65     acceptanyvolume   smallint                      
66         default 0,
67     volretention      bigint                not null,
68     voluseduration    bigint                not null,
69     maxvoljobs        integer               not null
70         default 0,
71     maxvolfiles       integer               not null
72         default 0,
73     maxvolbytes       bigint                not null,
74     autoprune         smallint              not null
75         default 0,
76     recycle           smallint                      
77         default 0,
78     pooltype          text                          
79         check (pooltype is null or (pooltype in ('Backup','Copy','Cloned','Archive','Migration'))),
80     labelformat       text                  not null,
81     enabled           smallint              not null
82         default 1,
83     scratchpoolid     integer                       ,
84     recyclepoolid     integer                       ,
85     primary key (poolid)
86 );
87
88 create index pool_name_idx on pool (name);
89
90 create table client
91 (
92     clientid          serial                not null,
93     name              text                  not null,
94     uname             text                  not null,
95     autoprune         smallint                      
96         default 0,
97     fileretention     bigint                not null,
98     jobretention      bigint                not null,
99     primary key (clientid)
100 );
101
102 create unique index client_name_idx on client (name);
103
104 create table media
105 (
106     mediaid           serial                not null,
107     volumename        text                  not null,
108     slot              integer               not null
109         default 0,
110     poolid            integer               not null,
111     mediatype         text                  not null,
112     firstwritten      timestamp without time zone,
113     lastwritten       timestamp without time zone,
114     labeldate         timestamp without time zone,
115     voljobs           integer               not null
116         default 0,
117     volfiles          integer               not null
118         default 0,
119     volblocks         integer               not null
120         default 0,
121     volmounts         integer               not null
122         default 0,
123     volbytes          bigint                not null
124         default 0,
125     volerrors         integer               not null
126         default 0,
127     volwrites         integer               not null
128         default 0,
129     volcapacitybytes  bigint                not null,
130     volstatus         text                  not null
131         check (volstatus in ('Full','Archive','Append','Recycle','Purged','Read-Only','Disabled','Error','Busy',
132             'Used','Cleaning')),
133     recycle           smallint              not null
134         default 0,
135     volretention      bigint                not null
136         default 0,
137     voluseduration    bigint                not null
138         default 0,
139     maxvoljobs        integer               not null
140         default 0,
141     maxvolfiles       integer               not null
142         default 0,
143     maxvolbytes       bigint                not null
144         default 0,
145     inchanger         smallint              not null
146         default 0,
147     mediaaddressing   smallint              not null
148         default 0,
149     volreadtime       bigint                not null
150         default 0,
151     volwritetime      bigint                not null
152         default 0,
153     primary key (mediaid)
154 );
155
156 create unique index media_volumename_id on media (volumename);
157
158 create table job
159 (
160     jobid             serial                not null,
161     job               text                  not null,
162     name              text                  not null,
163     type              char(1)               not null,
164     level             char(1)               not null,
165     clientid          integer                       ,
166     jobstatus         char(1)               not null,
167     schedtime         timestamp without time zone not null,
168     starttime         timestamp without time zone         ,
169     endtime           timestamp without time zone         ,
170     jobtdate          bigint                not null,
171     volsessionid      integer               not null
172         default 0,
173     volsessiontime    integer               not null
174         default 0,
175     jobfiles          integer               not null
176         default 0,
177     jobbytes          bigint                not null
178         default 0,
179     joberrors         integer               not null
180         default 0,
181     jobmissingfiles   integer               not null
182         default 0,
183     poolid            integer                       ,
184     filesetid         integer                       ,
185     purgedfiles       smallint              not null
186         default 0,
187     hasbase           smallint              not null
188         default 0,
189     primary key (jobid)
190 );
191
192 create index job_name_idx on job (name);
193
194 create table file
195 (
196     fileid            serial                not null,
197     fileindex         integer               not null
198         default 0,
199     jobid             integer               not null,
200     pathid            integer               not null,
201     filenameid        bigint                not null,
202     markid            integer               not null
203         default 0,
204     lstat             text                  not null,
205     md5               text                  not null,
206     primary key (fileid)
207 );
208
209 create index file_jobid_idx on file (jobid);
210 create index file_pathid_idx on file(pathid);
211 create index file_filenameid_idx on file(filenameid);
212
213 create table jobmedia
214 (
215     jobmediaid        serial                not null,
216     jobid             integer               not null,
217     mediaid           integer               not null,
218     firstindex        integer               not null
219         default 0,
220     lastindex         integer               not null
221         default 0,
222     startfile         integer               not null
223         default 0,
224     endfile           integer               not null
225         default 0,
226     startblock        bigint                not null
227         default 0,
228     endblock          bigint                not null
229         default 0,
230     volindex          integer               not null
231         default 0,
232     primary key (jobmediaid)
233 );
234
235 create index job_media_job_id_media_id_idx on jobmedia (jobid, mediaid);
236
237 create table basefiles
238 (
239     baseid            serial                not null,
240     jobid             integer               not null,
241     fileid            integer               not null,
242     fileindex         integer                       ,
243     basejobid         integer                       ,
244     primary key (baseid)
245 );
246
247 create table unsavedfiles
248 (
249     UnsavedId         integer               not null,
250     jobid             integer               not null,
251     pathid            integer               not null,
252     filenameid        integer               not null,
253     primary key (UnsavedId)
254 );
255
256 -- Make sure we have appropriate permissions
257
258 --
259 -- The following alter table commands have been removed
260 --  because they seem to create severe performance problems
261 --
262 --alter table pool
263 --    add foreign key  (scratchpoolid)
264 --       references pool (poolid) on update cascade on delete cascade;
265
266 --alter table pool
267 --    add foreign key  (recyclepoolid)
268 --       references pool (poolid) on update cascade on delete cascade;
269
270 --alter table media
271 --    add foreign key  (poolid)
272 --       references pool (poolid) on update cascade on delete cascade;
273
274 --alter table job
275 --    add foreign key  (poolid)
276 --       references pool (poolid) on update cascade on delete cascade;
277
278 --alter table job
279 --    add foreign key  (filesetid)
280 --       references fileset (filesetid) on update cascade on delete cascade;
281
282 --alter table job
283 --    add foreign key  (clientid)
284 --       references client (clientid) on update cascade on delete cascade;
285
286 --alter table file
287 --    add foreign key  (jobid)
288 --       references job (jobid) on update cascade on delete cascade;
289
290 --alter table file
291 --    add foreign key  (pathid)
292 --       references path (pathid) on update cascade on delete restrict;
293
294 --alter table file
295 --    add foreign key  (filenameid)
296 --       references filename (filenameid) on update cascade on delete cascade;
297
298 --alter table jobmedia
299 --    add foreign key  (jobid)
300 --       references job (jobid) on update cascade on delete cascade;
301
302 --alter table jobmedia
303 --    add foreign key  (mediaid)
304 --       references media (mediaid) on update cascade on delete cascade;
305
306 --alter table basefiles
307 --    add foreign key  (jobid)
308 --       references job (jobid) on update cascade on delete cascade;
309
310 --alter table basefiles
311 --    add foreign key  (fileid)
312 --       references file (fileid) on update cascade on delete cascade;
313
314 --alter table basefiles
315 --    add foreign key  (basejobid)
316 --       references job (jobid) on update cascade on delete cascade;
317
318 --alter table unsavedfiles
319 --    add foreign key  (jobid)
320 --       references job (jobid) on update restrict on delete restrict;
321
322 --alter table unsavedfiles
323 --    add foreign key  (pathid)
324 --       references path (pathid) on update restrict on delete restrict;
325
326 --alter table unsavedfiles
327 --    add foreign key  (filenameid)
328 --       references filename (filenameid) on update restrict on delete restrict;
329
330 END-OF-DATA
331 then
332    echo "Creation of Bacula PostgreSQL tables succeeded."
333 else
334    echo "Creation of Bacula PostgreSQL tables failed."
335 fi
336 exit 0