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