PostgreSQL 18 없이 Ruby on Rails에서 UUIDv7을 구현하기 위해 다음 단계를 수행합니다.
1. 커스텀 UUIDv7 생성 함수 생성
먼저, PostgreSQL 18의 네이티브 UUIDv7과 동일한 밀리초 정밀도로 UUIDv7 값을 생성하는 generate_uuidv7 데이터베이스 함수를 마이그레이션을 통해 생성합니다. 이 함수는 향후 네이티브 함수와의 충돌을 피하도록 명명되었으며, structure.sql 사용 또는 관련 Gem이 필요합니다.
2. 기존 테이블 기본 키 업데이트
다음으로, 기존 테이블들의 UUID 타입 기본 키들이 새로운 generate_uuidv7() 함수를 사용하여 UUID를 생성하도록 기본값을 변경하는 마이그레이션을 실행합니다. 이는 모든 해당 테이블에 적용됩니다.
3. 신규 테이블에 UUIDv7 적용
새로 생성되는 테이블의 경우, create_table 시 id: :uuid, default: -> { "generate_uuidv7()" } 옵션을 사용하여 기본 키가 자동으로 UUIDv7로 생성되도록 설정합니다.
4. (선택 사항) 네이티브 UUIDv7 함수로 전환
데이터베이스를 PostgreSQL 18 이상으로 업그레이드하면, 기존 테이블의 기본 키를 네이티브 uuidv7() 함수로 전환하고 이전에 생성한 커스텀 generate_uuidv7 함수를 삭제하여 시스템을 최적화할 수 있습니다.