Vapor Fluent 如何将新的必填字段键添加到现有 table

Vapor Fluent How to add a new required field key to existing table

我部署了一个使用 Vapor Fluent PostgreSQL 构建的后端。

现在我需要将新的必填字段键 new_field 添加到数据库中具有架构名称 schema_name 的 table。 我创建了一个新迁移:

struct AddNewFieldToSchema: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        database.schema("schema_name")
            .field("new_field", .string, .required)
            .update()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        database.schema("schema_name")
            .deleteField("new_field")
            .update()
    }
}

但是在 运行 之后,它给我错误:

Fatal error: Error raised at top level: server: column "new_field" of relation "schema_name" contains null values (ATRewriteTable)

我猜这是因为使用旧数据模型创建的现有数据没有 new_field 的值,因为如果数据库为空,此新迁移运行正常。

如何解决这个问题?谢谢。

.field 函数接受一个可选属性列表,您可以在其中传递默认值,因此对您来说它将是

func prepare(on database: Database) -> EventLoopFuture<Void> {
  database.schema("schema_name")
    .field("new_field", .string, .required, .sql(.default("Your default value")))
    .update()
}