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