SQLite3 CLI .(dot) commands

SQLite를 사용할 때, SQL문이 아닌 sqlite 프롬프트 쉘 내에서 사용하는 명령어들이 있다. CLT(Command Line Tool) 또는 CLI(Command Line Interface)라고 불린다. 출력 포맷을 변경하거나, 데이터베이스의 테이블이 뭐가 있는지, 스키마는 어떻게 되어 있는지 등을 확인하는 용도이다. 심지어 export도 지원하는등 생각보다 기능이 많은데, 간단하게 몇가지만 알아보자.

.help

기본적으로 ‘.’, dot으로 시작해야 한다. 이 점이 커맨드라인 명령어를 구분짓는다. “.help”는 사용할 수 있는 모든 명령어를 보여준다.

Zsh
sqlite> .help
.archive ...             Manage SQL archives
.auth ON|OFF             Show authorizer callbacks
.backup ?DB? FILE        Backup DB (default "main") to FILE
.bail on|off             Stop after hitting an error.  Default OFF
.cd DIRECTORY            Change the working directory to DIRECTORY
...

.quit

sqlite> 커맨드 프롬프트를 종료하는 명령어이다.

.open <db>

sqlite 커맨드 프롬프트를 실행할 때는 보통 db 파일을 인자로 주고 시작한다.

Zsh
~/o/sqlite  sqlite3 longlist.db                      1 ✘ │ 18m 13s │ 12:59:04 
SQLite version 3.45.1 2024-01-30 16:01:20
Enter ".help" for usage hints.
sqlite> 

하지만, 파일을 지정하지 않고 커맨드 프롬프트를 실행한 경우, 커맨드 프롬프트 상에서 파일을 open 할 수 있다.

Zsh
 ~/o/sqlite  sqlite3                                       1m 25s  13:00:35 
SQLite version 3.45.1 2024-01-30 16:01:20
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open longlist.db
sqlite> 

open 이 있으면 close도 있을거 같지만, 별도로 close는 존재하지 않는다. 새로운 db파일을 open하면 기존꺼가 닫히고, 또는 그냥 sqlite 프롬프트를 종료하면 그만이다.

.databases

현재 open된 database가 뭔지 확인하는 명령어이다.

Zsh
sqlite> .databases
main: /home/batmask/Linux-500G/output/sqlite/longlist.db r/w
sqlite> 

.tables

데이터 베이스의 테이블들을 확인하는 명령어이다.

Zsh
sqlite> .tables
longlist

.schema <table>

특정 테이블의 스키마를 확인하는 명령어이다.

Zsh
sqlite> .schema longlist 
CREATE TABLE IF NOT EXISTS "longlist" (
    "isbn" TEXT,
    "title" TEXT,
    "author" TEXT,
    "translator" TEXT,
    "format" TEXT,
    "pages" INTEGER,
    "publisher" TEXT,
    "published" TEXT,
    "year" INTEGER,
    "votes" INTEGER,
    "rating" REAL
);
sqlite> 

table을 생성한 SQL 자체를 확인할 수 있다.

출력 결과 다듬기 : .headers on, .mode column

기본적으로 SELECT로 가져오는 결과물은 헤더도 없고 그냥 ‘|’ 구분자로만 구분되어 출력된다.

Plaintext
sqlite> SELECT * FROM longlist LIMIT 5;
9788439736967|Boulder|Eva Baltasar|Nicole d'Amonville Alegría|paperback|112|Literatura Random House|2022-08-02|2023|2779|3.77
9781628971538|Whale|Cheon Myeong-Kwan|Jae Won Chung|paperback|368|Europa Editions|2023-01-19|2023|175|3.97
9781642861181|The Gospel According to the New World|Maryse Condé|Richard Philcox|paperback|184|World Editions|2023-03-07|2023|114|3.05
9781529414431|Standing Heavy|Gauz|Frank Wynne|paperback|252|MacLehose Press|2022-05-26|2023|322|3.57
9781474623025|Time Shelter|Georgi Gospodinov|Angela Rodel|hardcover|304|W&N|2022-04-21|2023|3142|4.05

여기에 헤더를 출력하고 컬럼 구분을 하도록 하면 다음과 같이 바뀔 수 있다.

Plaintext
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT isbn,title,author FROM longlist LIMIT 5;
isbn           title                                  author           
-------------  -------------------------------------  -----------------
9788439736967  Boulder                                Eva Baltasar     
9781628971538  Whale                                  Cheon Myeong-Kwan
9781642861181  The Gospel According to the New World  Maryse Condé     
9781529414431  Standing Heavy                         Gauz             
9781474623025  Time Shelter                           Georgi Gospodinov
sqlite> 

주의할 점은 항목이 많다면, 출력포맷을 지정해도 엉켜보일 수 있다. 위의 경우는 깔끔하게 3개 컬럼만 참조해봤다.

이정도만 해도 도움이 되겠지만 이 외에도 많은 명령어가 있으니, 한 번 찾아보는 것도 좋을것이다.

Previous post SSH 서버 돌리기

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다