Skip to content

Commit 3dcf572

Browse files
committed
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
1 parent 8adcaed commit 3dcf572

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

internal/database/migrations.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,9 @@ var migrations = [...]func(tx *sql.Tx) error{
123123
return err
124124
},
125125
func(tx *sql.Tx) (err error) {
126-
sql := `
127-
CREATE EXTENSION IF NOT EXISTS hstore;
128-
ALTER TABLE users ADD COLUMN extra hstore;
129-
CREATE INDEX users_extra_idx ON users using gin(extra);
130-
`
131-
_, err = tx.Exec(sql)
132-
return err
126+
// This used to create a HSTORE `extra` column in the table `users`,
127+
// which hasn't been used since Miniflux 2.0.27.
128+
return nil
133129
},
134130
func(tx *sql.Tx) (err error) {
135131
sql := `
@@ -436,6 +432,18 @@ var migrations = [...]func(tx *sql.Tx) error{
436432
return err
437433
},
438434
func(tx *sql.Tx) (err error) {
435+
436+
hasExtra := false
437+
if err := tx.QueryRow(`
438+
SELECT true
439+
FROM information_schema.columns
440+
WHERE
441+
table_name='users' AND
442+
column_name='extra';
443+
`).Scan(&hasExtra); err != nil && err != sql.ErrNoRows {
444+
return err
445+
}
446+
439447
_, err = tx.Exec(`
440448
ALTER TABLE users
441449
ADD column stylesheet text not null default '',
@@ -446,6 +454,11 @@ var migrations = [...]func(tx *sql.Tx) error{
446454
return err
447455
}
448456

457+
if !hasExtra {
458+
// No need to migrate things from the `extra` column if it's not present
459+
return nil
460+
}
461+
449462
_, err = tx.Exec(`
450463
DECLARE my_cursor CURSOR FOR
451464
SELECT
@@ -495,7 +508,7 @@ var migrations = [...]func(tx *sql.Tx) error{
495508
return err
496509
},
497510
func(tx *sql.Tx) (err error) {
498-
if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN extra;`); err != nil {
511+
if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN IF EXISTS extra;`); err != nil {
499512
return err
500513
}
501514
_, err = tx.Exec(`
@@ -1348,4 +1361,9 @@ var migrations = [...]func(tx *sql.Tx) error{
13481361
_, err = tx.Exec(sql)
13491362
return err
13501363
},
1364+
func(tx *sql.Tx) (err error) {
1365+
sql := `DROP EXTENSION IF EXISTS hstore;`
1366+
_, err = tx.Exec(sql)
1367+
return err
1368+
},
13511369
}

0 commit comments

Comments
 (0)