From 11b491d6d386aec36e45e69f6319b04dfb729afb Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 26 Sep 2026 15:16:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(db):=20=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20OAuth=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B6=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D1=83=D0=B6=D0=B5=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=BD=D1=83=D1=8E=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На стенде таблицу oauth_accounts успела создать промежуточная редакция миграции 00018 (в ней passkeys и OAuth жили одним файлом), при этом версия 00018 записалась, а 00019 — нет: при обновлении инстанс падал в цикле перезапуска на «table oauth_accounts already exists». CREATE TABLE/INDEX IF NOT EXISTS делают миграцию идемпотентной: на чистой базе она по-прежнему создаёт таблицу, на стенде — просто фиксирует версию. --- internal/database/migrations/00019_phase7_oauth.sql | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/database/migrations/00019_phase7_oauth.sql b/internal/database/migrations/00019_phase7_oauth.sql index 1a46bcc..6fc6eed 100644 --- a/internal/database/migrations/00019_phase7_oauth.sql +++ b/internal/database/migrations/00019_phase7_oauth.sql @@ -6,8 +6,12 @@ -- "provider:subject"), email — тоже индексом: сырых PII в таблице нет -- (AGENT.md 9.2). Токены провайдеров не сохраняются вовсе: они нужны только -- на время обмена кода на профиль. +-- +-- `IF NOT EXISTS` — страховка от частично применённой миграции: на стенде +-- таблицу успела создать промежуточная редакция 00018 (в ней обе таблицы +-- жили вместе), и без этого инстанс не поднимался после обновления. -CREATE TABLE oauth_accounts ( +CREATE TABLE IF NOT EXISTS oauth_accounts ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, provider TEXT NOT NULL, @@ -17,7 +21,7 @@ CREATE TABLE oauth_accounts ( last_login_at TEXT, 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 -DROP TABLE oauth_accounts; +DROP TABLE IF EXISTS oauth_accounts;