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