DuckDB Server
A Rust-based server that runs a local DuckDB instance and support queries over Web Sockets or HTTP/HTTPS, returning data in either Apache Arrow or JSON format.
Note: This package provides a local DuckDB server. To instead use DuckDB-WASM in the browser, use the wasmConnector in the mosaic-core package.
Usage
Install the server with Cargo or Cargo B(inary)Install.
# or
Then run the server with
You can disable or customize logging with the RUST_LOG environment variable.
The server can reuse existing sockets with listenfd.
To use HTTPS and HTTP/2, you need localhost.pem and localhost-key.pem in the current directory or at the env variable CARGO_MANIFEST_DIR.
Create certificates for localhost with mkcert
API
The server supports queries via HTTP GET and POST, and WebSockets. The GET endpoint is useful for debugging. For example, you can query it with this url.
Each endpoint takes a JSON object with a command in the type. The server supports the following commands.
exec
Executes the SQL query in the sql field.
arrow
Executes the SQL query in the sql field and returns the result in Apache Arrow format.
json
Executes the SQL query in the sql field and returns the result in JSON format.
create-bundle
Caches the results of the SQL queries in the queries field and the required datasets.
load-bundle
Loads the bundled results.
Developers
Build
Build the release binary with
Develop
To run the server and restart it when the code changes, install cargo-watch and systemfd with
Then run the server with
Or just use (but this won't restart when the code changes)
Before sending a pull request, run the tests with
Run the benchmarks with
Update Dependencies
Update the lockfile with cargo update and look for outdated dependencies with cargo-outdated cargo outdated -d 1.
Publishing
Bump the version in Cargo.toml and then run cargo publish.