diff --git a/internal/database/migrations.go b/internal/database/migrations.go index a1858011..229c1a20 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -123,13 +123,8 @@ 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` + return nil }, func(tx *sql.Tx) (err error) { sql := ` @@ -436,6 +431,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='user' 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 +453,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,9 +507,21 @@ 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 { + 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 } + if hasExtra { + if _, err = tx.Exec(`ALTER TABLE users DROP COLUMN extra;`); err != nil { + return err + } + } _, err = tx.Exec(` 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 <> ''; @@ -1151,4 +1175,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 + }, }