Files
psql_tasks/mhd_task/global/clean_eds_global.sql
T

146 lines
4.9 KiB
SQL
Raw Normal View History

2026-07-28 12:29:21 +08:00
-- ============================================================
-- Скрипт приведения схемы 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 $$;