TL;DR
- Ptah 플레이그라운드는 WebAssembly와 SQLite를 사용해 브라우저 탭에서 실제 데이터베이스를 대상으로 스키마 차이를 확인하고 마이그레이션을 실행하는 환경임.
schema.sql을 원하는 스키마로 지정하고 데이터베이스 카탈로그와 비교해 차이를 계산하며, 스키마 변경문을 직접 작성할 필요가 없음.- 시나리오에는
users와tasks테이블 및 합성 데이터가 포함되며, 데이터베이스를 가져와 기존 시드 데이터베이스 대신 사용할 수도 있음. - 데이터베이스 가져오기는 파일을 읽기만 하며, WAL 모드 데이터베이스는 거부되므로 먼저 체크포인트를 수행해야 함.
- 런타임과 데이터베이스는 브라우저 탭의 메모리에서만 유지되고 새로고침하면 사라지며, 데이터베이스 내보내기로 사본을 저장할 수 있음.
플레이그라운드와 시나리오
- 플레이그라운드의 시나리오는 스키마를 변경하면서 데이터는 유지하는 것임.
- 런타임이 시작되면 작업 공간이 시드되며, 시나리오 A에는
users와tasks테이블, 합성 데이터가 포함됨. - 런타임이 시작되기 전에는 명령이 실행되지 않음.
- JavaScript가 필요하며, JavaScript가 없더라도 페이지에서 스키마, 파일 목록, 실행할 명령을 확인할 수 있고 명령은 로컬 머신에서 실행하는 방식임.
데이터베이스 가져오기와 내보내기
- 가져오기는 컴퓨터의
.db파일을 열어 현재 탭의app.db로 사용하며, 시나리오에서 시드한 데이터베이스를 대체함. - 가져온 파일은 읽기만 하며 파일에 쓰지 않음.
- SQLite 데이터베이스가 WAL 모드이면 가져오기가 거부되므로 먼저 체크포인트를 수행해야 함.
- 재설정하면 시드 데이터베이스가 복원되며, 내보내기를 통해 데이터베이스 사본을 가져갈 수 있음.
스키마 편집기와 데이터베이스 보기
schema.sql은 데이터베이스가 가져야 할 원하는 상태를 정의하며, Ptah는 이 파일과app.db의 실제 카탈로그를 읽어 차이를 계산함.- 스키마 파일에는
ALTER문을 직접 작성하지 않음. - 편집기에는
users테이블의id,name,email필드와tasks테이블의id,user_id,title,done필드 및users.id를 참조하는 외래 키가 정의돼 있음. - 데이터베이스 패널은 명령이 완료된 뒤 SQLite가 실제로 반환한 행과 열만 표시함. 왼쪽 목록에는 시드가 만들 항목이 표시되며, 카탈로그를 읽기 전까지는 시드 기준으로 표시됨.
스키마 차이 확인과 명령 실행
- 첫 단계는 파일과 데이터베이스의 스키마가 일치하는지 묻는 것임.
ptah schema drift --schema-file schema.sql --db-url sqlite://app.db명령은 두 스키마를 비교하고 일치 여부를 종료 코드와 함께 알려줌.schema apply --dry-run은 스키마를 변경하려면 어떤 작업이 필요한지 표시함.- 명령 입력은 파이프, 리디렉션,
$(…)없이 인자만 받으며, 위쪽 화살표로 명령 기록을 불러오고 Tab 키로 자동 완성함. - 콘솔에서 명령을 취소할 때는
Ctrl+C를 사용하며, 대화 기록을 복사할 수 있음.
실행 환경과 제한
- 실행 상태 패널에는 모듈이 응답한 뒤 빌드, 커밋, SQLite 버전이 표시됨.
- 실행 환경은 브라우저 프로필의 SQLite/WASM이며, 데이터베이스는 메모리에서만 유지됨.
- 네트워크 데이터베이스에 연결하거나 Docker를 실행하거나 디스크에 접근할 수 없음.
- 이 빌드에는 PostgreSQL, MySQL, MariaDB가 없으며, 드라이버는 메모리 기반 SQLite임.
- 작업 공간과 데이터베이스는 현재 탭에만 존재하고 새로고침하면 폐기됨.
- 빌드는
fixtures/scenario-a/schema.sql과 대조해 검사함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요