셸 커맨드
Turso 인터랙티브 SQL 셸에서 쓸 수 있는 dot 커맨드들을 정리한 문서예요. 카테고리별로 하나씩 살펴볼게요.
출처: 문서
본문
Dot 커맨드는 인터랙티브 셸에서 쓸 수 있는 특별한 명령이에요. 마침표(.)로 시작하고, 끝에 세미콜론이 필요 없어요.
tursodb> .help
Database & Navigation
.open
데이터베이스 파일을 열어요. VFS 백엔드를 지정할 수도 있어요.
.open <PATH> [VFS]
tursodb> .open mydata.db
tursodb> .open mydata.db memory
.quit
셸을 종료해요. 별칭: .q, .qu, .qui.
tursodb> .quit
.exit
선택적으로 반환 코드를 넣어 셸을 종료해요. 별칭: .ex, .exi.
.exit [CODE]
tursodb> .exit
tursodb> .exit 1
.cd
현재 작업 디렉터리를 바꿔요.
.cd <DIRECTORY>
tursodb> .cd /tmp
Schema Inspection
.tables
데이터베이스의 모든 테이블을 나열해요. 패턴으로 필터링할 수도 있어요.
.tables [PATTERN]
CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE departments (id INTEGER PRIMARY KEY, name TEXT);
tursodb> .tables
employees
departments
tursodb> .tables emp%
employees
.schema
테이블의 CREATE 문을 보여주고, 인자가 없으면 모든 테이블을 보여줘요.
.schema [TABLE]
tursodb> .schema employees
CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT);
tursodb> .schema
CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE departments (id INTEGER PRIMARY KEY, name TEXT);
.indexes
인덱스 이름을 보여줘요. 테이블로 필터링할 수도 있어요.
.indexes [TABLE]
CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT, department TEXT);
CREATE INDEX idx_dept ON employees(department);
CREATE INDEX idx_name ON employees(name);
tursodb> .indexes
idx_dept
idx_name
tursodb> .indexes employees
idx_dept
idx_name
.databases
연결된(attach된) 모든 데이터베이스를 나열해요.
tursodb> .databases
main: /path/to/mydata.db r/w
Output Control
.mode
출력 표시 모드를 설정해요.
.mode <MODE>
| Mode | Description |
|---|---|
pretty |
테두리 있는 테이블 (기본값) |
list |
파이프로 구분된 값 |
line |
컬럼 이름과 함께 한 줄에 한 컬럼씩 |
tursodb> .mode list
tursodb> SELECT 1 AS a, 2 AS b;
1|2
tursodb> .mode line
tursodb> SELECT 1 AS a, 2 AS b;
a = 1
b = 2
tursodb> .mode pretty
tursodb> SELECT 1 AS a, 2 AS b;
┌───┬───┐
│ a │ b │
├───┼───┤
│ 1 │ 2 │
└───┴───┘
.headers
list 모드에서 컬럼 헤더를 켜고 꺼요.
.headers <on|off>
tursodb> .mode list
tursodb> .headers on
tursodb> SELECT 1 AS x, 2 AS y;
x|y
1|2
tursodb> .headers off
tursodb> SELECT 1 AS x, 2 AS y;
1|2
.nullvalue
list 모드에서 NULL 값에 표시할 문자열을 설정해요.
.nullvalue <STRING>
tursodb> .mode list
tursodb> .nullvalue [NULL]
tursodb> SELECT 1 AS a, NULL AS b;
1|[NULL]
.output
쿼리 출력을 파일로 리다이렉트해요. 인자 없이 또는 stdout으로 호출하면 터미널 출력으로 되돌아가요.
.output [PATH]
tursodb> .output results.txt
tursodb> SELECT * FROM employees;
tursodb> .output
tursodb> -- Output is back to the terminal
.echo
echo 모드를 켜고 꺼요. 켜져 있으면 각 SQL 문이 실행 전에 출력돼요.
.echo <on|off>
tursodb> .echo on
tursodb> SELECT 42;
SELECT 42;
┌────┐
│ 42 │
├────┤
│ 42 │
└────┘
.show
현재 셸 설정을 보여줘요.
tursodb> .show
Settings:
Output mode: pretty
DB: mydata.db
Output: STDOUT
Null value:
CWD: /home/user
Echo: off
Headers: off
Performance & Diagnostics
.timer
쿼리 타이밍을 켜고 꺼요. 켜져 있으면 각 쿼리 후 실행 시간과 I/O 통계를 보여줘요.
.timer <on|off>
tursodb> .timer on
tursodb> SELECT 42;
42
Command stats:
----------------------------
total: 442 us (this includes parsing/coloring of cli app)
query execution stats:
----------------------------
Execution: avg=4 us, total=8 us
I/O: No samples available
.stats
데이터베이스 통계를 보여줘요. on/off로 쿼리마다 자동 표시를 토글하고, --reset으로 카운터를 초기화할 수 있어요.
.stats [on|off] [--reset]
tursodb> .stats
Connection Metrics:
Total statements: 3
High-water marks:
Max VM steps: 19
Max rows read: 1
Aggregate Statistics:
Statement Metrics:
Row Operations:
Rows read: 1
Rows written: 2
Execution:
VM steps: 48
Instructions: 47
...
.opcodes
VDBE(Virtual Database Engine) 오피코드와 설명을 보여줘요. 오피코드 이름으로 필터링할 수도 있어요.
.opcodes [OPCODE]
tursodb> .opcodes Integer
Integer
-------
The 64-bit integer value P1 is written into register P2. This is different
from SQLite, where this opcode is used for 32-bit integers
.vfslist
사용 가능한 Virtual File System 모듈을 나열해요.
tursodb> .vfslist
Available VFS modules:
memory
syscall
Data Import & Export
.dump
데이터베이스 전체를 재생성할 수 있는 SQL 문으로 출력해요.
tursodb> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO "employees" VALUES(1,'Alice');
INSERT INTO "employees" VALUES(2,'Bob');
COMMIT;
참고로, .dump 출력을 다른 Turso 인스턴스에 파이프해서 데이터베이스를 재생성할 수 있어요:
tursodb original.db ".dump" | tursodb -q clone.db
.import
파일에서 테이블로 데이터를 가져와요.
.import [--csv] [--skip N] [--verbose] <FILE> <TABLE>
| Option | Default | Description |
|---|---|---|
--csv |
on | 쉼표를 필드 구분자로, 줄바꿈을 레코드 구분자로 사용해요 |
--skip N |
0 | 처음 N개 행을 건너뛰어요 (헤더 행 건너뛰기에 유용) |
--verbose |
off | 가져오기 중 진행 정보를 출력해요 |
tursodb> CREATE TABLE people (name TEXT, age INTEGER);
tursodb> .import --csv --skip 1 data.csv people
tursodb> SELECT * FROM people;
┌─────────┬─────┐
│ name │ age │
├─────────┼─────┤
│ Alice │ 30 │
├─────────┼─────┤
│ Bob │ 25 │
├─────────┼─────┤
│ Charlie │ 35 │
└─────────┴─────┘
다음과 같은 CSV 파일 data.csv가 있다면:
name,age
Alice,30
Bob,25
Charlie,35
.clone
현재 데이터베이스를 새 파일로 클론해요.
.clone <OUTPUT_FILE>
tursodb> .clone backup.db
employees... done
.read
파일에서 SQL 문을 실행해요.
.read <PATH>
tursodb> .read setup.sql
.load
확장 라이브러리를 로드해요.
.load <PATH>
tursodb> .load ./liblimbo_regexp
참고로, Turso 네이티브 확장만 로드할 수 있어요. SQLite .so/.dll 로더블 확장은 지원되지 않아요. 사용 가능한 확장은 Extensions 문서를 보세요.
Debugging
.dbtotxt
데이터베이스 페이지 원시 내용을 hex 형식으로 보여줘요. 스토리지 수준 문제 디버깅에 유용해요.
.dbtotxt [--page PAGE_NO]
tursodb> .dbtotxt --page 1
| size 8192 pagesize 4096 filename :memory:
| page 1 offset 0
| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3.
| 16: 10 00 02 02 00 40 20 20 00 00 00 01 00 00 00 02 .....@ ........
...
.dbconfig
데이터베이스 설정 플래그를 출력하거나 설정해요. 현재 Turso에서는 no-op예요.
.dbconfig [CONFIG] [on|off]
Documentation
.manual
Turso 기능에 대한 내장 매뉴얼 페이지를 보여줘요. 인자 없이 호출하면 사용 가능한 매뉴얼 전체를 나열해요.
.manual [PAGE]
별칭: .man.
tursodb> .manual
# Turso Manual Pages
Available manuals:
custom-types Custom Types for STRICT Tables
cdc Change Data Capture
encryption At-Rest Database Encryption
vector Vector Search
materialized-views Live Materialized Views
mcp Model Context Protocol server
tursodb> .manual vector
더 알아보기 (Learn more)
- CLI 시작하기 — 셸 실행과 출력 모드 기본기
- 커맨드라인 옵션 — 플래그와 인자 전체 목록
- 확장(Extensions) — 로드 가능한 확장 목록
- 실험적 기능 — 플래그로 켜지는 기능 상세