fix: make migration 050 idempotent to handle partially applied state

Use stored procedure with IF NOT EXISTS checks to avoid duplicate column
errors when the migration was partially applied but not recorded by goose.
This commit is contained in:
orris-inc
2026-02-06 11:05:36 +08:00
parent 8e3e65d387
commit 91c04ff325

View File

@@ -1,17 +1,42 @@
-- +goose Up
-- +goose StatementBegin
ALTER TABLE admin_telegram_bindings
ADD COLUMN daily_summary_hour INT NOT NULL DEFAULT 9,
ADD COLUMN weekly_summary_hour INT NOT NULL DEFAULT 9,
ADD COLUMN weekly_summary_weekday INT NOT NULL DEFAULT 1,
ADD COLUMN offline_check_interval_minutes INT NOT NULL DEFAULT 5;
DROP PROCEDURE IF EXISTS add_schedule_config_fields;
-- +goose StatementEnd
-- +goose StatementBegin
CREATE PROCEDURE add_schedule_config_fields()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'admin_telegram_bindings' AND column_name = 'daily_summary_hour') THEN
ALTER TABLE admin_telegram_bindings ADD COLUMN daily_summary_hour INT NOT NULL DEFAULT 9;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'admin_telegram_bindings' AND column_name = 'weekly_summary_hour') THEN
ALTER TABLE admin_telegram_bindings ADD COLUMN weekly_summary_hour INT NOT NULL DEFAULT 9;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'admin_telegram_bindings' AND column_name = 'weekly_summary_weekday') THEN
ALTER TABLE admin_telegram_bindings ADD COLUMN weekly_summary_weekday INT NOT NULL DEFAULT 1;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'admin_telegram_bindings' AND column_name = 'offline_check_interval_minutes') THEN
ALTER TABLE admin_telegram_bindings ADD COLUMN offline_check_interval_minutes INT NOT NULL DEFAULT 5;
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
CALL add_schedule_config_fields();
-- +goose StatementEnd
-- +goose StatementBegin
DROP PROCEDURE IF EXISTS add_schedule_config_fields;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
ALTER TABLE admin_telegram_bindings
DROP COLUMN daily_summary_hour,
DROP COLUMN weekly_summary_hour,
DROP COLUMN weekly_summary_weekday,
DROP COLUMN offline_check_interval_minutes;
DROP COLUMN IF EXISTS daily_summary_hour,
DROP COLUMN IF EXISTS weekly_summary_hour,
DROP COLUMN IF EXISTS weekly_summary_weekday,
DROP COLUMN IF EXISTS offline_check_interval_minutes;
-- +goose StatementEnd