본문 바로가기
WIKI 기술 지식 베이스

셸 커맨드

원문 보기 위키 갱신

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)