TL;DR

  • Ptah 플레이그라운드는 WebAssembly와 SQLite를 사용해 브라우저 탭에서 실제 데이터베이스를 대상으로 스키마 차이를 확인하고 마이그레이션을 실행하는 환경임.
  • schema.sql을 원하는 스키마로 지정하고 데이터베이스 카탈로그와 비교해 차이를 계산하며, 스키마 변경문을 직접 작성할 필요가 없음.
  • 시나리오에는 userstasks 테이블 및 합성 데이터가 포함되며, 데이터베이스를 가져와 기존 시드 데이터베이스 대신 사용할 수도 있음.
  • 데이터베이스 가져오기는 파일을 읽기만 하며, WAL 모드 데이터베이스는 거부되므로 먼저 체크포인트를 수행해야 함.
  • 런타임과 데이터베이스는 브라우저 탭의 메모리에서만 유지되고 새로고침하면 사라지며, 데이터베이스 내보내기로 사본을 저장할 수 있음.

플레이그라운드와 시나리오

  • 플레이그라운드의 시나리오는 스키마를 변경하면서 데이터는 유지하는 것임.
  • 런타임이 시작되면 작업 공간이 시드되며, 시나리오 A에는 userstasks 테이블, 합성 데이터가 포함됨.
  • 런타임이 시작되기 전에는 명령이 실행되지 않음.
  • 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과 대조해 검사함.