如何在CockroachDB中用Fluent Migrator自动生成unique_rowid
在Fluent Migrator中为CockroachDB的Int64列设置unique_rowid()默认值
可以实现,核心思路是直接传入CockroachDB的unique_rowid()函数作为默认值,而非依赖Fluent Migrator内置的SystemMethods(这些方法是通用数据库适配的,没有封装CockroachDB专属函数)。
有两种常用实现方式:
1. 通过表构建器直接指定默认值
直接将unique_rowid()作为字符串传入WithDefaultValue方法,Fluent Migrator会将其解析为原生SQL函数,而非字符串常量:
Create.Table("x") .WithColumn("version") .AsInt64() .NotNullable() .WithDefaultValue("unique_rowid()");
2. 执行原生SQL语句
如果表结构复杂,或者担心语法解析问题,直接执行原生创建表语句更稳妥:
Execute.Sql("CREATE TABLE x (version INT NOT NULL DEFAULT unique_rowid())");
要是给已存在的列添加默认值,用Alter语法:
Alter.Table("x") .AlterColumn("version") .AsInt64() .NotNullable() .WithDefaultValue("unique_rowid()");
你之前用SystemMethods.NewGuid失败,是因为它会生成GUID类型的默认值,和Int64列类型不匹配。上面的方法直接调用CockroachDB专属函数,完全适配Int64类型。
内容的提问来源于stack exchange,提问作者Aiyuni
相关产品推荐
相关产品推荐

