Closed web3nomad closed 22 hours ago
rust prisma client 的 baselining, https://prisma.brendonovich.dev/extra/migrations#baselining
可以通过配置不同的 baselining 来实现不同版本下的 migration 更新
rust prisma client 的 _db_push() 可以加 accept_data_loss 和 force_reset
client
._db_push()
.accept_data_loss() // --accept-data-loss in CLI
// .force_reset() // --force-reset in CLI
.await // apply migrations
.map_err(|e| {
tracing::error!("failed to push db: {}", e);
})?;
accept_data_loss 可以忽略删除字段时候的 warning 确保不被卡住,
然后我发现实际的行为是 schema 里删除一个 nullable 的字段并不会真的在 sql 里面删除, 需要再验证下,可能是测试用例不对,这个虽然没问题,但是不合理。
(可能是因为 rust prisma 的逻辑并不是逐个比较 applied migrations, 而是直接计算 migrations 和数据库 schema 的 diff, 然后一次性 apply diff, 就如头帖提到的一样)
rust prisma client 的 _db_push() 可以加 accept_data_loss 和 force_reset
client ._db_push() .accept_data_loss() // --accept-data-loss in CLI // .force_reset() // --force-reset in CLI .await // apply migrations .map_err(|e| { tracing::error!("failed to push db: {}", e); })?;
accept_data_loss 可以忽略删除字段时候的 warning 确保不被卡住,
然后我发现实际的行为是 schema 里删除一个 nullable 的字段并不会真的在 sql 里面删除, 需要再验证下,可能是测试用例不对,这个虽然没问题,但是不合理。
(可能是因为 rust prisma 的逻辑并不是逐个比较 applied migrations, 而是直接计算 migrations 和数据库 schema 的 diff, 然后一次性 apply diff, 就如头帖提到的一样)
之前的用法都错了,应该用 migrate deploy 而不是 db push,后者是不使用 migrations 直接推送最终状态到数据库里,只适用于开发环境。
client
._migrate_deploy()
// ._db_push()
https://github.com/bmrlab/gendam/commit/ca2bfb08c1d17d5d73d1d8231ede53775abae241
https://github.com/bmrlab/gendam/commit/b2a247589bb47ee1d9436fa3d8882f82082c083c
从 0.10 到 0.1.1 的时候,有很大变更
TODO 这样直接复制数据的方式行得通,但是需要有个机智判断当前版本和过去版本的差异。 比如可以通过 prisma 的 migrate diff 来判断当前数据库的 schema 的版本。
beta 上线前,数据库名字改成了 library.db。
现在 .db 里面看不到 migrations 历史记录表,难道 prisma 是通过比较 schema 差异来判断 migration 执行到哪一个的?
如果以后遇到 schema 不兼容,把原来的 db 改个名字就行,比如改成 library-archived-xxx.db,然后执行数据迁移。