fix(db): миграция OAuth переживает уже созданную таблицу
На стенде таблицу oauth_accounts успела создать промежуточная редакция миграции 00018 (в ней passkeys и OAuth жили одним файлом), при этом версия 00018 записалась, а 00019 — нет: при обновлении инстанс падал в цикле перезапуска на «table oauth_accounts already exists». CREATE TABLE/INDEX IF NOT EXISTS делают миграцию идемпотентной: на чистой базе она по-прежнему создаёт таблицу, на стенде — просто фиксирует версию.
This commit is contained in:
@@ -6,8 +6,12 @@
|
|||||||
-- "provider:subject"), email — тоже индексом: сырых PII в таблице нет
|
-- "provider:subject"), email — тоже индексом: сырых PII в таблице нет
|
||||||
-- (AGENT.md 9.2). Токены провайдеров не сохраняются вовсе: они нужны только
|
-- (AGENT.md 9.2). Токены провайдеров не сохраняются вовсе: они нужны только
|
||||||
-- на время обмена кода на профиль.
|
-- на время обмена кода на профиль.
|
||||||
|
--
|
||||||
|
-- `IF NOT EXISTS` — страховка от частично применённой миграции: на стенде
|
||||||
|
-- таблицу успела создать промежуточная редакция 00018 (в ней обе таблицы
|
||||||
|
-- жили вместе), и без этого инстанс не поднимался после обновления.
|
||||||
|
|
||||||
CREATE TABLE oauth_accounts (
|
CREATE TABLE IF NOT EXISTS oauth_accounts (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
||||||
provider TEXT NOT NULL,
|
provider TEXT NOT NULL,
|
||||||
@@ -17,7 +21,7 @@ CREATE TABLE oauth_accounts (
|
|||||||
last_login_at TEXT,
|
last_login_at TEXT,
|
||||||
UNIQUE (provider, subject_index)
|
UNIQUE (provider, subject_index)
|
||||||
);
|
);
|
||||||
CREATE INDEX oauth_accounts_user_idx ON oauth_accounts (user_id);
|
CREATE INDEX IF NOT EXISTS oauth_accounts_user_idx ON oauth_accounts (user_id);
|
||||||
|
|
||||||
-- +goose Down
|
-- +goose Down
|
||||||
DROP TABLE oauth_accounts;
|
DROP TABLE IF EXISTS oauth_accounts;
|
||||||
|
|||||||
Reference in New Issue
Block a user