55 lines
1.9 KiB
PL/PgSQL
55 lines
1.9 KiB
PL/PgSQL
BEGIN;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF to_regclass('public.project_databases') IS NULL
|
|
OR to_regclass('public.user_project_membership') IS NULL THEN
|
|
RAISE EXCEPTION '033_metadata_project_settings must run in the project metadata database';
|
|
END IF;
|
|
END $$;
|
|
|
|
ALTER TABLE public.projects
|
|
ADD COLUMN IF NOT EXISTS settings jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conrelid = 'public.projects'::regclass
|
|
AND conname = 'projects_settings_object_check'
|
|
) THEN
|
|
ALTER TABLE public.projects
|
|
ADD CONSTRAINT projects_settings_object_check
|
|
CHECK (jsonb_typeof(settings) = 'object');
|
|
END IF;
|
|
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public' AND table_name = 'projects'
|
|
AND column_name = 'scada_monitoring_interval_seconds'
|
|
) THEN
|
|
IF EXISTS (
|
|
SELECT 1 FROM public.projects
|
|
WHERE scada_monitoring_interval_seconds IS NOT NULL
|
|
AND settings ? 'scada_monitoring_interval_seconds'
|
|
AND settings->'scada_monitoring_interval_seconds'
|
|
IS DISTINCT FROM to_jsonb(scada_monitoring_interval_seconds)
|
|
) THEN
|
|
RAISE EXCEPTION 'Conflicting SCADA monitoring intervals; resolve before migration';
|
|
END IF;
|
|
|
|
UPDATE public.projects
|
|
SET settings = settings || jsonb_build_object(
|
|
'scada_monitoring_interval_seconds', scada_monitoring_interval_seconds
|
|
)
|
|
WHERE scada_monitoring_interval_seconds IS NOT NULL;
|
|
|
|
ALTER TABLE public.projects DROP COLUMN scada_monitoring_interval_seconds;
|
|
END IF;
|
|
END $$;
|
|
|
|
COMMENT ON COLUMN public.projects.settings IS
|
|
'项目级通用配置(JSON 对象,不存放密钥);scada_monitoring_interval_seconds 为监测任务间隔秒数。';
|
|
|
|
COMMIT;
|