使用Rust SDK为SurrealDB Schemafull表执行嵌入式初始化时,表与索引未创建且无报错的问题求助
Rust SDK为SurrealDB Schemafull表执行嵌入式初始化时,表与索引未创建且无报错的问题求助
我正在开发一个嵌入SurrealDB数据库的Rust应用,虽然我是Rust新手,但这个问题可能和Rust本身关系不大。目前我卡在数据库初始化的环节——我想通过预定义的Schema来初始化数据库,但执行后既没有报错,也没有创建任何表或索引,完全没有生效。
先说说我的实现思路:我会检查数据库目录是否存在,如果不存在就创建目录;然后判断数据库状态,如果是NotInitialized就调用seed_schema()方法执行Schema脚本。下面是相关代码:
首先是目录初始化和触发Schema的部分:
pub async fn setup_file_system_for_data() -> Vec<FlusterError> { let data_dir = dirs::data_dir().or(dirs::data_local_dir()); let status = get_database_status().await; let mut errors: Vec<FlusterError> = Vec::new(); if let Some(dir_name) = data_dir { // 创建相关目录 if let Some(res) = make_dir_or_fail_to_create(dir_name.join("Fluster").join("data").join("database")) { errors.push(res); } if let Some(res) = make_dir_or_fail_to_create(dir_name.join("Fluster").join("logs")) { errors.push(res); } if let Some(res) = make_dir_or_fail_to_create(dir_name.join("Fluster").join("tmp")) { errors.push(res); } // 如果数据库未初始化,执行Schema种子脚本 if status == FlusterDatabaseStatus::NotInitialized { fluster_db::api::embedded_schema::seed_schema().await; } } else { errors.push(FlusterError::DataDirNotFound()) } errors }
然后是嵌入式Schema的定义和执行逻辑:
#[derive(rust_embed::Embed)] #[folder = "src/api/schema"] pub struct EmbeddedSchema; pub async fn seed_schema() { let db = get_database().await.expect("Failed to get database."); let schema_data = EmbeddedSchema::get("schema.surql") .expect("Failed to load database schema") .data; let q = schema_data.to_vec(); if let Ok(schema) = std::str::from_utf8(&q) { let res = db.query(schema).await; if res.is_err() { error!("Failed to seed database schema."); } } else { println!("Failed to convert schema to a string."); } }
目前我已经确认嵌入式的schema.surql文件能正确读取到内容,转换成字符串也没有问题,但执行db.query(schema).await后就是没有任何效果。我试过单独测试Schema脚本,直接在SurrealDB CLI里执行是能正常创建表和索引的,但放到代码里就不行了。
有没有遇到过类似问题的朋友?或者能帮我看看代码里有没有什么遗漏的点?比如是不是需要手动提交事务?或者数据库连接的上下文有问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

