export()
Dumps the database contents to a file.
NoteWebSocket connections currently do not currently support exports and imports. Be sure to use an HTTP endpoint when using this method.
Method Syntaxdb.export(target)
Argument | Description | ||
---|---|---|---|
resource | The table name or a record ID to select. Will also accept a tuple of record name and ID. |
The .export()
method can be used to save the contents of a database to a file.
use surrealdb::engine::any::connect; use surrealdb::opt::auth::Root; use surrealdb::opt::Resource; async fn main() -> surrealdb::Result<()> { let db = connect("http://localhost:8000").await?; db.signin(Root { username: "root", password: "root", }) .await?; db.use_ns("ns").use_db("db").await?; // Create a `person` record db.create(Resource::from("person")).await?; db.export("backup.surql").await?; Ok(()) }
If an empty tuple is passed in for the file name, the .export()
method will instead return an async stream of bytes.
use futures::StreamExt; use surrealdb::engine::any::connect; use surrealdb::opt::auth::Root; use surrealdb::opt::Resource; async fn main() -> surrealdb::Result<()> { let db = connect("http://localhost:8000").await?; db.signin(Root { username: "root", password: "root", }) .await?; db.use_ns("ns").use_db("db").await?; // Create a `person` record db.create(Resource::from("person")).await?; let mut stream = db.export(()).await?; while let Some(Ok(line)) = stream.next().await { let content = String::from_utf8(line).unwrap(); println!("{content}"); } Ok(()) }
The output for the above sample should look like the following.
-- ------------------------------ -- OPTION -- ------------------------------ OPTION IMPORT; -- ------------------------------ -- TABLE: person -- ------------------------------ DEFINE TABLE person TYPE ANY SCHEMALESS PERMISSIONS NONE; -- ------------------------------ -- TABLE DATA: person -- ------------------------------ INSERT [ { id: person:bgq0b0rblnozrufizdjm } ];
Available since: v2.1.0
The Export
struct has a method called .with_config()
that gives access to the configuration parameters for the export. These can be chained one after another inside a single line of code. The majority of these functions take a single bool
:
.versions()
: whether to include version information for the SurrealKV storage backend.accesses()
: whether to include DEFINE ACCESS
statements.analyzers()
: whether to include DEFINE ANALYZER
statements.functions()
: whether to include DEFINE FUNCTION
statements.records()
: whether to include the existing records in the database.params()
: whether to include DEFINE PARAM
statements.users()
: whether to include DEFINE USER
statements.tables()
takes a Vec
of strings in addition to a boolean.
.tables()
: a list of tables to export, as opposed to all of the tables in the database.Example of export configuration:
use surrealdb::engine::any::connect; use surrealdb::opt::auth::Root; async fn main() -> surrealdb::Result<()> { let db = connect("http://localhost:8000").await?; db.signin(Root { username: "root", password: "root", }) .await?; db.use_ns("ns").use_db("db").await?; db.query( " DEFINE FUNCTION fn::get_cats() { RETURN SELECT * FROM cat }; DEFINE TABLE person SCHEMAFULL; DEFINE FIELD name ON person TYPE string; DEFINE FIELD age ON person TYPE int; CREATE person SET name = 'Aeon', age = 20; CREATE cat SET name = 'Cat of Aeon'; ", ) .await?; // Cat-related implementation is still experimental // so don't export the cat table or get_cats() function db.export("backup.surql") .with_config() .tables(vec!["person"]) .functions(false) .await?; Ok(()) }