확장 빌드하기
확장 빌드하기
확장은 소스에서 빌드하고 결과 로컬 바이너리에서 설치할 수 있어요.
출처: 문서
본문
확장은 소스에서 빌드하고 결과 로컬 바이너리에서 설치할 수 있어요.
확장 빌드하기
확장 플래그로 빌드하려면 BUILD_EXTENSIONS 플래그를 빌드하려는 확장 목록으로 설정해요. 예를 들어:
BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make
이 옵션은 delta 같은 out-of-tree 확장도 허용해요.
BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch;delta' GEN=ninja make
대부분의 경우 확장은 결과 DuckDB 실행 파일에 직접 링크돼요.
특수 확장 플래그
BUILD_JEMALLOC
이 플래그가 설정되면 jemalloc이 빌드돼요.
BUILD_TPCE
이 플래그가 설정되면 TPCE 라이브러리가 빌드돼요. TPC-H와 TPC-DS와 달리 이는 올바른 확장이 아니며 그렇게 배포되지 않아요. 이걸 활성화하면 테스트 스위트를 통해 TPC-E 지원 쿼리가 가능해져요.
디버그 플래그
CRASH_ON_ASSERT
D_ASSERT(condition)이 코드 전체에서 사용되며, 디버그 빌드에서는 이들이 InternalException을 발생시켜요. 이 플래그를 활성화하면 assertion이 트리거될 때 대신 직접 크래시를 유발해요.
DISABLE_STRING_INLINE
실행 형식에서 string_t는 특정 길이(12바이트) 미만의 문자열을 "인라인"하는 기능을 가지고 있어요. 이는 별도의 할당이 필요 없게 해요. 이 플래그가 설정되면 이를 비활성화하고 작은 문자열을 인라인하지 않아요.
DISABLE_MEMORY_SAFETY
비성능-critical 코드 전반에 걸쳐 광범위하게 사용되는 데이터 구조에는 메모리 안전을 보장하는 추가 검사가 있어요. 이러한 검사는 다음과 같아요.
nullptr이 역참조되지 않도록 보장.- 인덱스 범위를 벗어난 접근이 크래시를 트리거하지 않도록 보장.
이 플래그를 활성화하면 이러한 검사를 제거해요. 주로 이러한 검사의 성능 영향이 무시할 만한지 확인하기 위해 수행돼요.
DESTROY_UNPINNED_BLOCKS
BufferManager에서 이전에 고정된(pinned) 블록이 고정 해제(unpinned)될 때, 이 플래그를 활성화하면 즉시 파괴해 고정되지 않았음에도 이 메모리가 여전히 사용되는 상황이 없는지 확인해요.
DEBUG_STACKTRACE
테스트에서 크래시나 assertion 발생 시 스택 트레이스를 인쇄해요. 디버거를 연결해도 찾기 어려운 크래시를 디버깅할 때 유용해요.
CMake 구성 파일 사용
CMake 구성 파일로 빌드하려면 extension_config.cmake라는 이름의 확장 구성 파일을 예를 들어 다음 내용으로 만들어요.
duckdb_extension_load(autocomplete)
duckdb_extension_load(fts)
duckdb_extension_load(inet)
duckdb_extension_load(icu)
duckdb_extension_load(json)
duckdb_extension_load(parquet)
DuckDB를 다음과 같이 빌드해요.
GEN=ninja EXTENSION_CONFIGS="extension_config.cmake" make
그런 다음 확장을 한 번에 설치하려면 다음을 실행해요.
# for release builds
cd build/release/extension/
# for debug builds
cd build/debug/extension/
# install extensions
for EXTENSION in *; do
../duckdb -c "INSTALL '${EXTENSION}/${EXTENSION}.duckdb_extension';"
done
더 알아보기 (Learn more)
- 빌드 구성 문서에서 패키지 및 디버그 플래그를 확인해요.