]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/cats/make_postgresql_tables.in
93cfb786e05d5b6cd95f00ad3faa9f3dac998c25
[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     labeltype         integer     not null default 0,
201     labelformat       text        not null,
202     enabled           smallint    not null default 1,
203     scratchpoolid     integer,                       
204     recyclepoolid     integer,
205     primary key (poolid)
206 );
207
208 CREATE INDEX pool_name_idx on pool (name);
209
210 CREATE TABLE client
211 (
212     clientid          serial      not null,
213     name              text        not null,
214     uname             text        not null,
215     autoprune         smallint    default 0,
216     fileretention     bigint      not null,
217     jobretention      bigint      not null,
218     primary key (clientid)
219 );
220
221 create unique index client_name_idx on client (name);
222
223
224 CREATE TABLE counters
225 (
226     counter           text        not null,
227     minvalue          integer,
228     maxvalue          integer,
229     currentvalue      integer,
230     wrapcounter       text        not null,
231     primary key (counter)
232 );
233
234 CREATE TABLE version
235 (
236     versionid         integer               not null
237 );
238
239 INSERT INTO Version (VersionId) VALUES (8);
240
241
242 CREATE TABLE basefiles
243 (
244     baseid            serial                not null,
245     jobid             integer               not null,
246     fileid            integer               not null,
247     fileindex         integer                       ,
248     basejobid         integer                       ,
249     primary key (baseid)
250 );
251
252 CREATE TABLE unsavedfiles
253 (
254     UnsavedId         integer               not null,
255     jobid             integer               not null,
256     pathid            integer               not null,
257     filenameid        integer               not null,
258     primary key (UnsavedId)
259 );
260
261 CREATE TABLE CDImages 
262 (
263    MediaId integer not null,
264    LastBurn timestamp without time zone not null,
265    primary key (MediaId)
266 );
267
268 -- Make sure we have appropriate permissions
269
270
271 END-OF-DATA
272 then
273    echo "Creation of Bacula PostgreSQL tables succeeded."
274 else
275    echo "Creation of Bacula PostgreSQL tables failed."
276 fi
277 exit 0