1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-09-15 18:57:04 +00:00

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
This commit is contained in:
jvoisin 2025-09-06 14:51:23 +02:00
parent e8f5c2446c
commit 5a23fcc3b8

View file

@ -123,13 +123,8 @@ var migrations = []func(tx *sql.Tx) error{
return err return err
}, },
func(tx *sql.Tx) (err error) { func(tx *sql.Tx) (err error) {
sql := ` // This used to create a hstore `extra` column in the table `users`
CREATE EXTENSION IF NOT EXISTS hstore; return nil
ALTER TABLE users ADD COLUMN extra hstore;
CREATE INDEX users_extra_idx ON users using gin(extra);
`
_, err = tx.Exec(sql)
return err
}, },
func(tx *sql.Tx) (err error) { func(tx *sql.Tx) (err error) {
sql := ` sql := `
@ -436,6 +431,18 @@ var migrations = []func(tx *sql.Tx) error{
return err return err
}, },
func(tx *sql.Tx) (err error) { func(tx *sql.Tx) (err error) {
hasExtra := false
if err := tx.QueryRow(`
SELECT true
FROM information_schema.columns
WHERE
table_name='user' AND
column_name='extra';
`).Scan(&hasExtra); err != nil && err != sql.ErrNoRows {
return err
}
_, err = tx.Exec(` _, err = tx.Exec(`
ALTER TABLE users ALTER TABLE users
ADD column stylesheet text not null default '', ADD column stylesheet text not null default '',
@ -446,6 +453,11 @@ var migrations = []func(tx *sql.Tx) error{
return err return err
} }
if !hasExtra {
// No need to migrate things from the `extra` column if it's not present
return nil
}
_, err = tx.Exec(` _, err = tx.Exec(`
DECLARE my_cursor CURSOR FOR DECLARE my_cursor CURSOR FOR
SELECT SELECT
@ -495,9 +507,21 @@ var migrations = []func(tx *sql.Tx) error{
return err return err
}, },
func(tx *sql.Tx) (err error) { func(tx *sql.Tx) (err error) {
if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN extra;`); err != nil { hasExtra := false
if err := tx.QueryRow(`
SELECT true
FROM information_schema.columns
WHERE
table_name='user' AND
column_name='extra';
`).Scan(&hasExtra); err != nil && err != sql.ErrNoRows {
return err return err
} }
if hasExtra {
if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN extra;`); err != nil {
return err
}
}
_, err = tx.Exec(` _, err = tx.Exec(`
CREATE UNIQUE INDEX users_google_id_idx ON users(google_id) WHERE google_id <> ''; CREATE UNIQUE INDEX users_google_id_idx ON users(google_id) WHERE google_id <> '';
CREATE UNIQUE INDEX users_openid_connect_id_idx ON users(openid_connect_id) WHERE openid_connect_id <> ''; CREATE UNIQUE INDEX users_openid_connect_id_idx ON users(openid_connect_id) WHERE openid_connect_id <> '';
@ -1151,4 +1175,9 @@ var migrations = []func(tx *sql.Tx) error{
_, err = tx.Exec(sql) _, err = tx.Exec(sql)
return err return err
}, },
func(tx *sql.Tx) (err error) {
sql := `DROP EXTENSION IF EXISTS hstore;`
_, err = tx.Exec(sql)
return err
},
} }