Quack Reference

Quack Reference (Quack 참조)

이 페이지는 [quack 확장]({% link docs/current/core_extensions/quack.md %})이 노출하는 모든 함수, 설정, 로그 타입을 나열해요. 프로토콜 둘러보기는 [Overview]({% link docs/current/quack/overview.md %})부터 시작하는 것이 좋아요.

출처: 문서

본문

함수 참조 (Function Reference)

서버 관리 (Server Management)

함수 설명
quack_serve(uri, token := 'token_value', allow_other_hostname := false, disable_ssl := false) uri에서 서버를 시작해요. 기본적으로 localhost 전용이에요. token을 전달해 서버의 인증 토큰을 명시적으로 설정하고(최소 4자), 그렇지 않으면 자동 생성돼요. listen URI, URL, auth 토큰을 반환해요.
quack_stop(uri) uri에서 수신 중인 서버를 중지해요.
quack_identify(name, provider, hostname, region, meta) 이 노드의 whoami 식별 필드를 설정해요. 임의 부분집합을 제공할 수 있어요.
whoami() 현재 노드의 식별 + 런타임 정보를 반환하는 테이블 매크로.

클라이언트 쿼리 (Client Queries)

함수 설명
quack_query(uri, query, token := 'token_value', disable_ssl := false) 원격 uri에서 query를 실행하고 결과를 스트리밍해요. token을 전달해 클라이언트 측의 일치하는 quack 시크릿을 덮어쓸 수 있어요.
quack_query_by_name(catalog, query) 이미 연결된 Quack 카탈로그에 대해 query를 실행해요 (⟨catalog⟩.query()에서 사용).

유틸리티 (Utility)

함수 설명
quack_uri_parser(uri, ssl) Quack URI를 STRUCT(host, port, ipv6, ssl, url) 항목으로 파싱해요
quack_check_token(sid, client_token, server_token) 기본 인증 콜백으로, 클라이언트가 제공한 토큰을 서버의 저장된 토큰과 비교해요.
quack_nop_authorization(sid, query) 기본 인가 콜백으로, 항상 허용해요.
quack_clear_cache() 캐시를 지워요. 이는 DuckDB 클라이언트가 카탈로그를 강제로 새로고침하게도 해요.

ATTACH 옵션

옵션 타입 기본값 설명
TOKEN VARCHAR (설정 안 됨) 인증 토큰. 클라이언트 측의 일치하는 quack 시크릿을 덮어써요.
DISABLE_SSL BOOLEAN 로컬이면 true, 그 외 false 클라이언트 전송을 강제해요. 로컬 URI는 기본적으로 평문 HTTP를 사용해요.
TYPE VARCHAR 추론됨 토큰 해석에 사용되는 시크릿 타입(예: quack)을 고정해요.

설정 (Settings)

모든 설정은 일반 DuckDB 세션/글로벌 옵션이에요. SET ⟨name⟩ = ⟨value⟩ 또는 SET GLOBAL로 설정해요.

인증 / 인가 (Authentication / Authorization)

인증 콜백은 매번 새 서버 측 연결에서 평가되므로 아래 두 설정은 글로벌 스코프(SET GLOBAL)예요. 이들에 대한 일반 SET은 자동으로 글로벌 슬롯에 전달돼요. 기본값을 복원하려면 RESET GLOBAL을 사용하고, 일반 RESET은 세션 뷰만 지우므로 인증 경로는 오래된 글로벌 값을 계속 읽게 돼요.

설정 타입 기본값 설명
quack_authentication_function VARCHAR quack_check_token 서버가 클라이언트를 인증하는 데 사용하는 3-인자 스칼라 함수 (sid, client_token, server_token) -> BOOLEAN의 이름.
quack_authorization_function VARCHAR quack_nop_authorization 서버가 각 쿼리를 인가하는 데 사용하는 2-인자 스칼라 함수 (sid, query) -> BOOLEAN의 이름.

기대되는 시그니처를 가진 스칼라 함수를 만든 다음 설정을 그것으로 가리켜 자체 auth를 연결할 수 있어요. 예시는 [Security]({% link docs/current/quack/security.md %})를 참고해요.

FETCH 배칭 (서버 측)

