1#!/bin/sh
2#
3# shell script to create Bacula SQLite tables
4#
5# Copyright (C) 2000-2020 Kern Sibbald
6# License: BSD 2-Clause; see file LICENSE-FOSS
7#
8
9bindir=@SQLITE_BINDIR@
10PATH="$bindir:$PATH"
11cd @working_dir@
12db_name=@db_name@
13
14sqlite3 $* ${db_name}.db <<END-OF-DATA
15CREATE TABLE TagJob
16(
17   JobId integer not null,
18   Tag   text    not null,
19   primary key (JobId, Tag)
20);
21
22CREATE TABLE TagClient
23(
24   ClientId integer not null,
25   Tag      text    not null,
26   primary key (ClientId, Tag)
27);
28
29CREATE TABLE TagMedia
30(
31   MediaId integer not null,
32   Tag      text    not null,
33   primary key (MediaId, Tag)
34);
35
36CREATE TABLE TagObject
37(
38   ObjectId integer not null,
39   Tag      text    not null,
40   primary key (ObjectId, Tag)
41);
42
43CREATE TABLE Object
44(
45   ObjectId     integer  not null,
46
47   JobId        integer  not null,
48   Path         text     not null,
49   Filename     text     not null,
50   PluginName   text     not null,
51
52   ObjectType   text     not null,
53   ObjectName   text     not null,
54   ObjectSource text     not null,
55   ObjectUUID   text     not null,
56   ObjectSize   integer  not null,
57   primary key (ObjectId)
58);
59
60create index object_jobid_idx on Object (JobId);
61create index object_type_idx on Object  (ObjectType);
62create index object_name_idx on Object  (ObjectName);
63create index object_source_idx on Object  (ObjectSource);
64
65CREATE TABLE Events
66(
67    EventsId          INTEGER,
68    EventsCode        text        not null,
69    EventsType	      text	  not null,
70    EventsTime	      DATETIME,
71    EventsInsertTime  DATETIME DEFAULT current_timestamp,
72    EventsDaemon        text        default '',
73    EventsSource      text        default '',
74    EventsRef         text        default '',
75    EventsText	      text	  not null,
76    primary key (EventsId)
77);
78create index events_time_idx on Events (EventsTime);
79
80CREATE TABLE Path (
81   PathId INTEGER,
82   Path TEXT DEFAULT '',
83   PRIMARY KEY(PathId) 
84   );
85
86CREATE INDEX inx2 ON Path (Path);
87
88-- In File table
89-- FileIndex can be 0 for FT_DELETED files
90-- FileName can be '' for directories
91CREATE TABLE File (
92   FileId INTEGER,
93   FileIndex INTEGER DEFAULT 0,
94   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
95   PathId INTEGER UNSIGNED REFERENCES Path NOT NULL,
96   Filename TEXT NOT NULL DEFAULT '',
97   DeltaSeq SMALLINT UNSIGNED DEFAULT 0,
98   MarkId INTEGER UNSIGNED DEFAULT 0,
99   LStat VARCHAR(255) NOT NULL,
100   MD5 VARCHAR(255) NOT NULL,
101   PRIMARY KEY(FileId) 
102   );
103CREATE INDEX inx3 ON File (JobId);
104CREATE INDEX file_jpf_idx ON File (JobId, PathId, Filename);
105--
106-- Possibly add one or more of the following indexes
107--  if your Verifies are too slow.
108--
109-- CREATE INDEX inx4 ON File (PathId);
110-- CREATE INDEX inx5 ON File (FileName);
111
112
113CREATE TABLE RestoreObject (
114   RestoreObjectId INTEGER,
115   ObjectName TEXT DEFAULT '',
116   RestoreObject TEXT DEFAULT '',
117   PluginName TEXT DEFAULT '',
118   ObjectLength INTEGER DEFAULT 0,
119   ObjectFullLength INTEGER DEFAULT 0,
120   ObjectIndex INTEGER DEFAULT 0,
121   ObjectType INTEGER DEFAULT 0,
122   FileIndex INTEGER DEFAULT 0,
123   ObjectCompression INTEGER DEFAULT 0,
124   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
125   PRIMARY KEY(RestoreObjectId)
126   );
127CREATE INDEX restore_jobid_idx ON RestoreObject (JobId);
128
129
130CREATE TABLE Job (
131   JobId INTEGER,
132   Job VARCHAR(128) NOT NULL,
133   Name VARCHAR(128) NOT NULL,
134   Type CHAR(1) NOT NULL,
135   Level CHAR(1) NOT NULL,
136   ClientId INTEGER REFERENCES Client DEFAULT 0,
137   JobStatus CHAR(1) NOT NULL,
138   SchedTime DATETIME NOT NULL,
139   StartTime DATETIME DEFAULT 0,
140   EndTime DATETIME DEFAULT 0,
141   RealEndTime DATETIME DEFAULT 0,
142   JobTDate BIGINT UNSIGNED DEFAULT 0,
143   VolSessionId INTEGER UNSIGNED DEFAULT 0,
144   VolSessionTime INTEGER UNSIGNED DEFAULT 0,
145   JobFiles INTEGER UNSIGNED DEFAULT 0,
146   JobBytes BIGINT UNSIGNED DEFAULT 0,
147   ReadBytes BIGINT UNSIGNED DEFAULT 0,
148   JobErrors INTEGER UNSIGNED DEFAULT 0,
149   JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
150   PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
151   FileSetId INTEGER UNSIGNED REFERENCES FileSet DEFAULT 0,
152   PriorJobId INTEGER UNSIGNED REFERENCES Job DEFAULT 0,
153   PriorJob VARCHAR(128) DEFAULT '',
154   PurgedFiles TINYINT DEFAULT 0,
155   HasBase TINYINT DEFAULT 0,
156   HasCache TINYINT DEFAULT 0,
157   Reviewed TINYINT DEFAULT 0,
158   Comment TEXT,
159   FileTable TEXT DEFAULT 'File',
160   PRIMARY KEY(JobId) 
161   );
162CREATE INDEX inx6 ON Job (Name);
163
164-- Create a table like Job for long term statistics 
165CREATE TABLE JobHisto (
166   JobId INTEGER,
167   Job VARCHAR(128) NOT NULL,
168   Name VARCHAR(128) NOT NULL,
169   Type CHAR(1) NOT NULL,
170   Level CHAR(1) NOT NULL,
171   ClientId INTEGER DEFAULT 0,
172   JobStatus CHAR(1) NOT NULL,
173   SchedTime DATETIME NOT NULL,
174   StartTime DATETIME DEFAULT 0,
175   EndTime DATETIME DEFAULT 0,
176   RealEndTime DATETIME DEFAULT 0,
177   JobTDate BIGINT UNSIGNED DEFAULT 0,
178   VolSessionId INTEGER UNSIGNED DEFAULT 0,
179   VolSessionTime INTEGER UNSIGNED DEFAULT 0,
180   JobFiles INTEGER UNSIGNED DEFAULT 0,
181   JobBytes BIGINT UNSIGNED DEFAULT 0,
182   ReadBytes BIGINT UNSIGNED DEFAULT 0,
183   JobErrors INTEGER UNSIGNED DEFAULT 0,
184   JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
185   PoolId INTEGER UNSIGNED DEFAULT 0,
186   FileSetId INTEGER UNSIGNED DEFAULT 0,
187   PriorJobId INTEGER UNSIGNED DEFAULT 0,
188   PriorJob VARCHAR(128) DEFAULT '',
189   PurgedFiles TINYINT DEFAULT 0,
190   HasBase TINYINT DEFAULT 0,
191   HasCache TINYINT DEFAULT 0,
192   Reviewed TINYINT DEFAULT 0,
193   Comment TEXT,
194   FileTable TEXT DEFAULT 'File'
195   );
196CREATE INDEX inx61 ON JobHisto (StartTime);
197
198CREATE TABLE Location (
199   LocationId INTEGER,
200   Location TEXT NOT NULL,
201   Cost INTEGER DEFAULT 0,
202   Enabled TINYINT,
203   PRIMARY KEY(LocationId)
204   );
205
206CREATE TABLE LocationLog (
207   LocLogId INTEGER,
208   Date DATETIME NOT NULL,
209   Comment TEXT NOT NULL,
210   MediaId INTEGER UNSIGNED REFERENCES Media DEFAULT 0,
211   LocationId INTEGER UNSIGNED REFERENCES LocationId DEFAULT 0,
212   NewVolStatus VARCHAR(20) NOT NULL,
213   NewEnabled TINYINT NOT NULL,
214   PRIMARY KEY(LocLogId)
215);
216
217
218CREATE TABLE Log (
219   LogId INTEGER,
220   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
221   Time DATETIME NOT NULL,
222   LogText TEXT NOT NULL,
223   PRIMARY KEY(LogId) 
224   );
225CREATE INDEX LogInx1 ON Log (JobId);
226
227
228CREATE TABLE FileSet (
229   FileSetId INTEGER,
230   FileSet VARCHAR(128) NOT NULL,
231   MD5 VARCHAR(25) NOT NULL,
232   CreateTime DATETIME DEFAULT 0,
233   PRIMARY KEY(FileSetId)
234   );
235
236CREATE TABLE JobMedia (
237   JobMediaId INTEGER,
238   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
239   MediaId INTEGER UNSIGNED REFERENCES Media NOT NULL,
240   FirstIndex INTEGER UNSIGNED NOT NULL,
241   LastIndex INTEGER UNSIGNED NOT NULL,
242   StartFile INTEGER UNSIGNED DEFAULT 0,
243   EndFile INTEGER UNSIGNED DEFAULT 0,
244   StartBlock INTEGER UNSIGNED DEFAULT 0,
245   EndBlock INTEGER UNSIGNED DEFAULT 0,
246   VolIndex INTEGER UNSIGNED DEFAULT 0,
247   PRIMARY KEY(JobMediaId) 
248   );
249
250CREATE INDEX inx7 ON JobMedia (JobId, MediaId);
251
252CREATE TABLE FileMedia
253(
254    JobId	      integer	  not null,
255    FileIndex	      integer	  not null,
256    MediaId	      integer	  not null,
257    BlockAddress      bigint	  default 0,
258    RecordNo	      integer	  default 0,
259    FileOffset	      bigint	  default 0
260);
261CREATE INDEX file_media_idx on FileMedia (JobId, FileIndex);
262
263CREATE TABLE Media (
264   MediaId INTEGER,
265   VolumeName VARCHAR(128) NOT NULL,
266   Slot INTEGER DEFAULT 0,
267   PoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
268   MediaType VARCHAR(128) NOT NULL,
269   MediaTypeId INTEGER UNSIGNED REFERENCES MediaType DEFAULT 0,
270   LabelType TINYINT DEFAULT 0,
271   FirstWritten DATETIME DEFAULT 0,
272   LastWritten DATETIME DEFAULT 0,
273   LabelDate DATETIME DEFAULT 0,
274   VolJobs INTEGER UNSIGNED DEFAULT 0,
275   VolFiles INTEGER UNSIGNED DEFAULT 0,
276   VolBlocks INTEGER UNSIGNED DEFAULT 0,
277   LastPartBytes BIGINT UNSIGNED DEFAULT 0,
278   VolMounts INTEGER UNSIGNED DEFAULT 0,
279   VolBytes BIGINT UNSIGNED DEFAULT 0,
280   VolABytes BIGINT UNSIGNED DEFAULT 0,
281   VolAPadding BIGINT UNSIGNED DEFAULT 0,
282   VolHoleBytes BIGINT UNSIGNED DEFAULT 0,
283   VolHoles INTEGER UNSIGNED DEFAULT 0,
284   VolType INTEGER UNSIGNED DEFAULT 0,
285   VolParts INTEGER UNSIGNED DEFAULT 0,
286   VolCloudParts INTEGER UNSIGNED DEFAULT 0,
287   VolErrors INTEGER UNSIGNED DEFAULT 0,
288   VolWrites BIGINT UNSIGNED DEFAULT 0,
289   VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
290   VolStatus VARCHAR(20) NOT NULL,
291   Enabled TINYINT DEFAULT 1,
292   Recycle TINYINT DEFAULT 0,
293   ActionOnPurge     TINYINT	DEFAULT 0,
294   CacheRetention BIGINT UNSIGNED DEFAULT 0,
295   VolRetention BIGINT UNSIGNED DEFAULT 0,
296   VolUseDuration BIGINT UNSIGNED DEFAULT 0,
297   MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
298   MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
299   MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
300   InChanger TINYINT DEFAULT 0,
301   StorageId INTEGER UNSIGNED REFERENCES Storage DEFAULT 0,
302   DeviceId INTEGER UNSIGNED REFERENCES Device DEFAULT 0,
303   MediaAddressing TINYINT DEFAULT 0,
304   VolReadTime BIGINT UNSIGNED DEFAULT 0,
305   VolWriteTime BIGINT UNSIGNED DEFAULT 0,
306   EndFile INTEGER UNSIGNED DEFAULT 0,
307   EndBlock INTEGER UNSIGNED DEFAULT 0,
308   LocationId INTEGER UNSIGNED REFERENCES Location DEFAULT 0,
309   RecycleCount INTEGER UNSIGNED DEFAULT 0,
310   InitialWrite DATETIME DEFAULT 0,
311   ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
312   RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
313   Comment TEXT,
314   PRIMARY KEY(MediaId)
315   );
316
317CREATE INDEX inx8 ON Media (PoolId);
318CREATE INDEX inx9 ON Media (StorageId);
319
320
321CREATE TABLE MediaType (
322   MediaTypeId INTEGER,
323   MediaType VARCHAR(128) NOT NULL,
324   ReadOnly TINYINT DEFAULT 0,
325   PRIMARY KEY(MediaTypeId)
326   );
327
328CREATE TABLE Storage (
329   StorageId INTEGER,
330   Name VARCHAR(128) NOT NULL,
331   AutoChanger TINYINT DEFAULT 0,
332   PRIMARY KEY(StorageId)
333   );
334
335CREATE TABLE Device (
336   DeviceId INTEGER,
337   Name VARCHAR(128) NOT NULL,
338   MediaTypeId INTEGER UNSIGNED REFERENCES MediaType NOT NULL,
339   StorageId INTEGER UNSIGNED REFERENCES Storage,
340   DevMounts INTEGER UNSIGNED DEFAULT 0,
341   DevReadBytes BIGINT UNSIGNED DEFAULT 0,
342   DevWriteBytes BIGINT UNSIGNED DEFAULT 0,
343   DevReadBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
344   DevWriteBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
345   DevReadTime BIGINT UNSIGNED DEFAULT 0,
346   DevWriteTime BIGINT UNSIGNED DEFAULT 0,
347   DevReadTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
348   DevWriteTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
349   CleaningDate DATETIME DEFAULT 0,
350   CleaningPeriod BIGINT UNSIGNED DEFAULT 0,
351   PRIMARY KEY(DeviceId)
352   );
353
354
355CREATE TABLE Pool (
356   PoolId INTEGER,
357   Name VARCHAR(128) NOT NULL,
358   NumVols INTEGER UNSIGNED DEFAULT 0,
359   MaxVols INTEGER UNSIGNED DEFAULT 0,
360   UseOnce TINYINT DEFAULT 0,
361   UseCatalog TINYINT DEFAULT 1,
362   AcceptAnyVolume TINYINT DEFAULT 0,
363   VolRetention BIGINT UNSIGNED DEFAULT 0,
364   CacheRetention BIGINT UNSIGNED DEFAULT 0,
365   VolUseDuration BIGINT UNSIGNED DEFAULT 0,
366   MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
367   MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
368   MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
369   MaxPoolBytes BIGINT UNSIGNED DEFAULT 0,
370   AutoPrune TINYINT DEFAULT 0,
371   Recycle TINYINT DEFAULT 0,
372   ActionOnPurge     TINYINT	DEFAULT 0,
373   PoolType VARCHAR(20) NOT NULL,
374   LabelType TINYINT DEFAULT 0,
375   LabelFormat VARCHAR(128) NOT NULL,
376   Enabled TINYINT DEFAULT 1,
377   ScratchPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
378   RecyclePoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
379   NextPoolId INTEGER UNSIGNED REFERENCES Pool DEFAULT 0,
380   MigrationHighBytes BIGINT UNSIGNED DEFAULT 0,
381   MigrationLowBytes BIGINT UNSIGNED DEFAULT 0,
382   MigrationTime BIGINT UNSIGNED DEFAULT 0,
383   UNIQUE (Name),
384   PRIMARY KEY (PoolId)
385   );
386
387
388CREATE TABLE Client (
389   ClientId INTEGER,
390   Name VARCHAR(128) NOT NULL,
391   Uname VARCHAR(255) NOT NULL,   -- uname -a field
392   AutoPrune TINYINT DEFAULT 0,
393   FileRetention BIGINT UNSIGNED DEFAULT 0,
394   JobRetention  BIGINT UNSIGNED DEFAULT 0,
395   UNIQUE (Name),
396   PRIMARY KEY(ClientId)
397   );
398
399CREATE TABLE BaseFiles (
400   BaseId BIGINT,
401   BaseJobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
402   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
403   FileId INTEGER UNSIGNED REFERENCES File NOT NULL,
404   FileIndex INTEGER DEFAULT 0,
405   PRIMARY KEY(BaseId)
406   );
407
408CREATE INDEX basefiles_jobid_idx ON BaseFiles ( JobId );
409
410CREATE TABLE UnsavedFiles (
411   UnsavedId INTEGER,
412   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
413   PathId INTEGER UNSIGNED REFERENCES Path NOT NULL,
414   Filename TEXT NOT NULL,
415   PRIMARY KEY (UnsavedId)
416   );
417
418
419CREATE TABLE NextId (
420   id INTEGER UNSIGNED DEFAULT 0,
421   TableName TEXT NOT NULL,
422   PRIMARY KEY (TableName)
423   );
424
425
426
427-- Initialize JobId to start at 1
428INSERT INTO NextId (id, TableName) VALUES (1, 'Job');
429
430CREATE TABLE Version (
431   VersionId INTEGER UNSIGNED NOT NULL 
432   );
433
434
435CREATE TABLE Counters (
436   Counter TEXT NOT NULL,     
437   MinValue INTEGER DEFAULT 0, 
438   MaxValue INTEGER DEFAULT 0,
439   CurrentValue INTEGER DEFAULT 0,
440   WrapCounter TEXT NOT NULL,
441   PRIMARY KEY (Counter)
442   );
443
444CREATE TABLE CDImages (
445   MediaId INTEGER UNSIGNED NOT NULL,
446   LastBurn DATETIME NOT NULL,
447   PRIMARY KEY (MediaId)
448   );
449
450CREATE TABLE PathHierarchy
451(
452     PathId integer NOT NULL,
453     PPathId integer NOT NULL,
454     CONSTRAINT pathhierarchy_pkey PRIMARY KEY (PathId)
455);
456
457CREATE INDEX pathhierarchy_ppathid 
458	  ON PathHierarchy (PPathId);
459
460CREATE TABLE PathVisibility
461(
462      PathId integer NOT NULL,
463      JobId integer NOT NULL,
464      Size int8 DEFAULT 0,
465      Files int4 DEFAULT 0,
466      CONSTRAINT pathvisibility_pkey PRIMARY KEY (JobId, PathId)
467);
468
469CREATE INDEX pathvisibility_jobid
470	  ON PathVisibility (JobId);
471
472
473CREATE TABLE Snapshot (
474  SnapshotId	  serial,
475  Name		  text NOT NULL,
476  JobId 	  integer default 0,
477  FileSetId	  integer default 0,
478  CreateTDate	  bigint default 0,
479  CreateDate	  datetime not null,
480  ClientId	  int default 0,
481  Volume	  text not null,
482  Device	  text not null,
483  Type		  text not null,
484  Retention	  int default 0,
485  Comment	  text,
486  primary key (SnapshotId)
487);
488
489CREATE UNIQUE INDEX snapshot_idx ON Snapshot (Device, Volume, Name);
490
491CREATE TABLE Status (
492   JobStatus CHAR(1) NOT NULL,
493   JobStatusLong BLOB, 
494   Severity INT,
495   PRIMARY KEY (JobStatus)
496   );
497
498INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
499   ('C', 'Created, not yet running',15);
500INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
501   ('R', 'Running',15);
502INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
503   ('B', 'Blocked',15);
504INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
505   ('T', 'Completed successfully', 10);
506INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
507   ('E', 'Terminated with errors', 25);
508INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
509   ('e', 'Non-fatal error',20);
510INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
511   ('f', 'Fatal error',100);
512INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
513   ('D', 'Verify found differences',15);
514INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
515   ('A', 'Canceled by user',90);
516INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
517   ('F', 'Waiting for Client',15);
518INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
519   ('S', 'Waiting for Storage daemon',15);
520INSERT INTO Status (JobStatus,JobStatusLong) VALUES
521   ('m', 'Waiting for new media');
522INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
523   ('M', 'Waiting for media mount',15);
524INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
525   ('s', 'Waiting for storage resource',15);
526INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
527   ('j', 'Waiting for job resource',15);
528INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
529   ('c', 'Waiting for client resource',15);
530INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
531   ('d', 'Waiting on maximum jobs',15);
532INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
533   ('t', 'Waiting on start time',15);
534INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
535   ('p', 'Waiting on higher priority jobs',15);
536INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
537   ('a', 'SD despooling attributes',15);
538INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
539   ('i', 'Doing batch insert file records',15);
540INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
541   ('I', 'Incomplete Job',25);
542
543-- Initialize Version		 
544INSERT INTO Version (VersionId) VALUES (1022);
545
546PRAGMA default_cache_size = 100000;
547PRAGMA synchronous = NORMAL;
548
549END-OF-DATA
550
551echo ""
552echo "WARNING: !!!! SQLite3 is no longer supported. !!!!"
553echo "WARNING: !!!! Please switch to MySQL or PostgreSQL !!!!"
554echo "WARNING: !!!!  as soon as possible. !!!!"
555echo ""
556
557chmod 640 ${db_name}.db
558exit 0
559