You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:44:36