Universal CSV Importer #70

Merged
Lars merged 54 commits from develop into main 2026-04-11 07:06:47 +02:00
2 changed files with 30 additions and 14 deletions
Showing only changes of commit 1855f6e57a - Show all commits

View File

@ -1,5 +1,5 @@
-- Universal-CSV-Import setzt source = 'csv'. Alte CHECK-Constraints kennen das nicht. -- Universal-CSV-Import setzt source = 'csv'. Alte CHECK-Constraints kennen das nicht.
-- Namen können je nach PG-Version abweichen → alle passenden CHECK Constraints zu source droppen. -- Alle passenden CHECKs zu `source` droppen (PG speichert IN oder = ANY (ARRAY[...])).
DO $$ DO $$
DECLARE DECLARE
r RECORD; r RECORD;
@ -8,16 +8,22 @@ BEGIN
SELECT c.conname SELECT c.conname
FROM pg_constraint c FROM pg_constraint c
JOIN pg_class t ON c.conrelid = t.oid JOIN pg_class t ON c.conrelid = t.oid
WHERE t.relname = 'vitals_baseline' JOIN pg_namespace n ON n.oid = t.relnamespace
WHERE n.nspname = 'public'
AND t.relname = 'vitals_baseline'
AND c.contype = 'c' AND c.contype = 'c'
AND pg_get_constraintdef(c.oid) ILIKE '%source%' AND (
AND pg_get_constraintdef(c.oid) ILIKE '%IN %' c.conname = 'vitals_baseline_source_check'
OR COALESCE(pg_get_constraintdef(c.oid), '') ILIKE '%source%'
)
LOOP LOOP
EXECUTE format('ALTER TABLE vitals_baseline DROP CONSTRAINT %I', r.conname); EXECUTE format('ALTER TABLE public.vitals_baseline DROP CONSTRAINT %I', r.conname);
END LOOP; END LOOP;
END $$; END $$;
ALTER TABLE vitals_baseline ADD CONSTRAINT vitals_baseline_source_check ALTER TABLE public.vitals_baseline DROP CONSTRAINT IF EXISTS vitals_baseline_source_check;
ALTER TABLE public.vitals_baseline ADD CONSTRAINT vitals_baseline_source_check
CHECK (source IN ('manual', 'apple_health', 'garmin', 'withings', 'csv')); CHECK (source IN ('manual', 'apple_health', 'garmin', 'withings', 'csv'));
COMMENT ON COLUMN vitals_baseline.source IS 'manual | apple_health | garmin | withings | csv (Universal-Import)'; COMMENT ON COLUMN vitals_baseline.source IS 'manual | apple_health | garmin | withings | csv (Universal-Import)';

View File

@ -1,4 +1,5 @@
-- Idempotent: erneute Bereinigung der source-CHECK, falls 048 zuvor nicht griff oder nur teilweise lief. -- Idempotent: gleicher Zielzustand wie 048, auch wenn die CHECK schon existiert (z. B. 048 DB-seitig
-- erfolgreich, aber nicht in schema_migrations). Ein einziges DO vermeidet Mehrfach-Statement-Probleme.
DO $$ DO $$
DECLARE DECLARE
r RECORD; r RECORD;
@ -7,14 +8,23 @@ BEGIN
SELECT c.conname SELECT c.conname
FROM pg_constraint c FROM pg_constraint c
JOIN pg_class t ON c.conrelid = t.oid JOIN pg_class t ON c.conrelid = t.oid
WHERE t.relname = 'vitals_baseline' JOIN pg_namespace n ON n.oid = t.relnamespace
WHERE n.nspname = 'public'
AND t.relname = 'vitals_baseline'
AND c.contype = 'c' AND c.contype = 'c'
AND pg_get_constraintdef(c.oid) ILIKE '%source%' AND (
AND pg_get_constraintdef(c.oid) ILIKE '%IN %' c.conname = 'vitals_baseline_source_check'
OR COALESCE(pg_get_constraintdef(c.oid), '') ILIKE '%source%'
)
LOOP LOOP
EXECUTE format('ALTER TABLE vitals_baseline DROP CONSTRAINT %I', r.conname); EXECUTE format('ALTER TABLE public.vitals_baseline DROP CONSTRAINT %I', r.conname);
END LOOP; END LOOP;
END $$;
ALTER TABLE vitals_baseline ADD CONSTRAINT vitals_baseline_source_check EXECUTE $ddl$
CHECK (source IN ('manual', 'apple_health', 'garmin', 'withings', 'csv')); ALTER TABLE public.vitals_baseline ADD CONSTRAINT vitals_baseline_source_check
CHECK (source IN ('manual', 'apple_health', 'garmin', 'withings', 'csv'))
$ddl$;
EXCEPTION
WHEN duplicate_object THEN
NULL;
END $$;