Миграции: _migrations + applyMigrations + sql/migrations/

APP_ENV: test/production с жёлтым баннером в UI
Config: версия 0.1.12
This commit is contained in:
2026-07-08 07:11:16 +04:00
parent 7982a82286
commit 591a4c3216
12 changed files with 151 additions and 35 deletions
@@ -0,0 +1,4 @@
-- 001: Добавить колонку impersonated_by в audit_log
-- Дата: 2026-06 (была добавлена в ensureSchema вручную)
ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS impersonated_by VARCHAR(255) DEFAULT NULL;
+18
View File
@@ -0,0 +1,18 @@
-- 002: Добавить значение RESTORE в CHECK-констрейнт audit_log.action
-- Дата: 2026-06 (до этого CHECK допускал только CREATE, UPDATE, DELETE)
-- Сначала удаляем старый CHECK, потом создаём новый со значением RESTORE
DO $$
DECLARE
cn text;
BEGIN
SELECT con.conname INTO cn
FROM pg_constraint con
JOIN pg_class rel ON rel.oid = con.conrelid
WHERE rel.relname = 'audit_log' AND con.contype = 'c';
IF cn IS NOT NULL THEN
EXECUTE 'ALTER TABLE audit_log DROP CONSTRAINT ' || cn;
END IF;
EXECUTE 'ALTER TABLE audit_log ADD CONSTRAINT audit_log_action_check CHECK (action IN (''CREATE'',''UPDATE'',''DELETE'',''RESTORE''))';
END;
$$;
+16
View File
@@ -0,0 +1,16 @@
# Миграции БД
Каждый файл — одна миграция. Применяются при старте приложения автоматически в порядке сортировки имён.
## Как добавить новую миграцию
1. Создать файл `{номер}_{описание}.sql` в этой папке
2. Номер должен быть следующим (003, 004, ...)
3. SQL должен быть идемпотентным (`IF NOT EXISTS` где возможно)
4. Закоммитить и запушнуть
## Важно
- Миграции выполняются **один раз**. После применения имя файла записывается в таблицу `_migrations`.
- Уже работающие миграции не перезапускаются — если нужно что-то изменить, создавай новую миграцию, не редактируй старую.
- Все DDL должны быть безопасны для повторного запуска — используй `IF NOT EXISTS`, `ADD COLUMN IF NOT EXISTS`.