
Replace GORM's auto-migration with Goose. The latter uses hand-written SQL queries to apply database schema changes, which is safer and easier to understand than what GORM is doing.
150 lines
5.8 KiB
SQL
150 lines
5.8 KiB
SQL
-- This is the initial Goose migration for Flamenco Manager. It recreates the
|
|
-- schema that might exist already, hence the "IF NOT EXISTS" clauses.
|
|
--
|
|
-- WARNING: the 'Down' step will erase the entire database.
|
|
--
|
|
-- +goose Up
|
|
CREATE TABLE IF NOT EXISTS `job_storage_infos` (`shaman_checkout_id` varchar(255) DEFAULT "");
|
|
CREATE TABLE IF NOT EXISTS `last_rendereds` (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`job_id` integer DEFAULT 0,
|
|
PRIMARY KEY (`id`),
|
|
CONSTRAINT `fk_last_rendereds_job` FOREIGN KEY (`job_id`) REFERENCES `jobs`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS `task_dependencies` (
|
|
`task_id` integer,
|
|
`dependency_id` integer,
|
|
PRIMARY KEY (`task_id`, `dependency_id`),
|
|
CONSTRAINT `fk_task_dependencies_task` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE,
|
|
CONSTRAINT `fk_task_dependencies_dependencies` FOREIGN KEY (`dependency_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS `task_failures` (
|
|
`created_at` datetime,
|
|
`task_id` integer,
|
|
`worker_id` integer,
|
|
PRIMARY KEY (`task_id`, `worker_id`),
|
|
CONSTRAINT `fk_task_failures_task` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE,
|
|
CONSTRAINT `fk_task_failures_worker` FOREIGN KEY (`worker_id`) REFERENCES `workers`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS `worker_tag_membership` (
|
|
`worker_tag_id` integer,
|
|
`worker_id` integer,
|
|
PRIMARY KEY (`worker_tag_id`, `worker_id`),
|
|
CONSTRAINT `fk_worker_tag_membership_worker_tag` FOREIGN KEY (`worker_tag_id`) REFERENCES `worker_tags`(`id`) ON DELETE CASCADE,
|
|
CONSTRAINT `fk_worker_tag_membership_worker` FOREIGN KEY (`worker_id`) REFERENCES `workers`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "worker_tags" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`uuid` char(36) UNIQUE DEFAULT "",
|
|
`name` varchar(64) UNIQUE DEFAULT "",
|
|
`description` varchar(255) DEFAULT "",
|
|
PRIMARY KEY (`id`)
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "jobs" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`uuid` char(36) UNIQUE DEFAULT "",
|
|
`name` varchar(64) DEFAULT "",
|
|
`job_type` varchar(32) DEFAULT "",
|
|
`priority` smallint DEFAULT 0,
|
|
`status` varchar(32) DEFAULT "",
|
|
`activity` varchar(255) DEFAULT "",
|
|
`settings` jsonb,
|
|
`metadata` jsonb,
|
|
`delete_requested_at` datetime,
|
|
`storage_shaman_checkout_id` varchar(255) DEFAULT "",
|
|
`worker_tag_id` integer,
|
|
PRIMARY KEY (`id`),
|
|
CONSTRAINT `fk_jobs_worker_tag` FOREIGN KEY (`worker_tag_id`) REFERENCES `worker_tags`(`id`) ON DELETE
|
|
SET NULL
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "workers" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`deleted_at` datetime,
|
|
`uuid` char(36) UNIQUE DEFAULT "",
|
|
`secret` varchar(255) DEFAULT "",
|
|
`name` varchar(64) DEFAULT "",
|
|
`address` varchar(39) DEFAULT "",
|
|
`platform` varchar(16) DEFAULT "",
|
|
`software` varchar(32) DEFAULT "",
|
|
`status` varchar(16) DEFAULT "",
|
|
`last_seen_at` datetime,
|
|
`status_requested` varchar(16) DEFAULT "",
|
|
`lazy_status_request` smallint DEFAULT false,
|
|
`supported_task_types` varchar(255) DEFAULT "",
|
|
`can_restart` smallint DEFAULT false,
|
|
PRIMARY KEY (`id`)
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "job_blocks" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`job_id` integer DEFAULT 0,
|
|
`worker_id` integer DEFAULT 0,
|
|
`task_type` text,
|
|
PRIMARY KEY (`id`),
|
|
CONSTRAINT `fk_job_blocks_job` FOREIGN KEY (`job_id`) REFERENCES `jobs`(`id`) ON DELETE CASCADE,
|
|
CONSTRAINT `fk_job_blocks_worker` FOREIGN KEY (`worker_id`) REFERENCES `workers`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "sleep_schedules" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`worker_id` integer UNIQUE DEFAULT 0,
|
|
`is_active` numeric DEFAULT false,
|
|
`days_of_week` text DEFAULT "",
|
|
`start_time` text DEFAULT "",
|
|
`end_time` text DEFAULT "",
|
|
`next_check` datetime,
|
|
PRIMARY KEY (`id`),
|
|
CONSTRAINT `fk_sleep_schedules_worker` FOREIGN KEY (`worker_id`) REFERENCES `workers`(`id`) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE IF NOT EXISTS "tasks" (
|
|
`id` integer,
|
|
`created_at` datetime,
|
|
`updated_at` datetime,
|
|
`uuid` char(36) UNIQUE DEFAULT "",
|
|
`name` varchar(64) DEFAULT "",
|
|
`type` varchar(32) DEFAULT "",
|
|
`job_id` integer DEFAULT 0,
|
|
`priority` smallint DEFAULT 50,
|
|
`status` varchar(16) DEFAULT "",
|
|
`worker_id` integer,
|
|
`last_touched_at` datetime,
|
|
`commands` jsonb,
|
|
`activity` varchar(255) DEFAULT "",
|
|
PRIMARY KEY (`id`),
|
|
CONSTRAINT `fk_tasks_job` FOREIGN KEY (`job_id`) REFERENCES `jobs`(`id`) ON DELETE CASCADE,
|
|
CONSTRAINT `fk_tasks_worker` FOREIGN KEY (`worker_id`) REFERENCES `workers`(`id`) ON DELETE
|
|
SET NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS `idx_worker_tags_uuid` ON `worker_tags`(`uuid`);
|
|
CREATE INDEX IF NOT EXISTS `idx_jobs_uuid` ON `jobs`(`uuid`);
|
|
CREATE INDEX IF NOT EXISTS `idx_workers_address` ON `workers`(`address`);
|
|
CREATE INDEX IF NOT EXISTS `idx_workers_last_seen_at` ON `workers`(`last_seen_at`);
|
|
CREATE INDEX IF NOT EXISTS `idx_workers_deleted_at` ON `workers`(`deleted_at`);
|
|
CREATE INDEX IF NOT EXISTS `idx_workers_uuid` ON `workers`(`uuid`);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS `job_worker_tasktype` ON `job_blocks`(`job_id`, `worker_id`, `task_type`);
|
|
CREATE INDEX IF NOT EXISTS `idx_sleep_schedules_is_active` ON `sleep_schedules`(`is_active`);
|
|
CREATE INDEX IF NOT EXISTS `idx_sleep_schedules_worker_id` ON `sleep_schedules`(`worker_id`);
|
|
CREATE INDEX IF NOT EXISTS `idx_tasks_uuid` ON `tasks`(`uuid`);
|
|
CREATE INDEX IF NOT EXISTS `idx_tasks_last_touched_at` ON `tasks`(`last_touched_at`);
|
|
-- +goose Down
|
|
DROP TABLE `job_storage_infos`;
|
|
DROP TABLE `last_rendereds`;
|
|
DROP TABLE `task_dependencies`;
|
|
DROP TABLE `task_failures`;
|
|
DROP TABLE `worker_tag_membership`;
|
|
DROP TABLE `worker_tags`;
|
|
DROP TABLE `jobs`;
|
|
DROP TABLE `workers`;
|
|
DROP TABLE `job_blocks`;
|
|
DROP TABLE `sleep_schedules`;
|
|
DROP TABLE `tasks`;
|