mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-31 07:30:32 +00:00
fix(db): address PR comments around speed of the migration
This commit is contained in:
parent
8e291ff7d5
commit
f364db5ffc
@ -1,7 +1,20 @@
|
|||||||
-- +goose Up
|
-- +goose Up
|
||||||
-- +goose StatementBegin
|
-- +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
|
-- 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
|
CREATE TABLE library_artist_new
|
||||||
(
|
(
|
||||||
library_id integer NOT NULL DEFAULT 1
|
library_id integer NOT NULL DEFAULT 1
|
||||||
@ -20,6 +33,8 @@ DROP TABLE library_artist;
|
|||||||
ALTER TABLE library_artist_new RENAME TO library_artist;
|
ALTER TABLE library_artist_new RENAME TO library_artist;
|
||||||
|
|
||||||
-- Fix scrobble_buffer table: Remove duplicate user_id from unique constraint
|
-- 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
|
CREATE TABLE scrobble_buffer_new
|
||||||
(
|
(
|
||||||
user_id varchar NOT NULL
|
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);
|
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 StatementEnd
|
||||||
|
|
||||||
-- +goose Down
|
-- +goose Down
|
||||||
-- +goose StatementBegin
|
-- +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)
|
-- Restore library_artist table with original schema (including the contradictory default null)
|
||||||
CREATE TABLE library_artist_new
|
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);
|
CREATE UNIQUE INDEX scrobble_buffer_id_ix ON scrobble_buffer (id);
|
||||||
|
|
||||||
|
PRAGMA foreign_keys = ON;
|
||||||
|
|
||||||
-- +goose StatementEnd
|
-- +goose StatementEnd
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user