1. 사용자의 ID를 migration 해줘야 하는 작업이 생겼다.
  2. 그냥 UPDATE를 진행해보니 사용기간이 길어 업데이트 해야 할 데이터가 많아 프로세스가 종료되는 문제가 발생했다. (다행히 테스트 서버였다.)
  3. 대용량 데이터를 업데이트하는 방법을 찾아보니 Batch Update 방식과 CTAS(Create Table As Select) 방식을 찾을 수 있었다.
  4. 나의 경우 바꿔야 할 테이블이 많고, 기간이 넉넉치 않아서 Batch Update 방식을 채용했다. (시간적 여유만 있다면 CTAS 방식을 해보고 싶었다. 66초짜리 쿼리가 4초면 된다고 한다.)
  5. 2번의 UPDATE 문들을 아래의 형태로 고친다.
DO $$
DECLARE
  B record;
BEGIN
  FOR B IN (SELECT * FROM ${baseline_table} WHERE ${condition}) LOOP
    UPDATE ${target_table} A SET A.user_id = B.${change_user_id} 
    WHERE B.user_id = A.user_id;
    COMMIT;
  END LOOP;
END;
$$;
  1. 정상 작동을 확인한다.

CTAS 방식에 대해선 몇가지 링크를 첨부합니다.