> I don't really have an exact explanation but at least the schema seem to
> be created ...

I've been a little bit too rash, database gets created but director was
unable to run a single job ...

```
27-Nov 19:40 xxx JobId 0: Fatal error: sql_create.c:83 Create DB Job
record INSERT INTO Job
(Job,Name,Type,Level,JobStatus,SchedTime,JobTDate,ClientId,Comment)
VALUES
('job_tester.xxx_fs_autotest.2020-11-27_19.40.13_03','job_xxx_fs_autotest','B','F','C','2020-11-27
19:40:13',1606502413,2,'') failed. ERR=Cannot add or update a child row:
a foreign key constraint fails (`bacula`.`Job`, CONSTRAINT `Job_ibfk_2`
FOREIGN KEY (`PoolId`) REFERENCES `Pool` (`PoolId`))
```

... so I consulted sources about the postgresl db structure and found,
that there does not seem to be any FKs in the original/supported schema.
So I went to create another patch and just dropped the REFERENCES from
mysql schema (see the attachment). Director seem to be fully working at
least in our CI with it.

I wonder whether this might be a proper solution which works for everybody:

* it resolved the original issue
* it matches postgresql schema a bit more
* also ClientId types gets synced across all columns in all tables


bodik
--- /usr/share/dbconfig-common/data/bacula-director-mysql/install/mysql	2020-10-01 17:33:19.000000000 +0200
+++ site/profile/files/bacula/server/mysql.sql	2020-11-27 20:44:17.535712338 +0100
@@ -35,9 +35,9 @@
 CREATE TABLE File (
    FileId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    FileIndex INTEGER DEFAULT 0,
-   JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
-   PathId INTEGER UNSIGNED NOT NULL REFERENCES Path,
-   FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename,
+   JobId INTEGER UNSIGNED NOT NULL,
+   PathId INTEGER UNSIGNED NOT NULL,
+   FilenameId INTEGER UNSIGNED NOT NULL,
    DeltaSeq SMALLINT UNSIGNED DEFAULT 0,
    MarkId INTEGER UNSIGNED DEFAULT 0,
    LStat TINYBLOB NOT NULL,
@@ -57,7 +57,7 @@
    ObjectIndex INTEGER DEFAULT 0,
    ObjectType INTEGER DEFAULT 0,
    FileIndex INTEGER DEFAULT 0,
-   JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
+   JobId INTEGER UNSIGNED NOT NULL,
    ObjectCompression INTEGER DEFAULT 0,
    PRIMARY KEY(RestoreObjectId),
    INDEX (JobId)
@@ -90,8 +90,8 @@
 CREATE TABLE Device (
    DeviceId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    Name TINYBLOB NOT NULL,
-   MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType,
-   StorageId INTEGER UNSIGNED DEFAULT 0 REFERENCES Storage,
+   MediaTypeId INTEGER UNSIGNED DEFAULT 0,
+   StorageId INTEGER UNSIGNED DEFAULT 0,
    DevMounts INTEGER UNSIGNED DEFAULT 0,
    DevReadBytes BIGINT UNSIGNED DEFAULT 0,
    DevWriteBytes BIGINT UNSIGNED DEFAULT 0,
@@ -113,7 +113,7 @@
    Name TINYBLOB NOT NULL,
    Type BINARY(1) NOT NULL,
    Level BINARY(1) NOT NULL,
-   ClientId INTEGER DEFAULT 0 REFERENCES Client,
+   ClientId INTEGER UNSIGNED DEFAULT 0,
    JobStatus BINARY(1) NOT NULL,
    SchedTime DATETIME DEFAULT NULL,
    StartTime DATETIME DEFAULT NULL,
@@ -127,9 +127,9 @@
    ReadBytes BIGINT UNSIGNED DEFAULT 0,
    JobErrors INTEGER UNSIGNED DEFAULT 0,
    JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
-   PoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
-   FileSetId INTEGER UNSIGNED DEFAULT 0 REFERENCES FileSet,
-   PriorJobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job,
+   PoolId INTEGER UNSIGNED DEFAULT 0,
+   FileSetId INTEGER UNSIGNED DEFAULT 0,
+   PriorJobId INTEGER UNSIGNED DEFAULT 0,
    PurgedFiles TINYINT DEFAULT 0,
    HasBase TINYINT DEFAULT 0,
    HasCache TINYINT DEFAULT 0,
@@ -149,7 +149,7 @@
    Name TINYBLOB NOT NULL,
    Type BINARY(1) NOT NULL,
    Level BINARY(1) NOT NULL,
-   ClientId INTEGER DEFAULT 0,
+   ClientId INTEGER UNSIGNED DEFAULT 0,
    JobStatus BINARY(1) NOT NULL,
    SchedTime DATETIME DEFAULT NULL,
    StartTime DATETIME DEFAULT NULL,
@@ -189,8 +189,8 @@
    LocLogId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    Date DATETIME DEFAULT NULL,
    Comment BLOB NOT NULL,
-   MediaId INTEGER UNSIGNED DEFAULT 0 REFERENCES Media,
-   LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location,
+   MediaId INTEGER UNSIGNED DEFAULT 0,
+   LocationId INTEGER UNSIGNED DEFAULT 0,
    NewVolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
     'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
    NewEnabled TINYINT,
@@ -209,8 +209,8 @@
 
 CREATE TABLE JobMedia (
    JobMediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
-   JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
-   MediaId INTEGER UNSIGNED NOT NULL REFERENCES Media,
+   JobId INTEGER UNSIGNED NOT NULL,
+   MediaId INTEGER UNSIGNED NOT NULL,
    FirstIndex INTEGER UNSIGNED DEFAULT 0,
    LastIndex INTEGER UNSIGNED DEFAULT 0,
    StartFile INTEGER UNSIGNED DEFAULT 0,
@@ -227,9 +227,9 @@
    MediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    VolumeName TINYBLOB NOT NULL,
    Slot INTEGER DEFAULT 0,
-   PoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
+   PoolId INTEGER UNSIGNED DEFAULT 0,
    MediaType TINYBLOB NOT NULL,
-   MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType,
+   MediaTypeId INTEGER UNSIGNED DEFAULT 0,
    LabelType TINYINT DEFAULT 0,
    FirstWritten DATETIME DEFAULT NULL,
    LastWritten DATETIME DEFAULT NULL,
@@ -262,18 +262,18 @@
    MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
    MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
    InChanger TINYINT DEFAULT 0,
-   StorageId INTEGER UNSIGNED DEFAULT 0 REFERENCES Storage,
-   DeviceId INTEGER UNSIGNED DEFAULT 0 REFERENCES Device,
+   StorageId INTEGER UNSIGNED DEFAULT 0,
+   DeviceId INTEGER UNSIGNED DEFAULT 0,
    MediaAddressing TINYINT DEFAULT 0,
    VolReadTime BIGINT UNSIGNED DEFAULT 0,
    VolWriteTime BIGINT UNSIGNED DEFAULT 0,
    EndFile INTEGER UNSIGNED DEFAULT 0,
    EndBlock INTEGER UNSIGNED DEFAULT 0,
-   LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location,
+   LocationId INTEGER UNSIGNED DEFAULT 0,
    RecycleCount INTEGER UNSIGNED DEFAULT 0,
    InitialWrite DATETIME DEFAULT NULL,
-   ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
-   RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
+   ScratchPoolId INTEGER UNSIGNED DEFAULT 0,
+   RecyclePoolId INTEGER UNSIGNED DEFAULT 0,
    Comment BLOB,
    PRIMARY KEY(MediaId),
    UNIQUE (VolumeName(128)),
@@ -302,9 +302,9 @@
    LabelType TINYINT DEFAULT 0,
    LabelFormat TINYBLOB,
    Enabled TINYINT DEFAULT 1,
-   ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
-   RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
-   NextPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
+   ScratchPoolId INTEGER UNSIGNED DEFAULT 0,
+   RecyclePoolId INTEGER UNSIGNED DEFAULT 0,
+   NextPoolId INTEGER UNSIGNED DEFAULT 0,
    MigrationHighBytes BIGINT UNSIGNED DEFAULT 0,
    MigrationLowBytes BIGINT UNSIGNED DEFAULT 0,
    MigrationTime BIGINT UNSIGNED DEFAULT 0,
@@ -326,7 +326,7 @@
 
 CREATE TABLE Log (
    LogId INTEGER UNSIGNED AUTO_INCREMENT,
-   JobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job,
+   JobId INTEGER UNSIGNED DEFAULT 0,
    Time DATETIME DEFAULT NULL,
    LogText BLOB NOT NULL,
    PRIMARY KEY(LogId),
@@ -336,9 +336,9 @@
 
 CREATE TABLE BaseFiles (
    BaseId BIGINT UNSIGNED AUTO_INCREMENT,
-   BaseJobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
-   JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
-   FileId BIGINT UNSIGNED NOT NULL REFERENCES File,
+   BaseJobId INTEGER UNSIGNED NOT NULL,
+   JobId INTEGER UNSIGNED NOT NULL,
+   FileId BIGINT UNSIGNED NOT NULL,
    FileIndex INTEGER DEFAULT 0,
    PRIMARY KEY(BaseId)
    );
@@ -347,9 +347,9 @@
 
 CREATE TABLE UnsavedFiles (
    UnsavedId INTEGER UNSIGNED AUTO_INCREMENT,
-   JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
-   PathId INTEGER UNSIGNED NOT NULL REFERENCES Path,
-   FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename,
+   JobId INTEGER UNSIGNED NOT NULL,
+   PathId INTEGER UNSIGNED NOT NULL,
+   FilenameId INTEGER UNSIGNED NOT NULL,
    PRIMARY KEY (UnsavedId)
    );

Reply via email to