가을별 블로그

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을 쓸 이유가 있을까?

참고 링크:

#database #db