mirror of
https://github.com/lukevella/rallly.git
synced 2025-05-05 13:16:03 +02:00
Batch processing and error handling improvements
This commit is contained in:
parent
71add4e905
commit
9850c76d4f
1 changed files with 77 additions and 30 deletions
|
@ -1,51 +1,98 @@
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
-- Create guest users for participants without user_id and link them
|
-- Create guest users for participants without user_id and link them
|
||||||
DO $$
|
DO $$
|
||||||
DECLARE
|
DECLARE
|
||||||
participant_record RECORD;
|
v_processed INTEGER := 0;
|
||||||
|
v_total_processed INTEGER := 0;
|
||||||
|
v_batch_size INTEGER := 1000;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR participant_record IN
|
RAISE NOTICE 'Starting participant migration...';
|
||||||
SELECT id, name, email
|
|
||||||
FROM participants
|
-- Process participants in batches
|
||||||
WHERE user_id IS NULL
|
|
||||||
LOOP
|
LOOP
|
||||||
WITH new_user AS (
|
WITH to_process AS (
|
||||||
|
SELECT id, name, email
|
||||||
|
FROM participants
|
||||||
|
WHERE user_id IS NULL
|
||||||
|
LIMIT v_batch_size
|
||||||
|
FOR UPDATE SKIP LOCKED
|
||||||
|
),
|
||||||
|
new_users AS (
|
||||||
INSERT INTO users (id, is_guest, created_at)
|
INSERT INTO users (id, is_guest, created_at)
|
||||||
VALUES (
|
SELECT gen_random_uuid()::text, TRUE, NOW()
|
||||||
gen_random_uuid()::text,
|
FROM to_process
|
||||||
TRUE,
|
|
||||||
NOW()
|
|
||||||
)
|
|
||||||
RETURNING id
|
RETURNING id
|
||||||
)
|
)
|
||||||
UPDATE participants
|
UPDATE participants p
|
||||||
SET user_id = (SELECT id FROM new_user)
|
SET user_id = u.id
|
||||||
WHERE id = participant_record.id;
|
FROM (
|
||||||
|
SELECT id, ROW_NUMBER() OVER () as rn
|
||||||
|
FROM new_users
|
||||||
|
) u
|
||||||
|
WHERE p.id IN (
|
||||||
|
SELECT id FROM to_process
|
||||||
|
)
|
||||||
|
AND p.user_id IS NULL;
|
||||||
|
|
||||||
|
GET DIAGNOSTICS v_processed = ROW_COUNT;
|
||||||
|
v_total_processed := v_total_processed + v_processed;
|
||||||
|
|
||||||
|
EXIT WHEN v_processed = 0;
|
||||||
|
RAISE NOTICE 'Processed % participants (total: %)', v_processed, v_total_processed;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
|
RAISE NOTICE 'Completed participant migration. Total processed: %', v_total_processed;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
-- Create guest users for comments without user_id and link them
|
-- Create guest users for comments without user_id and link them
|
||||||
DO $$
|
DO $$
|
||||||
DECLARE
|
DECLARE
|
||||||
comment_record RECORD;
|
v_processed INTEGER := 0;
|
||||||
|
v_total_processed INTEGER := 0;
|
||||||
|
v_batch_size INTEGER := 1000;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR comment_record IN
|
RAISE NOTICE 'Starting comment migration...';
|
||||||
SELECT id, author_name
|
|
||||||
FROM comments
|
-- Process comments in batches
|
||||||
WHERE user_id IS NULL
|
|
||||||
LOOP
|
LOOP
|
||||||
WITH new_user AS (
|
WITH to_process AS (
|
||||||
|
SELECT id, author_name
|
||||||
|
FROM comments
|
||||||
|
WHERE user_id IS NULL
|
||||||
|
LIMIT v_batch_size
|
||||||
|
FOR UPDATE SKIP LOCKED
|
||||||
|
),
|
||||||
|
new_users AS (
|
||||||
INSERT INTO users (id, is_guest, created_at)
|
INSERT INTO users (id, is_guest, created_at)
|
||||||
VALUES (
|
SELECT gen_random_uuid()::text, TRUE, NOW()
|
||||||
gen_random_uuid()::text,
|
FROM to_process
|
||||||
TRUE,
|
|
||||||
NOW()
|
|
||||||
)
|
|
||||||
RETURNING id
|
RETURNING id
|
||||||
)
|
)
|
||||||
UPDATE comments
|
UPDATE comments c
|
||||||
SET user_id = (SELECT id FROM new_user)
|
SET user_id = u.id
|
||||||
WHERE id = comment_record.id;
|
FROM (
|
||||||
|
SELECT id, ROW_NUMBER() OVER () as rn
|
||||||
|
FROM new_users
|
||||||
|
) u
|
||||||
|
WHERE c.id IN (
|
||||||
|
SELECT id FROM to_process
|
||||||
|
)
|
||||||
|
AND c.user_id IS NULL;
|
||||||
|
|
||||||
|
GET DIAGNOSTICS v_processed = ROW_COUNT;
|
||||||
|
v_total_processed := v_total_processed + v_processed;
|
||||||
|
|
||||||
|
EXIT WHEN v_processed = 0;
|
||||||
|
RAISE NOTICE 'Processed % comments (total: %)', v_processed, v_total_processed;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
|
RAISE NOTICE 'Completed comment migration. Total processed: %', v_total_processed;
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
RAISE WARNING 'Error during comment migration: %', SQLERRM;
|
||||||
|
RAISE;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
COMMIT;
|
Loading…
Add table
Reference in a new issue