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
.