CLI에서 쿼리 결과 형식 지정
CLI에서 쿼리 결과 형식 지정 (Query Result Formatting In The CLI)
SQLite 3.52.0 (2026-03-06) 버전의 명령줄 인터페이스(CLI)에서 ".mode" dot-command가 쿼리 결과를 렌더링하는 데 더 큰 유연성을 제공하도록 향상됐어요. 하지만 유연성과 함께 복잡성이 따라왔죠. 그래서 ".mode" 명령의 동작이 이제 이 별도 문서로 분리되었답니다.
출처: 문서
본문
1. 소개
SQLite 3.52.0 (2026-03-06) 버전의 CLI에서 ".mode" dot-command가 쿼리 결과를 렌더링하는 데 더 큰 유연성을 제공하도록 향상됐어요. 하지만 유연성과 함께 복잡성이 따라왔죠. 그래서 ".mode" 명령의 동작이 이 별도 문서로 분리됐어요.
1.1. 향상 요약
- ".mode" 명령은 이제 출력 형식을 제어하는 많은 새 옵션을 받아요. 이 새 옵션 중 일부는 예전에 별도 dot-command가 처리하던 설정을 대체해요. 예를 들어 새 "--width" 옵션이 이제 레거시 ".width" dot-command를 대체해요. (레거시 ".width" 명령은 호환성을 위해 유지되지만 더 이상 문서화되지 않고 deprecated로 취급돼요.)
- 대화형 세션의 기본 모드는 추가 옵션 "--quote relaxed", "--limits 5,300,20", "--textjsonb on", "--sw auto"로 수정된 "qbox"로 바뀌었어요. 레거시 "list" 모드는 하위 호환성을 위해 여전히 스크립트의 기본값이에요.
- 새 "tty"와 "batch" 모드는 각각 대화형 세션과 배치 세션의 기본 표시 모드로 설정해요.
- 새 "psql" 모드는 출력이 PostgreSQL의 "psql" 명령줄 유틸리티 출력과 매우 비슷하게 보이게 해요.
- 많은 새 형식 지정 가능성이 있어요. 자세한 내용은 아래를 참고해요.
1.2. 몇 가지 빠른 예제
현재 출력 모드를 보려면 인자 없이 ".mode"를 사용해요.
sqlite> .mode
.mode qbox --limits on --quote relaxed --sw auto --textjsonb on
sqlite>
더 많은 세부 정보를 보려면 "-v"를 추가해요:
sqlite> .mode -v
.mode qbox --align "" --border on --blob-quote auto --colsep "" --escape auto
--limits on --null "NULL" --quote relaxed --rowsep "" --sw auto --tablename ""
--textjsonb on --titles on --widths "" --wordwrap off
sqlite>
".mode --list"를 사용하면 사용 가능한 모든 출력 모드 목록을 볼 수 있어요:
sqlite> .mode --list
available modes: ascii box c column count csv html insert jatom jobject json
line list markdown off psql qbox quote table tabs tcl batch tty
sqlite>
개별 필드 길이에 제한 없이 모든 컬럼의 너비를 줄여 테이블이 화면에 맞게 하는 "column" 모드로 바꾸려면:
sqlite> .mode column -limits off -sw auto
텍스트가 인용되지 않고, NULL 값은 "NULL"로, BLOB 값은 16진수로, 길이 제한은 어떤 값의 처음 10줄 또는 처음 1000자만 보이도록 설정된, ASCII 아트 박스(MySQL과 비슷) 표시를 설정하려면:
sqlite> .mode table -quote off -null NULL -blob hex -limits 10,1000
단일 SQL 입력에만 split-column 모드("split")를 사용하려면 ("--once" 옵션 때문에):
sqlite> .mode --once split
sqlite> SELECT name FROM pragma_function_list
...> WHERE name GLOB 'json_*'
...> ORDER BY name;
json_array json_group_array json_patch json_replace json_valid
json_array_length json_group_object json_pretty json_set
json_array_length json_insert json_pretty json_type
json_error_position json_object json_quote json_type
json_extract json_parse json_remove json_valid
sqlite3>
".mode" 명령에 대한 사용 힌트를 보려면:
sqlite> .help mode
2. 기본 출력 형식
3.52.0 (2026-03-06) 버전부터 기본 형식은 다음과 같아요:
- 쿼리 결과를 Unicode 박스 그리기 기호로 구성된 테이블로 보여줘요. ("box")
- SQL 리터럴로 모든 출력을 인용하되, 텍스트 리터럴을 구분할 필요가 없을 때는 인용하지 않아요. ("--quote relaxed")
- 출력 테이블을 표시 너비에 맞게 자동으로 압축하려고 시도해요. ("--screenwidth auto")
- 여러 줄 값을 처음 5줄만 보이도록 잘라요. ("--linelimit 5")
- 긴 값을 처음 300자만 보이도록 잘라요. ("--charlimit 300")
- 컬럼 제목을 20자로 잘라요. (--titlelimit 20)
- 정말 JSONB인 BLOB를 표시할 때 BLOB 값 대신 동등한 JSON 텍스트를 보여줘요. ("--textjsonb on")
위 내용은 CLI가 터미널이나 콘솔 창에 연결되었을 때의 기본값이에요. 배치 스크립트로 실행될 때(표준 입력과 표준 출력이 모두 키보드나 터미널 창이 아니라 파일이나 파이프에 연결될 때) 기본 형식은 SQLite 3.51.0 이하에서 항상 그래왔던 것과 같아요:
- 값이 데이터베이스에 있는 그대로, 인용 없이 나타나요.
- 각 행의 모든 컬럼이 "|"로 구분된 단일 줄에 나타나요.
- 행은 새 줄(U+000a)로 끝나요.
- 결과 값이나 출력 줄의 길이에 제한이 없어요.
이 "batch" 모드는 레거시 호환용이에요. CLI를 "--batch" 명령줄 옵션으로 시작하거나 ".mode batch" dot-command를 발행하면 배치 모드를 강제할 수 있어요.
CLI가 결과 렌더링에 대해 현재 어떻게 구성되어 있는지 보려면 인자 없이 ".mode"를 실행하거나, 더 자세히 보려면 ".mode -v"를 실행하면 돼요.
3. 출력 형식 변경
많은 서로 다른 출력 "모드"가 있어요. 개별 값이 인용되고 전체 결과가 Unicode 박스 그리기 문자로 구성된 행렬로 표시되는 터미널의 기본값을 "qbox"라고 불러요. 배치 모드의 기본값은 "list"라고 불러요. ".mode --list" 명령을 실행하면 모든 사용 가능한 모드의 완전한 목록을 얻을 수 있어요.
출력 모드를 바꾸려면 ".mode NAME" 명령을 실행하면 되는데, NAME은 ".mode --list" 명령의 출력에 이름이 있는 내장 모드 중 하나예요. 결과가 표시되는 방식을 미세 조정하는 데 사용할 수 있는 옵션도 많아요. ".mode -v" 명령의 출력을 살펴보면 그 옵션들 중 상당수를 알아볼 수 있을 거예요.
3.1. 출력 모드 "list"
스크립트(그리고 3.52.0 이전의 모든 CLI 인스턴스)의 기본 출력 모드는 "list"예요. list 모드에서 쿼리 결과의 각 행은 출력 한 줄에 쓰여지고, 그 행의 각 컬럼은 특정 구분자 문자열로 구분돼요. 기본 구분자는 파이프 기호("|")예요. list 모드는 쿼리 출력을 추가 처리를 위해 다른 프로그램(예: AWK)에 보낼 때 특히 유용해요.
sqlite> .mode list
sqlite> CREATE TABLE tbl1(one,two);
sqlite> INSERT INTO tbl1 VALUES('hello!',10),('goodbye',20);
sqlite> SELECT * FROM tbl1;
hello!|10
goodbye|20
sqlite>
".mode" 명령의 "--colsep STRING" 옵션을 사용해 다른 컬럼 구분자 문자열을 선택해요. 예를 들어 구분자를 콤마와 공백으로 바꾸려면 이렇게 해요:
sqlite> .mode list --colsep ", "
sqlite> select * from tbl1;
hello!, 10
goodbye, 20
sqlite>
다른 모드로 변경하면 컬럼 구분자나 다른 여러 설정이 새 모드의 기본값으로 리셋될 수 있어요. 그래서 비표준 구분자를 계속 사용하고 싶다면 모드를 바꿀 때마다 "--colsep" 옵션을 반복해야 할 수도 있어요.
3.2. 출력 모드 "quote"
"quote" 모드에서 출력은 SQL 리터럴로 형식 지정돼요. 문자열은 단일 인용부호로 감싸지고 내부 단일 인용부호는 두 배로 하여 이스케이프돼요. Blob는 16진수 blob 리터럴 표기(예: x'abcd')로 표시돼요. 숫자는 ASCII 텍스트로 표시되고 NULL 값은 "NULL"로 보여줘요. 모든 컬럼은 콤마로 서로 구분돼요.
sqlite> .mode quote
sqlite> select * from tbl1;
'hello!',10
'goodbye',20
sqlite>
quote 모드는 실제로 일부 설정 변경이 있는 list 모드의 별칭이에요. 다음 두 .mode 명령은 같은 최종 결과를 줘요:
sqlite> .mode quote
sqlite> .mode list -quote on -colsep ","
3.3. 다른 list류 출력 모드
여러 출력 모드는 "--quote", "--colsep", "--rowsep", "--null"의 대체 값이 있는 "list"의 편의 별칭이에요. 완전한 목록은 다음과 같아요:
| Mode | --quote | --colsep | --rowsep | --null |
|---|---|---|---|---|
| ascii | csv | "\037" | "\036" | "" |
| c | tcl | , | "\n" | NULL |
| csv | csv | , | "\r\n" | "" |
| jatom | json | , | "\n" | null |
| list | off | "\n" | ||
| quote | on | , | "\n" | NULL |
| tabs | csv | "\t" | "\n" | "" |
| tcl | tcl | , | "\n" | "" |
3.4. 출력 모드 "line"
"line" 모드에서 데이터베이스 행의 각 컬럼은 각자 자체 줄에 표시돼요. 각 줄은 컬럼 이름, 콜론, 컬럼 데이터로 구성돼요. 연속된 레코드는 빈 줄로 구분돼요. line 모드 출력의 예는 다음과 같아요:
sqlite> .mode line
sqlite> select * from tbl1;
one: hello!
two: 10
one: goodbye
two: 20
sqlite>
"line" 모드는 표시의 단일 줄에 맞기엔 너무 많은 많은 수의 컬럼을 가진 결과를 표시할 때 특히 유용해요. line 모드는 표시 줄이 넘치는 것을 피해서 출력을 더 읽기 쉽게 만들어요.
3.52.0 버전 이전에는 구분자가 콜론이 아니라 등호였어요. 다시 말해 위 예제의 첫 줄은 "one: hello!"가 아니라 "one = hello!"라고 쓰였어요. ".mode" 명령의 "--colsep TEXT" 옵션(TEXT가 원하는 구분자)으로 3.52.0 이전 형식을 복원할 수 있어요. 레거시 형식을 얻으려면 이렇게 해요:
sqlite> .mode line --colsep " = "
3.5. 표 형태 출력 모드
표 형태 모드에서 각 레코드는 데이터가 컬럼으로 정렬된 별도 줄에 표시돼요. "column" 모드가 예시예요:
sqlite> .mode column
sqlite> select * from tbl1;
one two
-------- ---
hello! 10
goodbye 20
sqlite>
"column" 모드("box", "psql", "qbox", "table", "markdown"에서도)에서 컬럼 너비는 자동으로 조정돼요. ".mode" 명령의 "--width" 옵션으로 각 컬럼에 지정된 너비를 제공해 이를 덮어쓸 수 있어요. "--width"의 인자는 각 컬럼에 할애할 문자 수인 공백 또는 콤마로 구분된 정수 목록이에요. 음수는 오른쪽 정렬을 의미해요. 값 0은 컬럼 너비가 내용에 자동으로 조정됨을 의미해요. "--width"의 기본값은 0이고, "--width"로 지정된 컬럼 오른쪽의 컬럼도 기본값이 0이에요. 따라서:
sqlite> .mode --width 12,-6
sqlite> select * from tbl1;
one two
------------ ------
hello! 10
goodbye 20
sqlite>
".mode --width 0" 명령은 모든 컬럼 너비를 0으로 리셋해서 모든 컬럼 너비가 자동으로 결정되게 해요.
다른 표 형태 모드의 예는 다음과 같아요:
sqlite> .mode box --widths 0
sqlite> select * from tbl1;
╭─────────┬─────╮
│ one │ two │
╞═════════╪═════╡
│ hello! │ 10 │
│ goodbye │ 20 │
╰─────────┴─────╯
sqlite> .mode markdown
sqlite> select * from tbl1;
| one | two |
|---------|-----|
| hello! | 10 |
| goodbye | 20 |
sqlite> .mode psql
sqlite> select * from tbl1;
one | two
---------+-----
hello! | 10
goodbye | 20
sqlite> .mode qbox
sqlite> select * from tbl1;
╭───────────┬─────╮
│ one │ two │
╞═══════════╪═════╡
│ 'hello!' │ 10 │
│ 'goodbye' │ 20 │
╰───────────┴─────╯
sqlite> .mode table
sqlite> select * from tbl1;
+---------+-----+
| one | two |
+---------+-----+
| hello! | 10 |
| goodbye | 20 |
+---------+-----+
sqlite>
"qbox" 모드는 실제로는 "--quote on"을 자동으로 활성화하는 "box"의 편의 변형일 뿐이에요. 마찬가지로 "psql"(PostgreSQL의 "psql" 명령줄 유틸리티와 비슷한 방식으로 결과를 형식 지정하므로 그렇게 이름 지어졌어요)은 실제로 "--border off" 옵션이 추가된 "table" 모드일 뿐이에요.
3.6. 줄 줄바꿈
표 형태 모드는 형식 지정을 제어하는 몇 가지 추가 옵션을 받아요. "--wrap N" 옵션(N은 정수)은 N자보다 긴 텍스트를 컬럼이 줄바꿈하도록 해요. N이 0이면 줄바꿈이 비활성화돼요.
sqlite> insert into tbl1 values('The quick fox jumps over a lazy brown dog.',90);
sqlite> .mode box --wrap 30
sqlite> select * from tbl1 where two>50;
╭────────────────────────────────┬─────╮
│ one │ two │
╞════════════════════════════════╪═════╡
│ The quick fox jumps over a laz │ 90 │
│ y brown dog. │ │
╰────────────────────────────────┴─────╯
sqlite>
줄바꿈은 정확히 N자 뒤에 일어나는데, 그것은 단어 중간일 수 있어요. 단어 경계에서 줄바꿈하려면 "--wordwrap on" 옵션(짧게는 "-ww"만)을 추가해요:
sqlite> .mode box --wrap 30 -ww
sqlite> select * from tbl1 where two>50;
╭────────────────────────────────┬─────╮
│ one │ two │
╞════════════════════════════════╪═════╡
│ The quick fox jumps over a │ 90 │
│ lazy brown dog. │ │
╰────────────────────────────────┴─────╯
sqlite>
".mode box --wrap 60 --quote on" 명령은 일반 목적 데이터베이스 쿼리에 매우 유용해서 그 자체 별칭이 주어졌어요. 그 30자 명령 전체를 입력하는 대신 ".mode qbox"라고만 하면 돼요.
3.7. 출력 모드 "insert"
또 다른 유용한 출력 모드는 "insert"예요. insert 모드에서 출력은 SQL INSERT 문처럼 보이도록 형식 지정돼요. insert 모드를 사용해 나중에 다른 데이터베이스에 데이터를 입력하는 데 쓸 수 있는 텍스트를 생성해요.
insert 모드를 지정할 때는 삽입할 테이블의 이름인 추가 인자를 줘야 해요. 예를 들어:
sqlite> .mode insert new_table
sqlite> select * from tbl1 where two<50;
INSERT INTO new_table VALUES('hello',10),
('goodbye',20);
sqlite>
INSERT 문의 크기(바이트)가 "--multiinsert" 설정(기본: 3000)을 초과할 때까지 여러 행이 INSERT 문 끝에 추가 튜플로 추가돼요. 모든 행을 별도 INSERT 문에 넣으려면 --multiinsert를 0으로 설정해요.
.mode 명령에 --titles on 옵션이 포함되면 INSERT 출력에 컬럼 이름 목록이 포함돼요:
sqlite> .mode insert mytable --titles on
sqlite> select 1 a, 2 b, 3 c;
INSERT INTO mytable(a,b,c) VALUES(1,2,3);
sqlite>
3.8. 출력 모드 "split"
".mode split"로 호출되는 "split"이라고 하는 컬럼 분할 출력 모드는 표 형태 "column" 모드의 특수한 경우예요. "split" 모드는 단일 컬럼을 반환하는 쿼리와 "--screenwidth" 옵션이 "off"가 아닐 때만 동작해요. 결과를 단일 세로 컬럼으로 표시하는 대신, "split" 모드는 그 컬럼을 세로로 줄바꿈해서 최종 출력이 두 개 이상의 컬럼이 되도록 시도해요. CLI는 화면에 맞는 만큼 많은 컬럼을 만들어요.
다음 예제는 55자 너비 화면에서 이름이 "c"로 시작하는 모든 내장 SQL 함수를 나열하기 위해 "split" 모드를 사용하는 것을 보여줘요:
sqlite> .mode --once split --sw 55
sqlite> SELECT name FROM pragma_function_list
...> WHERE name GLOB 'c*'
...> ORDER BY name;
ceil coalesce cosh current_date
ceiling concat count current_time
changes concat_ws count current_timestamp
char cos cume_dist
sqlite3>
CLI는 내부적으로 "split" 모드를 사용해 .tables 같은 dot-command를 구현하는 데 도움을 줘요.
3.9. 출력 모드 "count"와 "off"
출력 모드 "count"와 "off"는 실제 쿼리 결과를 보여주지 않아요. 대신 결과 행 수만 보여주거나, 또는 아무것도 보여주지 않죠. 이 모드들은 출력을 신경 쓰지 않고 계산하는 데 걸리는 시간에만 신경 쓰는, 많은 출력을 생성하는 쿼리의 타이밍 테스트를 실행하는 데 유용해요.
3.10. 출력 모드 "batch"와 "tty"
"batch"와 "tty" 두 별칭은 CLI가 스크립트로 시작될 때("batch")와 터미널이나 콘솔에서 시작될 때("tty")의 기본 출력 모드를 의미해요.
3.11. 사용자 정의 출력 모드
"--tag" 옵션은 새 맞춤 출력 모드를 정의하고 이름을 지정할 수 있게 해줘요. --tag의 인자는 새 모드의 이름이에요. --tag 앞에서 정의된 모든 설정은 그 이름에 캡처되고 나중에 ".mode TAGNAME"으로 복원할 수 있어요.
4. 제어 문자 이스케이프
기본적으로(3.50.0 버전부터) CLI는 CLI가 출력하려는 콘텐츠 문자열 안에 있는 문자라도 U+0001부터 U+001f 범위의 대부분 제어 문자 표시를 피해요. 출력이 ANSI 이스케이프 코드를 해석하는 장치에서 보일 때 문제를 피하기 위해서예요. CLI는 대부분 제어 문자 표시를 피하지만 TAB (0x09), LF (0x0a), CRLF (0x0d,0x0a)는 예외로 해요. 이 예외들은 변경 없이 출력으로 통과돼요.
CLI의 기본 동작은 Linux의 "cat -A" 명령이 하는 것과 같은 방식으로 대부분의 제어 문자를 표시하는 것이에요: 제어 문자 X에 대해 Y가 X+0x40인 두 문자 "^Y"를 표시해요. 예를 들어 "ESC" 문자(0x1b)는 "^["로, 백스페이스 문자(0x08)는 "^H"로 렌더링돼요.
제어 문자 렌더링은 CLI의 "--escape T" 명령줄 옵션 또는 ".mode" dot-command(T는 제어 문자 처리 알고리즘)로 제어돼요. 기본 T는 "ascii"예요. "--escape symbol"로 바꾸면 제어 문자는 U+2401부터 U+241f 범위의 인쇄 가능한 유니코드 값으로 매핑돼요. 예를 들어 ESC는 "␛"로, 백스페이스는 "␈"로 렌더링돼요. "--escape off"로 설정하면 모든 제어 문자 매핑이 꺼져서 CLI가 출력하는 문자가 데이터베이스에 있는 것과 정확히 같아져요.
5. 줄 끝
Windows의 기본 줄 끝은 "\r\n"(CRLF) 또는 "\n" NL일 수 있어요. 출력 형식과 밀접한 관련이 있지만, 줄 끝 선택은 CLI 구현의 완전히 별도 하위 시스템에 의해 제어되어서 ".mode"와 별개인 ".crlf" dot-command가 있어요.
".crlf on"으로 CRLF 줄 끝을, ".crlf off"로 NL을 설정해요. Windows의 전통대로 CRLF가 기본값이에요. 하지만 이로 인해 추가된 "\r" 문자 때문에 일부 출력이 비-Windows 플랫폼과 달라져요. Windows에서 CLI 출력이 다른 모든 시스템의 결과와 동일하게 하려면 ".crlf off"를 실행해요.
비-Windows 플랫폼에서 ".crlf" 명령은 no-op이고 crlf 모드는 항상 "off"예요. CSV 출력의 경우 RFC-4180의 요구사항 때문에 .crlf 설정과 무관하게 줄 끝은 항상 "\r\n"이에요.
6. .mode 문법과 옵션 상세
mode 명령은 인자를 왼쪽에서 오른쪽으로 처리해요. 순서가 중요할 수 있어요. 예를 들어 "--reset" 옵션 왼쪽의 설정은 아마 롤백될 거예요. reset이 그 설정들 뒤에 처리되기 때문이에요. 하지만 오른쪽의 설정은 살아남아요. reset 후에 설정이 변경되기 때문이죠.
".mode" 명령에서 사용 가능한 옵션의 빠른 요약을 보려면 ".help mode"를 사용해요. 자세한 내용은 아래를 계속 읽어보세요.
6.1. --align STRING
정렬 값은 표 형태 모드에서 텍스트가 어떻게 조정되는지 결정하는 'L', 'C', 'R' 문자로 구성된 문자열이에요. 'L'은 왼쪽(기본값), 'C'는 가운데, 'R'은 오른쪽을 의미해요. 문자열의 각 문자는 표 형태 출력의 단일 컬럼에 대응해요. 출력에 정렬 문자열의 문자 수보다 많은 컬럼이 있으면 남은 컬럼은 모두 왼쪽 정렬돼요.
6.2. --blob-quote ARG
--blob-quote 옵션("--blob"으로 줄여쓸 수 있음)은 BLOB 값이 어떻게 표시되는지 결정해요. 인자는 "auto", "text", "sql", "hex", "tcl", "json", "size" 중 하나일 수 있어요.
기본 --blob-quote 설정은 "auto"로, 시스템이 현재 모드 및/또는 현재 "--quote" 설정을 기반으로 BLOB 값을 표시하는 적절한 방법을 선택해요. 기본값은 "auto"이며 대부분의 상황에서 가장 잘 동작해요.
ARG가 "text"이면 BLOB 값의 바이트가 UTF-8 텍스트로 해석되어 텍스트로 표시돼요. "sql"은 BLOB가 SQL BLOB 리터럴로 렌더링됨을 의미해요. "hex"는 BLOB 값이 16진수로 표시됨을 의미해요. "tcl"은 각 바이트가 전통적인 C언어 백슬래시 8진 표기로 표현된 이중 인용 문자열로 BLOB 값이 렌더링됨을 의미해요. 예를 들어 x'424c4f42' BLOB 값은 "\102\114\117\102"로 렌더링돼요. "json" 인코딩은 개별 바이트가 JSON 이스케이프를 사용한다는 점만 빼고 비슷해요: "\u0042\u004c\u004f\u0042". "size" 인코딩은 BLOB 콘텐츠를 전혀 보여주지 않고 BLOB의 크기를 텍스트로만 보여줘요: (482-byte blob)처럼요.
6.3. --charlimit N
출력의 단일 값에 표시할 문자 수를 제한해요. 출력 텍스트가 N자보다 길면 잘리고 끝에 줄임표가 추가돼요. N이 0이면 문자 제한이 비활성화돼요.
문자 제한은 모든 출력 모드에서 작동해요.
"--linelimit" 옵션, "--limits" 옵션, "--titlelimit" 옵션도 참고해요.
6.4. --border auto|off|on
--border 설정은 전체 결과 바깥에 박스가 나타나는지, 아니면 내부 구분선만 보이는지 제어해요. 이 설정은 "box"와 "table" 모드에만 영향을 줘요. 이 설정 값이 "off"이면 테두리가 생략돼요. 그렇지 않으면 테두리가 표시돼요. 기본 동작은 바깥 테두리를 표시하는 것이에요.
"psql" 모드는 --border 설정이 "off"로 바뀐 "table" 모드의 별칭이에요.
6.5. --colsep STRING
컬럼 구분자를 STRING으로 설정해요. 이중 인용부호와 백슬래시 이스케이프를 사용해 공백과 탭(\t) 같은 특수 문자를 컬럼 구분자의 일부로 사용해요.
6.6. --escape ESC
모든 출력에서 제어 문자가 어떻게 이스케이프되는지 제어해요. ESC의 가능한 값은 "off", "ascii", "symbol"이에요. "ascii" 값이 기본값이며 권장돼요.
6.7. --linelimit N
단일 값에 대해 처음 N줄 이상의 텍스트를 표시하지 않아요. 줄은 텍스트에 개행 문자(U+000a)가 포함되거나 컬럼 줄바꿈 때문에 나뉠 수 있어요. 어느 쪽이든 이 옵션은 처음 N줄을 보여준 다음 N+1번째 줄에 줄임표를 보여줘요. N을 0으로 설정하면 줄 제한기가 비활성화돼요.
줄 제한기는 표 형태 모드와 "line" 모드에서만 작동해요. 다른 모든 모드에서는 무시돼요.
"--charlimit" 옵션, "--limits" 옵션, "--titlelimit" 옵션도 참고해요.
6.8. --limits L,C,T
이 옵션은 "--linelimit L --charlimit C --titlelimit T"의 약어예요. 다시 말해 인자가 콤마로 구분된 세 정수 L, C, T이면 줄 제한, 문자 제한, 제목 제한이 각각 L, C, T로 설정돼요. ",T"를 생략하면 줄 제한과 문자 제한만 변경되고 제목 제한은 변경되지 않아요. --limits의 인자는 "0,0,0"의 별칭인 "off"이거나 모든 제한을 합리적인 내장 기본값으로 설정하는 "on"일 수도 있어요.
6.9. --list
"--list" 옵션은 인자를 받지 않아요. ".mode" 명령이 "--tag" 옵션으로 만든 사용자 정의 모드를 포함해 모든 사용 가능한 모드 목록을 출력하게 해요.
6.10. --multiinsert N
--multiinsert 설정은 "insert" 모드일 때 출력에 영향을 줘요. 인자 N은 각 INSERT 문에 포함될 결과 행 수를 결정해요. N이 양수이면 INSERT 문의 총 크기가 N바이트를 초과할 때까지 여러 행이 INSERT 문에 추가 튜플로 추가돼요. 이후 행은 새 INSERT 문에 들어가요.
--multiinsert를 2천 또는 3천으로 설정하면 ".mode insert" 출력이 더 읽기 쉽고, 콘텐츠를 다른 데이터베이스 엔진으로 옮길 때 더 빨리 파싱되기도 해요.
6.11. --null STRING
STRING 인자는 CLI가 NULL 값에 대해 표시하는 텍스트가 돼요. 흔한 선택은 (""로 인용해야 하는) 빈 문자열, "null", "NULL"이에요.
6.12. --once
"--once" 옵션은 오른쪽의 모든 설정 변경이 일시적이고 다음 SQL 문이 실행된 후 롤백됨을 의미해요.
앞 문장에서 "다음 SQL 문"은 세미콜론으로 끝나는 다음 완전한 SQL 입력 줄까지 포함한 모든 SQL 문을 의미해요. 같은 입력 줄에 두 개 이상의 SQL 쿼리가 있으면 모드가 롤백되기 전에 모두 실행돼요. 예를 들어 ".mode --once split"을 한 다음 다음 입력 줄에 두 개의 SELECT 문을 입력하면 두 SELECT 모두 "split" 모드를 사용해 처리돼요.
6.13. --quote ARG
--quote 옵션은 렌더링되기 전에 텍스트 값이 어떻게 인용되는지 결정해요. 가능한 인자는 "off", "on", "sql", "relaxed", "csv", "html", "tcl", "json"이에요.
--quote가 "off"이면 텍스트가 이스케이프 없이 데이터베이스에 나타나는 그대로 표시돼요.
--quote 값 "sql"은 텍스트를 단일 인용부호 안의 SQL 텍스트 리터럴로 표시함을 의미해요. "relaxed" 값은 필요하지 않은 경우 추가 인용 문법을 피하려고 한다는 점만 빼고 비슷해요. "csv" 값은 RFC-4180에서 CSV 파일에 대해 지정된 규칙에 따라 텍스트를 인용함을 의미해요. "html" 값은 HTML에서 표시하도록 텍스트를 이스케이프해서 "<" 문자는 "<"로 렌더링되는 등으로 함을 의미해요. "tcl"은 TCL, C, Perl, 그리고 다른 흔한 프로그래밍 언어에서처럼 텍스트를 이중 인용부호 안에 넣고 백슬래시 이스케이프를 사용함을 의미해요. "json"은 유효한 JSON인 백슬래시 이스케이프만 사용한다는 점만 빼고 "tcl"과 비슷해요.
"on" 값은 "--null" 옵션도 "NULL"로 변경한다는 점만 빼고 "sql"과 비슷해요.
6.14. --reset
--reset 옵션은 현재 모드를 변경하지 않고, 다른 모든 다양한 설정(--colsep, --null, --rowsep 등)을 그 특정 모드의 기본값으로 되돌려요.
6.15. --rowsep STRING
STRING을 행 구분자로 사용해요.
6.16. --screenwidth N
이 설정은 CLI에게 표시 장치가 N자 너비라고 알려줘요. 그러면 CLI는 표 형태와 "line" 모드 출력을 그만큼의 문자 안에 맞도록 압축하려고 시도해요. 인자가 0이거나 "off"이면 screenwidth를 무시하고 결과를 특정 너비로 압축하려는 시도를 하지 않는다는 뜻이에요.
기본값은 "auto"로, CLI가 각 쿼리를 실행하기 전에 표시 장치를 조사해 실제 너비를 결정하게 해요. "auto" 값으로 CLI를 터미널이나 콘솔 창에서 실행 중이고 창을 더 넓게 끌면 screenwidth 설정이 자동으로 조정돼요.
"--sw N" 설정은 "--screenwidth N"의 약어예요.
screenwidth는 표 형태 모드와 line 모드에서만 사용돼요. screenwidth 제한은 CLI가 지정된 너비에 맞도록 출력을 압축하려고 열심히 노력하지만, 방법이 없으면 지정된 screenwidth를 초과할 수 있다는 의미에서 "최선 노력(best effort)"이에요. 예를 들어 --screenwidth가 40이고 50개의 서로 다른 컬럼이 있는 결과를 표시하려 한다면 분명히 맞을 방법이 없어서 그 경우 screenwidth를 초과해요.
6.17. --tablename NAME
"insert" 모드에서 삽입할 테이블의 이름으로 "NAME"을 사용해요.
6.18. --tag NAME
이 옵션은 NAME이라는 새 모드를 만들어요. 이 태그를 사용한 후 ".mode NAME"이라고 하면 "--tag" 옵션이 처음 실행됐을 때 유효했던 모든 모드 설정이 복원돼요.
여기서 옵션 순서가 중요해요. 새 모드는 "--tag" 옵션이 맞닥뜨려진 순간 유효한 모든 모드 설정으로 구성돼요. 따라서 "--tag" 왼쪽의 변경은 새 모드의 일부이지만 "--tag" 오른쪽의 변경은 그렇지 않아요.
6.19. --textjsonb BOOLEAN
--testjsonb가 활성화되면 BLOB 값을 표시할 때 CLI는 먼저 값이 정말 JSONB blob인지 확인하고, 그렇다면 "--quote" 옵션이 지정한 인용 메커니즘을 사용해 그 JSONB에 대한 동등한 텍스트를 표시해요. 표시할 BLOB가 JSONB가 아니면 현재 "--blob-quote" 옵션으로 렌더링돼요.
6.20. --title ARG
--title 옵션은 컬럼 헤더를 렌더링할지, 그리고 그렇다면 컬럼 헤더에 어떤 텍스트 인코딩을 사용할지 결정해요. 컬럼 헤더를 보여줄지, 그리고 보여준다면 어떻게 인코딩할지도요. ARG는 "off", "on", "sql", "csv", "html", "tcl", "json"일 수 있어요.
6.21. --titlelimit N
--titlelimit 옵션은 표 형태와 "line" 모드에서 컬럼 제목의 최대 너비를 지정해요. (다른 모드는 현재 --titlelimit의 영향을 받지 않지만, 미래 릴리스에서 바뀔 수 있어요.) 컬럼 제목이 지정된 문자 수보다 길면 제목이 잘려요. 또한 제목 안의 개행과 탭 문자는 일반 공백으로 바뀌어요.
--titlelimit 기능은 서브쿼리나 복잡한 표현식을 결과 컬럼으로 사용하는 쿼리를 입력할 때 거대한 컬럼 제목을 방지하는 데 유용해요. AS 절이 없으면 그런 컬럼의 제목은 서브쿼리나 표현식의 전체 텍스트로 기본 설정돼요. 그 결과 다루기 어려운 표 형태 및/또는 line 모드 출력이 나올 수 있어요. --titlelimit를 양수(보통 약 10~20)로 설정하면 더 합리적으로 보이는 출력을 보장할 수 있어요. --titlelimit가 0이면 제목 길이에 제한이 부과되지 않아요.
"--charlimit" 옵션, "--linelimit" 옵션, "--limits" 옵션도 참고해요.
6.22. --verbose
활성화되면 현재 모드와 설정의 표시가, 현재 기본값을 유지하는 설정까지 모든 가능한 설정을 보여줘요.
"-v" 옵션은 "--verbose"의 약어예요.
6.23. --widths LIST
표 형태 모드의 컬럼 너비를 설정해요. 인자는 각 컬럼에 하나씩인 정수 목록이에요. "0" 너비는 데이터의 실제 너비에 기반한 동적 너비를 사용함을 의미해요. LIST에 컬럼 수보다 더 적은 항목이 있으면 지정되지 않은 너비에 "0"이 사용돼요.
6.24. --wordwrap BOOLEAN
"--wrap" 옵션이 더 긴 텍스트를 줄바꿈하도록 요구할 때, 이 옵션은 줄바꿈이 단어 경계에서 일어나는지 단어 중간에서 일어나는지 결정해요. true 값은 CLI가 줄바꿈할 적절한 단어 경계를 찾으려고 시도함을 의미해요.
정말 긴 단어의 경우 단어 경계를 찾는 것이 불가능할 수 있는데, 그 경우 줄바꿈이 그래도 단어 중간에서 일어날 수 있어요.
6.25. --wrap N
표 형태 모드에서 이 설정은 어떤 컬럼도 N자보다 넓게 자라지 못하게 해요. 표시할 텍스트가 N자보다 넓으면 텍스트가 줄바꿈돼요. N 값 0은 제한이 없어서 테이블 컬럼이 텍스트를 수용하기 위해 필요한 만큼 넓을 수 있음을 의미해요.
6.26. --ww
"--ww" 옵션은 인자를 받지 않으며, 단순히 "--wordwrap on"의 약어 표기예요.