mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-25 15:55:44 +00:00
add migration for change type data id tables module daily checklist
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
|||||||
|
BEGIN;
|
||||||
|
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
t text;
|
||||||
|
seq_name text;
|
||||||
|
BEGIN
|
||||||
|
FOREACH t IN ARRAY ARRAY[
|
||||||
|
'daily_checklist_activity_task_assignments',
|
||||||
|
'daily_checklist_activity_tasks',
|
||||||
|
'daily_checklist_phases',
|
||||||
|
'daily_checklist_tasks',
|
||||||
|
'employee_kandangs',
|
||||||
|
'employees',
|
||||||
|
'phase_activities',
|
||||||
|
'phases'
|
||||||
|
]
|
||||||
|
LOOP
|
||||||
|
-- Sequence name convention
|
||||||
|
seq_name := format('public.%I_id_seq', t);
|
||||||
|
|
||||||
|
-- 1) Drop default nextval (bigserial behavior)
|
||||||
|
EXECUTE format(
|
||||||
|
'ALTER TABLE public.%I ALTER COLUMN id DROP DEFAULT',
|
||||||
|
t
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2) Add IDENTITY back (BY DEFAULT is safer for rollback)
|
||||||
|
EXECUTE format(
|
||||||
|
'ALTER TABLE public.%I ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY',
|
||||||
|
t
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3) Detach & optionally drop sequence (safe)
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM pg_class
|
||||||
|
WHERE relkind = 'S'
|
||||||
|
AND relname = t || '_id_seq'
|
||||||
|
) THEN
|
||||||
|
EXECUTE format(
|
||||||
|
'ALTER SEQUENCE %s OWNED BY NONE',
|
||||||
|
seq_name
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Optional: drop sequence (comment if you want to keep it)
|
||||||
|
EXECUTE format(
|
||||||
|
'DROP SEQUENCE IF EXISTS %s',
|
||||||
|
seq_name
|
||||||
|
);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
END LOOP;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
BEGIN;
|
||||||
|
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
t text;
|
||||||
|
seq_name text;
|
||||||
|
max_id bigint;
|
||||||
|
BEGIN
|
||||||
|
FOREACH t IN ARRAY ARRAY[
|
||||||
|
'daily_checklist_activity_task_assignments',
|
||||||
|
'daily_checklist_activity_tasks',
|
||||||
|
'daily_checklist_phases',
|
||||||
|
'daily_checklist_tasks',
|
||||||
|
'employee_kandangs',
|
||||||
|
'employees',
|
||||||
|
'phase_activities',
|
||||||
|
'phases'
|
||||||
|
]
|
||||||
|
LOOP
|
||||||
|
-- Sequence name convention: public.<table>_id_seq
|
||||||
|
seq_name := format('public.%I_id_seq', t);
|
||||||
|
|
||||||
|
-- Drop IDENTITY only if the column is identity (safe to re-run)
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM information_schema.columns
|
||||||
|
WHERE table_schema = 'public'
|
||||||
|
AND table_name = t
|
||||||
|
AND column_name = 'id'
|
||||||
|
AND is_identity = 'YES'
|
||||||
|
) THEN
|
||||||
|
EXECUTE format('ALTER TABLE public.%I ALTER COLUMN id DROP IDENTITY', t);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Ensure sequence exists
|
||||||
|
EXECUTE format('CREATE SEQUENCE IF NOT EXISTS %s', seq_name);
|
||||||
|
|
||||||
|
-- Set default like bigserial
|
||||||
|
EXECUTE format(
|
||||||
|
'ALTER TABLE public.%I ALTER COLUMN id SET DEFAULT nextval(''%s'')',
|
||||||
|
t, seq_name
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Own the sequence by the column
|
||||||
|
EXECUTE format(
|
||||||
|
'ALTER SEQUENCE %s OWNED BY public.%I.id',
|
||||||
|
seq_name, t
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Sync sequence to MAX(id) + 1 to avoid duplicate key
|
||||||
|
EXECUTE format('SELECT COALESCE(MAX(id), 0) FROM public.%I', t) INTO max_id;
|
||||||
|
|
||||||
|
EXECUTE format('SELECT setval(''%s'', $1, false)', seq_name)
|
||||||
|
USING (max_id + 1);
|
||||||
|
END LOOP;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Reference in New Issue
Block a user