@deinossrl/dgp-agent 1.5.27 → 1.5.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.mjs +39 -3
- package/package.json +1 -1
package/index.mjs
CHANGED
|
@@ -2402,6 +2402,7 @@ async function executePgRestore(command) {
|
|
|
2402
2402
|
// Pero requiere query previo.
|
|
2403
2403
|
|
|
2404
2404
|
// SI EL USUARIO NO ES OWNER, NO PUEDE BORRAR EL SCHEMA.
|
|
2405
|
+
const projectRef = target_environment.supabase_project_ref;
|
|
2405
2406
|
// PERO SÍ PUEDE BORRAR LAS TABLAS SI ES OWNER DE LAS TABLAS.
|
|
2406
2407
|
|
|
2407
2408
|
// Vamos a inyectar un comando SQL que haga el Loop de borrado de tablas.
|
|
@@ -2412,17 +2413,52 @@ async function executePgRestore(command) {
|
|
|
2412
2413
|
DECLARE
|
|
2413
2414
|
r RECORD;
|
|
2414
2415
|
BEGIN
|
|
2415
|
-
--
|
|
2416
|
+
-- 0. KILL CONNECTIONS (Critical to avoid locking issues causing "failing cascade")
|
|
2417
|
+
-- Intentamos terminar conexiones que no sean la nuestra
|
|
2418
|
+
BEGIN
|
|
2419
|
+
PERFORM pg_terminate_backend(pid)
|
|
2420
|
+
FROM pg_stat_activity
|
|
2421
|
+
WHERE datname = current_database()
|
|
2422
|
+
AND pid <> pg_backend_pid()
|
|
2423
|
+
AND leader_pid IS NULL; -- Solo sesiones principales
|
|
2424
|
+
EXCEPTION WHEN OTHERS THEN
|
|
2425
|
+
RAISE NOTICE 'No se pudieron terminar conexiones (posiblemente falta permisos), continuando...';
|
|
2426
|
+
END;
|
|
2427
|
+
|
|
2428
|
+
-- 1. Drop Materialized Views (Often missed)
|
|
2429
|
+
FOR r IN (SELECT matviewname FROM pg_matviews WHERE schemaname = '${schema}') LOOP
|
|
2430
|
+
EXECUTE 'DROP MATERIALIZED VIEW IF EXISTS "' || '${schema}' || '"."' || r.matviewname || '" CASCADE';
|
|
2431
|
+
END LOOP;
|
|
2432
|
+
|
|
2433
|
+
-- 2. Drop Views
|
|
2434
|
+
FOR r IN (SELECT table_name FROM information_schema.views WHERE table_schema = '${schema}') LOOP
|
|
2435
|
+
EXECUTE 'DROP VIEW IF EXISTS "' || '${schema}' || '"."' || r.table_name || '" CASCADE';
|
|
2436
|
+
END LOOP;
|
|
2437
|
+
|
|
2438
|
+
-- 3. Drop Tables (The Meat)
|
|
2416
2439
|
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = '${schema}') LOOP
|
|
2417
2440
|
EXECUTE 'DROP TABLE IF EXISTS "' || '${schema}' || '"."' || r.tablename || '" CASCADE';
|
|
2418
2441
|
END LOOP;
|
|
2442
|
+
|
|
2443
|
+
-- 4. Drop Types (Enums/Composites)
|
|
2444
|
+
-- Limpiar tipos propios del schema para evitar conflictos de "type already exists"
|
|
2445
|
+
FOR r IN (
|
|
2446
|
+
SELECT t.typname
|
|
2447
|
+
FROM pg_type t
|
|
2448
|
+
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
2449
|
+
WHERE n.nspname = '${schema}'
|
|
2450
|
+
AND t.typtype IN ('e', 'c') -- Enum, Composite
|
|
2451
|
+
) LOOP
|
|
2452
|
+
EXECUTE 'DROP TYPE IF EXISTS "' || '${schema}' || '"."' || r.typname || '" CASCADE';
|
|
2453
|
+
END LOOP;
|
|
2419
2454
|
|
|
2420
|
-
--
|
|
2455
|
+
-- 5. Final Schema Attempt
|
|
2456
|
+
-- Intentar borrar schema si es posible (limpieza total)
|
|
2421
2457
|
BEGIN
|
|
2422
2458
|
EXECUTE 'DROP SCHEMA IF EXISTS "' || '${schema}' || '" CASCADE';
|
|
2423
2459
|
EXECUTE 'CREATE SCHEMA IF NOT EXISTS "' || '${schema}' || '"';
|
|
2424
2460
|
EXCEPTION WHEN OTHERS THEN
|
|
2425
|
-
RAISE NOTICE '
|
|
2461
|
+
RAISE NOTICE 'Schema % preservado (contenido borrado).', '${schema}';
|
|
2426
2462
|
END;
|
|
2427
2463
|
END $$;
|
|
2428
2464
|
`;
|