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

This commit is contained in:
“Naeel”
2026-07-09 00:26:31 +04:00
parent e26c91e4e0
commit 42755f7d4d
2 changed files with 13 additions and 2 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ipwhitelist",
"version": "0.1.19",
"version": "0.1.20",
"description": "IP WhiteList microservice for cloud provider",
"main": "server.js",
"scripts": {
+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