From afe53e6b0176ac74882f6205ff2bcd797ddd3e1a Mon Sep 17 00:00:00 2001 From: pashko Date: Tue, 28 Jul 2026 12:29:21 +0800 Subject: [PATCH] Add mhd_task/global/clean_eds_global.sql --- mhd_task/global/clean_eds_global.sql | 146 +++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 mhd_task/global/clean_eds_global.sql diff --git a/mhd_task/global/clean_eds_global.sql b/mhd_task/global/clean_eds_global.sql new file mode 100644 index 0000000..c5043e1 --- /dev/null +++ b/mhd_task/global/clean_eds_global.sql @@ -0,0 +1,146 @@ +-- ============================================================ +-- Скрипт приведения схемы eds_global (с проверкой существования) +-- PostgreSQL 16 +-- ============================================================ + +DO $$ +DECLARE + v_obj_name text; + v_obj_type text; + v_sql text; +BEGIN + RAISE NOTICE '=== Начало приведения схемы eds_global ==='; + + -- Разрешенные таблицы + CREATE TEMP TABLE IF NOT EXISTS allowed_tables AS + SELECT unnest(ARRAY[ + 'accountinggroupmodels', + 'acsdoctypemodels', + 'activitytypemodels', + 'agreementkindmodels', + 'aspersonaltypemodels', + 'authtypemodels', + 'BackgroundServiceStatusModel', + 'capabilitysettingsmodels', + 'casetypemodels', + 'constructionobjectmodels', + 'correspondentmodels', + 'currencymodels', + 'departmentmodels', + 'documentkindmodels', + 'EdsDigitalDocumentTemplateModel', + 'edsagreemententrymodels', + 'edsdoctypemodels', + 'EdsIntegrationSystemDictionaryModel', + 'EdsIntegrationSystemDocTypeModel', + 'EdsIntegrationSystemOstOptionsModel', + 'EdsIntegrationSystemStatusModel', + 'EdsLifecycleModel', + 'edsrepoinfos', + 'edsreturnreasonmodels', + 'edssubtypemodels', + 'EmployeeAttributesStorageModel', + 'employeemodels', + 'eventkindmodels', + 'eventreasonmodels', + 'fixedassetmodels', + 'M4DDictionaryModel', + 'packagelifecyclemodels', + 'PersonnelEmployeeModel', + 'RelationModel', + 'replacementtasklifecyclemodels', + 'reportmodels', + 'returnreasonmodels', + 'RoleInfoModel', + 'ScanStationAllowedRescanStatusModel', + 'ScanStationBatchTypeModel', + 'ScanStationConfidentialityModel', + 'ScanStationCountragentToRnuModel', + 'signaturealgorithmmodel', + 'SubmissionOverdueReasonModel', + 'SystemIntegrityControlItemModel', + 'SystemIntegrityControlModel', + 'SystemIntegrityControlStorageModel', + 'timelimitationmodels', + 'UserHelpModel', + 'uzdodoctypemodels', + 'withdrawtasklifecyclemodels', + 'workingdayscalendarmodels' + ]) AS name; + + -- Разрешенные вьюхи + CREATE TEMP TABLE IF NOT EXISTS allowed_views AS + SELECT unnest(ARRAY[ + 'UserHelpMap', + 'View_AnyDocumentKindMap', + 'View_ArchiveOrganizationMap', + 'View_EdsAgreementEntriesMap', + 'View_EdsDocumentKindMap', + 'View_EmployeePositionMap', + 'View_OrgStructureMap', + 'View_OrgStructureReportMap' + ]) AS name; + + -- ============================================================ + -- Удаление лишних таблиц + -- ============================================================ + RAISE NOTICE '--- Удаление лишних таблиц ---'; + + FOR v_obj_name IN ( + SELECT tablename + FROM pg_catalog.pg_tables + WHERE schemaname = 'eds_global' + AND tablename NOT IN (SELECT name FROM allowed_tables) + ) LOOP + EXECUTE format('DROP TABLE IF EXISTS eds_global.%I CASCADE;', v_obj_name); + RAISE NOTICE ' Удалена таблица: %', v_obj_name; + END LOOP; + + -- ============================================================ + -- Удаление лишних вьюх + -- ============================================================ + RAISE NOTICE '--- Удаление лишних вьюх ---'; + + FOR v_obj_name IN ( + SELECT viewname + FROM pg_catalog.pg_views + WHERE schemaname = 'eds_global' + AND viewname NOT IN (SELECT name FROM allowed_views) + ) LOOP + EXECUTE format('DROP VIEW IF EXISTS eds_global.%I CASCADE;', v_obj_name); + RAISE NOTICE ' Удалена вьюха: %', v_obj_name; + END LOOP; + + -- ============================================================ + -- Очистка временных таблиц + -- ============================================================ + DROP TABLE IF EXISTS allowed_tables; + DROP TABLE IF EXISTS allowed_views; + + -- ============================================================ + -- Финальный отчет + -- ============================================================ + RAISE NOTICE '=== ИТОГОВЫЙ СОСТАВ ==='; + + RAISE NOTICE '--- Таблицы ---'; + FOR v_obj_name IN ( + SELECT tablename + FROM pg_catalog.pg_tables + WHERE schemaname = 'eds_global' + ORDER BY tablename + ) LOOP + RAISE NOTICE ' %', v_obj_name; + END LOOP; + + RAISE NOTICE '--- Вьюхи ---'; + FOR v_obj_name IN ( + SELECT viewname + FROM pg_catalog.pg_views + WHERE schemaname = 'eds_global' + ORDER BY viewname + ) LOOP + RAISE NOTICE ' %', v_obj_name; + END LOOP; + + RAISE NOTICE '=== ГОТОВО ==='; +END $$; \ No newline at end of file