서버는 청크별 오버헤드를 줄이기 위해 여러 DataChunk를 각 FETCH 응답에 배칭해요.

설정 타입 기본값 설명
quack_fetch_batch_chunks UBIGINT 12 FETCH 응답당 전송되는 최대 DataChunk 수.

노드 식별 (Node Identity)

이 설정들은 whoami() 매크로를 뒷받침해요. quack_identify(...)는 이들을 갱신하는 설탕이에요.

설정 타입 기본값 설명
whoami_name VARCHAR (empty) 사람이 읽을 수 있는 노드 이름.
whoami_provider VARCHAR (empty) 배포 제공자 (ec2, docker, local, ...).
whoami_hostname VARCHAR (empty) 네트워크 호스트명 / 공개 주소.
whoami_region VARCHAR (empty) 배포 리전.
whoami_started_at VARCHAR (empty) 노드 시작 시간 (ISO 8601 타임스탬프). uptime을 고정해요.
whoami_meta VARCHAR {} 제공자별 메타데이터를 JSON으로.
quack_loaded_at_us BIGINT 확장 로드 시 에폭 마이크로초 whoami_started_at이 비었을 때의 폴백 uptime 앵커.

로깅 (Logging)

확장이 두 로그 타입을 등록해요. 연결 문제를 디버깅하거나 요청 타이밍을 측정하려면 활성화해요.

Quack 로그

모든 Quack 메시지의 구조화 로그 (클라이언트 및 서버 측 모두):

CALL enable_logging('Quack');

FROM quack_query('quack:localhost', 'SELECT 42');

SELECT * FROM duckdb_logs_parsed('Quack');
context_id scope connection_id transaction_id query_id thread_id timestamp type log_level message_type quack_connection_id client_query_id query server duration_ms response_type error
60 CONNECTION 2 18 18 NULL 2026-05-10 09:06:19.841623+02 Quack DEBUG CONNECTION_REQUEST 18 NULL http://localhost:9494 41 CONNECTION_RESPONSE NULL
60 CONNECTION 2 18 18 NULL 2026-05-10 09:06:19.842407+02 Quack DEBUG PREPARE_REQUEST 091A003553E7E67B615B73D6BE81FD2E 18 SELECT 42 http://localhost:9494 0 PREPARE_RESPONSE NULL

각 항목의 필드:

필드 설명
message_type 요청 타입: PREPARE_REQUEST, FETCH_REQUEST 등.
quack_connection_id 서버가 발급한 연결 id (하나의 ATTACH에서 요청 간에 안정적).
client_query_id 클라이언트가 할당한 단조 id로, 클라이언트/서버 로그를 상호 연관지어요.
query PREPARE_REQUEST의 SQL 페이로드.
server 클라이언트 측 로그의 HTTP URL, 서버 측 로그의 NULL.
duration_ms 왕복 시간 (클라이언트) 또는 처리 시간 (서버).
response_type 응답 타입 또는 ERROR.
error 요청이 실패한 경우 오류 메시지.

클라이언트 요청을 서버 측 처리와 연관지으려면 (quack_connection_id, client_query_id)로 조인해요.

HTTP 로그

기본 HTTP 전송은 별도로 로깅할 수 있어요:

CALL enable_logging('HTTP');
FROM quack_query('quack:localhost', 'SELECT 1');
SELECT request.type, request.url, response.status
FROM duckdb_logs_parsed('HTTP');
type url status
POST http://localhost:9494/quack OK_200
POST http://localhost:9494/quack OK_200

요청은 /quack 엔드포인트로의 POST예요.

쿼리를 위한 로그 영구화

duckdb_logs_parsed는 DuckDB의 인메모리 로그 버퍼에서 읽어요. 의미 있는 세션에서는 로그를 영구화하고 싶을 거예요:

CALL enable_logging(
    'Quack',
    storage => 'file',
    storage_config => {'path': '/tmp/duckdb-rpc-logs'}
);

실행 사이에 로그를 지우려면 다음을 사용해요:

CALL truncate_duckdb_logs();

로깅을 끄려면 다음을 실행해요:

CALL disable_logging();

더 알아보기 (Learn more)

Quack 확장 개요와 프로토콜 둘러보기는 [Overview]({% link docs/current/quack/overview.md %})를 참고해요.