Fix: DO$$ блок проверяет RESTORE перед DROP — идемпотентно. Версия 0.1.20

This commit is contained in:
2026-07-09 00:26:31 +04:00
parent 2390c655f9
commit 3e15fd4973
3 changed files with 14 additions and 3 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
// ═══════════════════════════════════════════════════════════════════════════════
module.exports = {
version: '0.1.19',
version: '0.1.20',
// ── Среда ─────────────────────────────────────────────────────────────────
// APP_ENV=test → тестовый стенд (жёлтый баннер в UI, можно включать тестовый API)
+12 -1
View File
@@ -65,12 +65,23 @@ async function ensureSchema(pool) {
ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS impersonated_by VARCHAR(255) DEFAULT NULL
`).catch(() => {});
// Миграция: добавить RESTORE в CHECK (если ещё нет)
// Миграция: добавить RESTORE в CHECK — только если ещё нет (без DROP+ADD каждый раз)
await pool.query(`
DO $$
DECLARE
cn text;
has_restore boolean;
BEGIN
-- Проверяем, есть ли уже RESTORE в constraint
SELECT con.consrc LIKE '%RESTORE%' OR pg_get_constraintdef(con.oid) LIKE '%RESTORE%' INTO has_restore
FROM pg_constraint con
JOIN pg_class rel ON rel.oid = con.conrelid
WHERE rel.relname = 'audit_log' AND con.contype = 'c';
-- Если уже есть — ничего не делаем
IF has_restore THEN
RAISE NOTICE 'audit_log CHECK already includes RESTORE, skipping';
RETURN;
END IF;
SELECT con.conname INTO cn
FROM pg_constraint con
JOIN pg_class rel ON rel.oid = con.conrelid