From 3dcf5721079cbe8c7865b0b027a7e8ba2f38228b Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 6 Sep 2025 14:51:23 +0200 Subject: [PATCH] refactor(database): get rid of the dependency on hstore The hstore extension was briefly used at some point by miniflux, but not anymore. Yet it's still required to deploy miniflux, as a hstore column is created then destroyed during the database creation/migration. This commit refactor the migrations (scary!) to get rid of hstore, so that it doesn't need to be installed/present when deploying/running miniflux. This should close #3759 --- internal/database/migrations.go | 34 +++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/internal/database/migrations.go b/internal/database/migrations.go index e9c2a4a1..aeb43414 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -123,13 +123,9 @@ var migrations = [...]func(tx *sql.Tx) error{ return err }, func(tx *sql.Tx) (err error) { - sql := ` - CREATE EXTENSION IF NOT EXISTS hstore; - ALTER TABLE users ADD COLUMN extra hstore; - CREATE INDEX users_extra_idx ON users using gin(extra); - ` - _, err = tx.Exec(sql) - return err + // This used to create a HSTORE `extra` column in the table `users`, + // which hasn't been used since Miniflux 2.0.27. + return nil }, func(tx *sql.Tx) (err error) { sql := ` @@ -436,6 +432,18 @@ var migrations = [...]func(tx *sql.Tx) error{ return err }, func(tx *sql.Tx) (err error) { + + hasExtra := false + if err := tx.QueryRow(` + SELECT true + FROM information_schema.columns + WHERE + table_name='users' AND + column_name='extra'; + `).Scan(&hasExtra); err != nil && err != sql.ErrNoRows { + return err + } + _, err = tx.Exec(` ALTER TABLE users ADD column stylesheet text not null default '', @@ -446,6 +454,11 @@ var migrations = [...]func(tx *sql.Tx) error{ return err } + if !hasExtra { + // No need to migrate things from the `extra` column if it's not present + return nil + } + _, err = tx.Exec(` DECLARE my_cursor CURSOR FOR SELECT @@ -495,7 +508,7 @@ var migrations = [...]func(tx *sql.Tx) error{ return err }, func(tx *sql.Tx) (err error) { - if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN extra;`); err != nil { + if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN IF EXISTS extra;`); err != nil { return err } _, err = tx.Exec(` @@ -1348,4 +1361,9 @@ var migrations = [...]func(tx *sql.Tx) error{ _, err = tx.Exec(sql) return err }, + func(tx *sql.Tx) (err error) { + sql := `DROP EXTENSION IF EXISTS hstore;` + _, err = tx.Exec(sql) + return err + }, }