1CREATE TABLE Path
2(
3    PathId            SERIAL      NOT NULL,
4    Path              TEXT        NOT NULL,
5    PRIMARY KEY (PathId)
6);
7
8ALTER TABLE Path ALTER COLUMN Path SET STATISTICS 1000;
9CREATE UNIQUE INDEX path_name_idx ON Path (Path);
10
11-- We strongly recommend to avoid the temptation to add new indexes.
12-- In general, these will cause very significant performance
13-- problems in other areas.  A better approach is to carefully check
14-- that all your memory configuration parameters are
15-- suitable for the size of your installation. If you backup
16-- millions of files, you need to adapt the database memory
17-- configuration parameters concerning sorting, joining and global
18-- memory.  By default, sort and join parameters are very small
19-- (sometimes 8Kb), and having sufficient memory specified by those
20-- parameters is extremely important to run fast.
21
22-- In File table
23-- FileIndex is 0 for FT_DELETED files
24-- Name is '' for directories
25CREATE TABLE File (
26   FileId           BIGSERIAL   NOT NULL,
27   FileIndex        INTEGER     NOT NULL  DEFAULT 0,
28   JobId            INTEGER     NOT NULL,
29   PathId           INTEGER     NOT NULL,
30   DeltaSeq         SMALLINT    NOT NULL  DEFAULT 0,
31   MarkId           INTEGER     NOT NULL  DEFAULT 0,
32   Fhinfo           NUMERIC(20) NOT NULL  DEFAULT 0,
33   Fhnode           NUMERIC(20) NOT NULL  DEFAULT 0,
34   LStat            TEXT        NOT NULL,
35   Md5              TEXT        NOT NULL,
36   Name             TEXT        NOT NULL,
37   PRIMARY KEY (FileId)
38);
39CREATE INDEX file_jpfid_idx ON File (JobId, PathId, Name);
40-- This index is important for bvfs performance, especially
41-- for .bvfs_lsdirs which is used by bareos-webui.
42-- As it's a partial index, it will only contain data from
43-- from accurate jobs with delete directories, so that the
44-- impact on backups will be low. Nevertheless, it will
45-- improve the performance, even when not using accurate.
46CREATE INDEX file_pjidpart_idx ON File(PathId,JobId) WHERE FileIndex = 0 AND Name = '';
47
48--
49-- Add this if you have a good number of job
50-- that run at the same time
51-- ALTER SEQUENCE file_fileid_seq CACHE 1000;
52
53--
54-- Possibly add one or more of the following indexes
55--  to the above File table if your Verifies are
56--  too slow, but they can slow down backups.
57--
58-- CREATE INDEX file_pathid_idx ON file(pathid);
59
60CREATE TABLE RestoreObject (
61    RestoreObjectId   SERIAL      NOT NULL,
62    ObjectName        TEXT        NOT NULL,
63    RestoreObject     BYTEA       NOT NULL,
64    PluginName        TEXT        NOT NULL,
65    ObjectLength      INTEGER     DEFAULT 0,
66    ObjectFullLength  INTEGER     DEFAULT 0,
67    ObjectIndex       INTEGER     DEFAULT 0,
68    ObjectType        INTEGER     DEFAULT 0,
69    FileIndex         INTEGER     DEFAULT 0,
70    JobId             INTEGER,
71    ObjectCompression INTEGER     DEFAULT 0,
72    PRIMARY KEY(RestoreObjectId)
73);
74CREATE INDEX restore_jobid_idx ON RestoreObject(JobId);
75
76CREATE TABLE Job
77(
78    JobId             SERIAL      NOT NULL,
79    Job               TEXT        NOT NULL,
80    Name              TEXT        NOT NULL,
81    Type              CHAR(1)     NOT NULL,
82    Level             CHAR(1)     NOT NULL,
83    ClientId          INTEGER     DEFAULT 0,
84    JobStatus         CHAR(1)     NOT NULL,
85    SchedTime         TIMESTAMP   WITHOUT TIME ZONE,
86    StartTime         TIMESTAMP   WITHOUT TIME ZONE,
87    EndTime           TIMESTAMP   WITHOUT TIME ZONE,
88    RealEndTime       TIMESTAMP   WITHOUT TIME ZONE,
89    JobTDate          BIGINT      DEFAULT 0,
90    VolSessionId      INTEGER     DEFAULT 0,
91    volSessionTime    INTEGER     DEFAULT 0,
92    JobFiles          INTEGER     DEFAULT 0,
93    JobBytes          BIGINT      DEFAULT 0,
94    ReadBytes         BIGINT      DEFAULT 0,
95    JobErrors         INTEGER     DEFAULT 0,
96    JobMissingFiles   INTEGER     DEFAULT 0,
97    PoolId            INTEGER     DEFAULT 0,
98    FilesetId         INTEGER     DEFAULT 0,
99    PriorJobid        INTEGER     DEFAULT 0,
100    PurgedFiles       SMALLINT    DEFAULT 0,
101    HasBase           SMALLINT    DEFAULT 0,
102    HasCache          SMALLINT    DEFAULT 0,
103    Reviewed          SMALLINT    DEFAULT 0,
104    Comment           TEXT,
105    PRIMARY KEY (JobId)
106);
107
108CREATE INDEX job_name_idx ON job (Name);
109
110-- Create a table like Job for long term statistics
111CREATE TABLE JobHisto (LIKE Job);
112CREATE INDEX jobhisto_idx ON JobHisto (StartTime);
113
114CREATE TABLE Location (
115    LocationId        SERIAL      NOT NULL,
116    Location          TEXT        NOT NULL,
117    Cost              INTEGER     DEFAULT 0,
118    Enabled           SMALLINT,
119    PRIMARY KEY (LocationId)
120);
121
122CREATE TABLE Fileset
123(
124    FileSetId         SERIAL      NOT NULL,
125    Fileset           TEXT        NOT NULL,
126    FileSetText       TEXT        DEFAULT '',
127    Md5               TEXT        NOT NULL,
128    CreateTime        TIMESTAMP WITHOUT TIME ZONE NOT NULL,
129    PRIMARY KEY (filesetid)
130);
131
132CREATE INDEX fileset_name_idx ON fileset (fileset);
133
134CREATE TABLE JobMedia
135(
136    JobMediaId        SERIAL      NOT NULL,
137    JobId             INTEGER     NOT NULL,
138    MediaId           INTEGER     NOT NULL,
139    FirstIndex        INTEGER     DEFAULT 0,
140    LastIndex         INTEGER     DEFAULT 0,
141    StartFile         INTEGER     DEFAULT 0,
142    EndFile           INTEGER     DEFAULT 0,
143    StartBlock        BIGINT      DEFAULT 0,
144    EndBlock          BIGINT      DEFAULT 0,
145    JobBytes          NUMERIC(20) DEFAULT 0,
146    VolIndex          INTEGER     DEFAULT 0,
147    PRIMARY KEY (jobmediaid)
148);
149
150CREATE INDEX job_media_job_id_media_id_idx ON jobmedia (JobId, MediaId);
151
152CREATE TABLE Media
153(
154    MediaId           SERIAL      NOT NULL,
155    VolumeName        TEXT        NOT NULL,
156    Slot              INTEGER     DEFAULT 0,
157    PoolId            INTEGER     DEFAULT 0,
158    MediaType         TEXT        NOT NULL,
159    MediaTypeId       INTEGER     DEFAULT 0,
160    LabelType         INTEGER     DEFAULT 0,
161    FirstWritten      TIMESTAMP   WITHOUT TIME ZONE,
162    LastWritten       TIMESTAMP   WITHOUT TIME ZONE,
163    LabelDate         TIMESTAMP   WITHOUT TIME ZONE,
164    VolJobs           INTEGER     DEFAULT 0,
165    VolFiles          INTEGER     DEFAULT 0,
166    VolBlocks         INTEGER     DEFAULT 0,
167    VolMounts         INTEGER     DEFAULT 0,
168    VolBytes          BIGINT      DEFAULT 0,
169    VolErrors         INTEGER     DEFAULT 0,
170    VolWrites         INTEGER     DEFAULT 0,
171    VolCapacityBytes  BIGINT      DEFAULT 0,
172    VolStatus         TEXT        NOT NULL
173        CHECK (VolStatus IN ('Full', 'Archive', 'Append',
174              'Recycle', 'Purged', 'Read-Only', 'Disabled',
175              'Error', 'Busy', 'Used', 'Cleaning', 'Scratch')),
176    Enabled           SMALLINT    DEFAULT 1,
177    Recycle           SMALLINT    DEFAULT 0,
178    ActionOnPurge     SMALLINT    DEFAULT 0,
179    VolRetention      BIGINT      DEFAULT 0,
180    VolUseDuration    BIGINT      DEFAULT 0,
181    MaxVolJobs        INTEGER     DEFAULT 0,
182    MaxVolFiles       INTEGER     DEFAULT 0,
183    MaxVolBytes       BIGINT      DEFAULT 0,
184    InChanger         SMALLINT    DEFAULT 0,
185    StorageId         INTEGER     DEFAULT 0,
186    DeviceId          INTEGER     DEFAULT 0,
187    MediaAddressing   SMALLINT    DEFAULT 0,
188    VolReadTime       BIGINT      DEFAULT 0,
189    VolWriteTime      BIGINT      DEFAULT 0,
190    EndFile           INTEGER     DEFAULT 0,
191    EndBlock          BIGINT      DEFAULT 0,
192    LocationId        INTEGER     DEFAULT 0,
193    RecycleCount      INTEGER     DEFAULT 0,
194    MinBlockSize      INTEGER     DEFAULT 0,
195    MaxBlockSize      INTEGER     DEFAULT 0,
196    InitialWrite      TIMESTAMP   WITHOUT TIME ZONE,
197    ScratchPoolId     INTEGER     DEFAULT 0,
198    RecyclePoolId     INTEGER     DEFAULT 0,
199    EncryptionKey     TEXT,
200    Comment           TEXT,
201    PRIMARY KEY (MediaId)
202);
203
204CREATE UNIQUE INDEX media_volumename_id ON Media (VolumeName);
205CREATE INDEX media_poolid_idx ON Media (PoolId);
206
207CREATE TABLE MediaType (
208    MediaTypeId       SERIAL,
209    MediaType         TEXT        NOT NULL,
210    ReadOnly          INTEGER     DEFAULT 0,
211    PRIMARY KEY(MediaTypeId)
212);
213
214CREATE TABLE Storage (
215    StorageId         SERIAL,
216    Name              TEXT        NOT NULL,
217    AutoChanger       INTEGER     DEFAULT 0,
218    PRIMARY KEY(StorageId)
219);
220
221CREATE TABLE Device (
222    DeviceId                  SERIAL,
223    Name                      TEXT        NOT NULL,
224    MediaTypeId               INTEGER     NOT NULL,
225    StorageId                 INTEGER     NOT NULL,
226    DevMounts                 INTEGER     NOT NULL DEFAULT 0,
227    DevReadBytes              BIGINT      NOT NULL DEFAULT 0,
228    DevWriteBytes             BIGINT      NOT NULL DEFAULT 0,
229    DevReadBytesSinceCleaning BIGINT      NOT NULL DEFAULT 0,
230    DevWriteBytesSinceCleaning BIGINT     NOT NULL DEFAULT 0,
231    DevReadTime               BIGINT      NOT NULL DEFAULT 0,
232    DevWriteTime              BIGINT      NOT NULL DEFAULT 0,
233    DevReadTimeSinceCleaning  BIGINT      NOT NULL DEFAULT 0,
234    DevWriteTimeSinceCleaning BIGINT      NOT NULL DEFAULT 0,
235    CleaningDate              TIMESTAMP   WITHOUT TIME ZONE,
236    CleaningPeriod            BIGINT      NOT NULL DEFAULT 0,
237    PRIMARY KEY(DeviceId)
238);
239
240CREATE TABLE Pool
241(
242    PoolId            SERIAL      NOT NULL,
243    Name              TEXT        NOT NULL,
244    NumVols           INTEGER     DEFAULT 0,
245    MaxVols           INTEGER     DEFAULT 0,
246    UseOnce           SMALLINT    DEFAULT 0,
247    UseCatalog        SMALLINT    DEFAULT 0,
248    AcceptAnyVolume   SMALLINT    DEFAULT 0,
249    VolRetention      BIGINT      DEFAULT 0,
250    VolUseDuration    BIGINT      DEFAULT 0,
251    MaxVolJobs        INTEGER     DEFAULT 0,
252    MaxVolFiles       INTEGER     DEFAULT 0,
253    MaxVolBytes       BIGINT      DEFAULT 0,
254    AutoPrune         SMALLINT    DEFAULT 0,
255    Recycle           SMALLINT    DEFAULT 0,
256    ActionOnPurge     SMALLINT    DEFAULT 0,
257    PoolType          TEXT
258      CHECK (PoolType IN ('Backup', 'Copy', 'Cloned', 'Archive',
259                          'Migration', 'Scratch')),
260    LabelType         INTEGER     DEFAULT 0,
261    LabelFormat       TEXT        NOT NULL,
262    Enabled           SMALLINT    DEFAULT 1,
263    ScratchPoolId     INTEGER     DEFAULT 0,
264    RecyclePoolId     INTEGER     DEFAULT 0,
265    NextPoolId        INTEGER     DEFAULT 0,
266    MinBlockSize      INTEGER     DEFAULT 0,
267    MaxBlockSize      INTEGER     DEFAULT 0,
268    MigrationHighBytes BIGINT     DEFAULT 0,
269    MigrationLowBytes BIGINT      DEFAULT 0,
270    MigrationTime     BIGINT      DEFAULT 0,
271    PRIMARY KEY (PoolId)
272);
273
274CREATE INDEX pool_name_idx ON Pool (Name);
275
276CREATE TABLE Client
277(
278    ClientId          SERIAL      NOT NULL,
279    Name              TEXT        NOT NULL,
280    UName             TEXT        NOT NULL,
281    AutoPrune         SMALLINT    DEFAULT 0,
282    FileRetention     BIGINT      DEFAULT 0,
283    JobRetention      BIGINT      DEFAULT 0,
284    PRIMARY KEY (ClientId)
285);
286
287CREATE UNIQUE INDEX client_name_idx ON Client (Name);
288
289CREATE TABLE Log
290(
291    LogId             SERIAL      NOT NULL,
292    JobId             INTEGER     NOT NULL,
293    Time              TIMESTAMP   WITHOUT TIME ZONE,
294    LogText           TEXT        NOT NULL,
295    PRIMARY KEY (LogId)
296);
297CREATE INDEX log_name_idx ON Log (JobId);
298
299CREATE TABLE LocationLog (
300    LocLogId          SERIAL NOT NULL,
301    Date              TIMESTAMP   WITHOUT TIME ZONE,
302    Comment           TEXT NOT NULL,
303    MediaId           INTEGER DEFAULT 0,
304    LocationId        INTEGER DEFAULT 0,
305    NewVolStatus              TEXT NOT NULL
306        CHECK (NewVolStatus IN ('Full', 'Archive', 'Append',
307              'Recycle', 'Purged', 'Read-Only', 'Disabled',
308              'Error', 'Busy', 'Used', 'Cleaning', 'Scratch')),
309    newenabled        SMALLINT,
310    PRIMARY KEY(LocLogId)
311);
312
313CREATE TABLE counters
314(
315    Counter           TEXT        NOT NULL,
316    MinValue          INTEGER     DEFAULT 0,
317    MaxValue          INTEGER     DEFAULT 0,
318    CurrentValue      INTEGER     DEFAULT 0,
319    wrapcounter       TEXT        NOT NULL,
320    PRIMARY KEY (Counter)
321);
322
323CREATE TABLE basefiles
324(
325    BaseId            BIGSERIAL   NOT NULL,
326    JobId             INTEGER     NOT NULL,
327    FileId            BIGINT      NOT NULL,
328    FileIndex         INTEGER,
329    BaseJobId         INTEGER,
330    PRIMARY KEY (BaseId)
331);
332
333CREATE INDEX basefiles_jobid_idx ON BaseFiles (JobId);
334
335-- This table seems to be obsolete
336-- CREATE TABLE UnsavedFiles
337-- (
338--     UnsavedId         INTEGER     NOT NULL,
339--     JobId             INTEGER     NOT NULL,
340--     PathId            INTEGER     NOT NULL,
341--     FilenameId        INTEGER     NOT NULL,
342--     PRIMARY KEY (UnsavedId)
343-- );
344
345CREATE TABLE PathHierarchy
346(
347    PathId            INTEGER     NOT NULL,
348    PPathId           INTEGER     NOT NULL,
349    CONSTRAINT pathhierarchy_pkey PRIMARY KEY (PathId)
350);
351
352CREATE INDEX pathhierarchy_ppathid
353          ON PathHierarchy (PPathId);
354
355CREATE TABLE PathVisibility
356(
357      PathId          INTEGER     NOT NULL,
358      JobId           INTEGER     NOT NULL,
359      Size            BIGINT      DEFAULT 0,
360      Files           INTEGER     DEFAULT 0,
361      CONSTRAINT pathvisibility_pkey PRIMARY KEY (JobId, PathId)
362);
363
364CREATE TABLE version
365(
366    VersionId         INTEGER     NOT NULL
367);
368
369CREATE TABLE Status (
370    JobStatus         CHAR(1)     NOT NULL,
371    JobStatusLong     TEXT,
372    Severity          INTEGER,
373    PRIMARY KEY (JobStatus)
374);
375
376CREATE TABLE Quota (
377    ClientId          INTEGER     NOT NULL,
378    GraceTime         BIGINT      DEFAULT 0,
379    QuotaLimit        BIGINT      DEFAULT 0,
380    PRIMARY KEY (ClientId)
381);
382
383CREATE TABLE NDMPLevelMap (
384    ClientId          INTEGER     NOT NULL,
385    FilesetId         INTEGER     DEFAULT 0,
386    FileSystem        TEXT        NOT NULL,
387    DumpLevel         INTEGER     NOT NULL,
388    CONSTRAINT NDMPLevelMap_pkey PRIMARY KEY (ClientId, FilesetId, FileSystem)
389);
390
391CREATE TABLE NDMPJobEnvironment (
392    JobId             INTEGER     NOT NULL,
393    FileIndex         INTEGER     NOT NULL,
394    EnvName           TEXT        NOT NULL,
395    EnvValue          TEXT        NOT NULL,
396    CONSTRAINT NDMPJobEnvironment_pkey PRIMARY KEY (JobId, FileIndex, EnvName)
397);
398
399CREATE TABLE DeviceStats (
400    DeviceId          INTEGER     DEFAULT 0,
401    SampleTime        TIMESTAMP   WITHOUT TIME ZONE NOT NULL,
402    ReadTime          BIGINT      NOT NULL DEFAULT 0,
403    WriteTime         BIGINT      NOT NULL DEFAULT 0,
404    ReadBytes         BIGINT      DEFAULT 0,
405    WriteBytes        BIGINT      DEFAULT 0,
406    SpoolSize         BIGINT      DEFAULT 0,
407    NumWaiting        SMALLINT    DEFAULT 0,
408    NumWriters        SMALLINT    DEFAULT 0,
409    MediaId           INTEGER     NOT NULL,
410    VolCatBytes       BIGINT      DEFAULT 0,
411    VolCatFiles       BIGINT      DEFAULT 0,
412    VolCatBlocks      BIGINT      DEFAULT 0
413);
414
415CREATE TABLE JobStats (
416    DeviceId          INTEGER     DEFAULT 0,
417    SampleTime        TIMESTAMP   WITHOUT TIME ZONE NOT NULL,
418    JobId             INTEGER     NOT NULL,
419    JobFiles          INTEGER     DEFAULT 0,
420    JobBytes          BIGINT      DEFAULT 0
421);
422
423CREATE TABLE TapeAlerts (
424    DeviceId          INTEGER     DEFAULT 0,
425    SampleTime        TIMESTAMP   WITHOUT TIME ZONE NOT NULL,
426    AlertFlags        BIGINT      DEFAULT 0
427);
428
429INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
430   ('C', 'Created, not yet running',15);
431INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
432   ('R', 'Running',15);
433INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
434   ('B', 'Blocked',15);
435INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
436   ('T', 'Completed successfully', 10);
437INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
438   ('E', 'Terminated with errors', 25);
439INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
440   ('e', 'Non-fatal error',20);
441INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
442   ('f', 'Fatal error',100);
443INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
444   ('D', 'Verify found differences',15);
445INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
446   ('A', 'Canceled by user',90);
447INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
448   ('I', 'Incomplete job', 15);
449INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
450   ('L', 'Committing data', 15);
451INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
452   ('W', 'Terminated with warnings', 20);
453INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
454   ('l', 'Doing data despooling', 15);
455INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
456   ('q', 'Queued waiting for device', 15);
457INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
458   ('F', 'Waiting for Client',15);
459INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
460   ('S', 'Waiting for Storage daemon',15);
461INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
462   ('m', 'Waiting for new media',15);
463INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
464   ('M', 'Waiting for media mount',15);
465INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
466   ('s', 'Waiting for storage resource',15);
467INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
468   ('j', 'Waiting for job resource',15);
469INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
470   ('c', 'Waiting for client resource',15);
471INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
472   ('d', 'Waiting on maximum jobs',15);
473INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
474   ('t', 'Waiting on start time',15);
475INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
476   ('p', 'Waiting on higher priority jobs',15);
477INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
478   ('a', 'SD despooling attributes',15);
479INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
480   ('i', 'Doing batch insert file records',15);
481
482-- Initialize Version
483--   DELETE should not be required,
484--   but prevents errors if create script is called multiple times
485DELETE FROM Version WHERE VersionId<=2192;
486INSERT INTO Version (VersionId) VALUES (2192);
487
488-- Make sure we have appropriate permissions
489