fix(db): address PR comments around speed of the migration

This commit is contained in:
Barend van der Walt 2026-02-13 22:18:24 +01:00
parent 8e291ff7d5
commit f364db5ffc
No known key found for this signature in database

View File

@ -1,7 +1,20 @@
-- +goose Up
-- +goose StatementBegin
-- NOTE: This migration recreates two tables to fix schema inconsistencies.
-- On large production databases, the data copy may take some time as tables are locked during the transaction.
-- This is necessary because SQLite does not support altering table constraints directly.
-- Consider applying this migration during a maintenance window if the tables are large.
-- Performance optimization: Temporarily disable foreign key constraints during schema rebuild
-- They are re-enabled automatically at the end of the transaction
PRAGMA foreign_keys = OFF;
-- Increase cache size temporarily for faster data operations
PRAGMA cache_size = 10000;
-- Fix library_artist table: Remove contradictory 'default null' from 'not null' column
-- This is a cosmetic fix (NOT NULL takes precedence), but improves schema consistency
CREATE TABLE library_artist_new
(
library_id integer NOT NULL DEFAULT 1
@ -20,6 +33,8 @@ DROP TABLE library_artist;
ALTER TABLE library_artist_new RENAME TO library_artist;
-- Fix scrobble_buffer table: Remove duplicate user_id from unique constraint
-- Original constraint had: UNIQUE (user_id, service, media_file_id, play_time, user_id)
-- Fixed constraint is: UNIQUE (user_id, service, media_file_id, play_time)
CREATE TABLE scrobble_buffer_new
(
user_id varchar NOT NULL
@ -44,11 +59,18 @@ ALTER TABLE scrobble_buffer_new RENAME TO scrobble_buffer;
CREATE UNIQUE INDEX scrobble_buffer_id_ix ON scrobble_buffer (id);
-- Re-enable foreign key constraints (automatic but explicit for clarity)
PRAGMA foreign_keys = ON;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
-- Apply same performance optimizations for rollback
PRAGMA foreign_keys = OFF;
PRAGMA cache_size = 10000;
-- Restore library_artist table with original schema (including the contradictory default null)
CREATE TABLE library_artist_new
(
@ -92,4 +114,6 @@ ALTER TABLE scrobble_buffer_new RENAME TO scrobble_buffer;
CREATE UNIQUE INDEX scrobble_buffer_id_ix ON scrobble_buffer (id);
PRAGMA foreign_keys = ON;
-- +goose StatementEnd