Vapor Fluent 如何向现有表添加新的必填字段键
Posted
技术标签:
【中文标题】Vapor Fluent 如何向现有表添加新的必填字段键【英文标题】:Vapor Fluent How to add a new required field key to existing table 【发布时间】:2022-01-01 12:39:27 【问题描述】:我有一个使用 Vapor Fluent PostgreSQL 构建的已部署后端。
现在我需要将新的必填字段键 new_field
添加到数据库中架构名称为 schema_name
的表中。
我创建了一个新的迁移:
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
的值,因为如果数据库为空,此新迁移运行良好。
我该如何解决这个问题?谢谢。
【问题讨论】:
【参考方案1】:.field
函数接受一个可选属性列表,您可以在其中传递默认值,因此对您来说是
func prepare(on database: Database) -> EventLoopFuture<Void>
database.schema("schema_name")
.field("new_field", .string, .required, .sql(.default("Your default value")))
.update()
【讨论】:
以上是关于Vapor Fluent 如何向现有表添加新的必填字段键的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vapor/Fluent 中正确查询 Postgres JSONB 字段