Zum Inhalt springen

Erweiterungen bauen

Erweiterungen können aus dem Quellcode gebaut und aus der entstehenden lokalen Binärdatei installiert werden.

Erweiterungen bauen

Um mit Erweiterungs-Flags zu bauen, setzen Sie das Flag BUILD_EXTENSIONS auf die Liste der Erweiterungen, die gebaut werden sollen. Zum Beispiel:

Terminal window
BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make

Diese Option akzeptiert auch Out-of-Tree-Erweiterungen wie delta:

Terminal window
BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch;delta' GEN=ninja make

In den meisten Fällen werden Erweiterungen direkt in die entstehende DuckDB-Executable gelinkt.

Spezielle Erweiterungs-Flags

BUILD_JEMALLOC

Ist dieses Flag gesetzt, wird jemalloc gebaut.

BUILD_TPCE

Ist dieses Flag gesetzt, wird die TPCE-Bibliothek gebaut. Anders als TPC-H und TPC-DS ist das keine echte Erweiterung und wird auch nicht als solche verteilt. Damit werden TPC-E-fähige Abfragen über unsere Testsuite möglich.

Debug-Flags

CRASH_ON_ASSERT

D_ASSERT(condition) wird im gesamten Code verwendet; in Debug-Builds wirft das eine InternalException. Mit diesem Flag führt das Auslösen der Assertion stattdessen direkt zu einem Absturz.

DISABLE_STRING_INLINE

In unserem Ausführungsformat kann string_t Zeichenketten unter einer bestimmten Länge (12 Bytes) „inlinen“, das heißt, sie brauchen keine eigene Allokation. Ist dieses Flag gesetzt, deaktivieren wir das und inlinen kleine Zeichenketten nicht.

DISABLE_MEMORY_SAFETY

Unsere Datenstrukturen, die im nicht leistungskritischen Code umfangreich genutzt werden, haben zusätzliche Prüfungen für Speichersicherheit. Dazu gehören:

  • Sicherstellen, dass nullptr niemals dereferenziert wird.
  • Sicherstellen, dass Zugriffe außerhalb der Grenzen keinen Absturz auslösen.

Mit diesem Flag entfernen wir diese Prüfungen, vor allem um zu prüfen, dass der Leistungsnachteil dieser Prüfungen vernachlässigbar ist.

DESTROY_UNPINNED_BLOCKS

Wenn zuvor gepinnte Blöcke im BufferManager entpinnt werden, zerstören wir sie mit diesem Flag sofort, um sicherzustellen, dass es keine Situationen gibt, in denen dieser Speicher noch verwendet wird, obwohl er nicht mehr gepinnt ist.

DEBUG_STACKTRACE

Wenn in einem Test ein Absturz oder eine Assertion auftritt, wird ein Stack Trace ausgegeben. Das ist nützlich, wenn ein Absturz schwer mit angehängtem Debugger einzugrenzen ist.

Eine CMake-Konfigurationsdatei verwenden

Um mit einer CMake-Konfigurationsdatei zu bauen, legen Sie eine Erweiterungs-Konfigurationsdatei namens extension_config.cmake an, zum Beispiel mit folgendem Inhalt:

duckdb_extension_load(autocomplete)
duckdb_extension_load(fts)
duckdb_extension_load(inet)
duckdb_extension_load(icu)
duckdb_extension_load(json)
duckdb_extension_load(parquet)

Bauen Sie DuckDB wie folgt:

Terminal window
GEN=ninja EXTENSION_CONFIGS="extension_config.cmake" make

Um die Erweiterungen anschließend in einem Rutsch zu installieren, führen Sie aus:

Terminal window
# 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