SQLite의 숨은 기능? SQLite Archiver
SQLite는 아마 세상에서 가장 널리 쓰이는 RDBMS의 일종일 것이다. 이 SQLite 데이터베이스를 다루는 명령줄 프로그램인 sqlite3
에는 잘 알려지지 않은 숨은 기능이 하나 있는데, 바로 zip이나 tar처럼 여러 파일을 묶어 압축해주는 아카이브 기능이 들어있다는 것이다. 이 아카이브는 "SQLite Archive" 혹은 줄여서 "sqlar"이라고 부른다.
CLI 사용법
SQLite Archive의 사용법은 tar
명령과 꽤 유사하다. 단, 매 명령 앞에 -A
를 꼭 붙여야 한다.
# sqlar 관련 명령어 도움말 보기
sqlite3 -A --help
# sqlar 만들기
sqlite3 -A -cvf archive.sqlar ./foo
# sqlar 풀기
sqlite3 -A -xvf archive.sqlar
# sqlar 파일 목록 출력
sqlite3 -A -tf archive.sqlar
sqlite3 -A -tvf archive.sqlar
파일구조
SQLite Archive로 만든 아카이브 자체가 일종의 SQLite 데이터베이스이며, 스키마는 아래와 같다.
CREATE TABLE sqlar(
name TEXT PRIMARY KEY, -- name of the file
mode INT, -- access permissions
mtime INT, -- last modification time
sz INT, -- original file size
data BLOB -- compressed content
);
DB엔 파일 이름, 권한, 수정한 날짜, 파일 크기, Deflate로 압축한 데이터가 들어있다.
그래서 이걸 누가 쓰는데?
공식 홈페이지에 따르면, SQLite Archive를 사용하는 프로그램이 딱 하나가 있는데, SQLite에서 쓰이는 분산형 버전관리 시스템인 Fossil에서 파일을 내려받을 때 이 포맷으로 제공하는 옵션이 있다고 한다.
... 그 외엔 찾을 수 없었다. 으음, zip/tar 냅두고 sqlar을 쓸 이유가 있을까?