Node.js 使用knex.js进行数据迁移时,在执行batchInsert时出现检查约束错误

Node.js 使用knex.js进行数据迁移时,在执行batchInsert时出现检查约束错误,node.js,express,knex.js,objection.js,Node.js,Express,Knex.js,Objection.js,在my express应用程序中,有两个表: 文件 文档\修订\字段 我需要将document_revision_字段中某些记录的某些列(基于其中一列的值)迁移到新的表document_字段中 以下是创建新表的方式: wait knex.schema .createTable('document_fields',(table)=>{ 表3.1(a) 桌子 .text('sid') .unique() table.text('applicationId') 桌子 .foreign('appli

在my express应用程序中,有两个表:

  • 文件
  • 文档\修订\字段
我需要将document_revision_字段中某些记录的某些列(基于其中一列的值)迁移到新的表document_字段中

以下是创建新表的方式:

wait knex.schema
.createTable('document_fields',(table)=>{
表3.1(a)
桌子
.text('sid')
.unique()
table.text('applicationId')
桌子
.foreign('applicationId'))
.references('id'))
.inTable(“应用程序”)
.onDelete('级联')
table.text('documentId')
桌子
.foreign('documentId')
.references('id'))
.inTable(“文件”)
.onDelete('级联')
表.文本('digitalAssetId')
桌子
.foreign(['digitalAssetId','applicationId']))
.references(['id','applicationId']))
.无形资产(“数字资产”)
.onDelete('级联')
table.enu('type'、['text'、'embed'、'slideshow']))
table.text('值')
table.text('copy')
table.text('标题')
表.enu('status'、['active'、'inactive'、'deleted']))
table.integer('顺序')
table.text('meta')
table.timestamp('createdAt').defaultTo(knex.fn.now())
table.timestamp('updatedAt').defaultTo(knex.fn.now())
})
这就是我选择要迁移的行的方式

const rows=wait knex('document\u revision\u fields'))
.选择(
'文档\u修订\u字段.sid',
“document\u revision\u fields.applicationId”,
“document\u revision\u fields.documentId”,
“document\u revision\u fields.digitalAssetId”,
“文档\u修订\u字段.类型”,
“文档\u修订\u字段.值”,
“文档\u修订\u字段。副本”,
“文档修订字段.标题”,
“文档\u修订\u字段.状态”,
“文档\u修订\u字段.顺序”,
'文档\u修订\u字段.meta'
)
.join('documents'、'documents.activeRevisionId'、'document\u revision\u fields.revisionId'))
最后,我正试图将这些行迁移到新表中

返回knex.batchInsert('document_字段',行)
在batchInsert开始工作之前,一切都正常。事实上,我可以console.log rows变量,得到预期的结果

但是,当我尝试在新表中批量插入这些行时,会出现以下错误

Failed to migrate schema.
error: new row for relation "document_fields" violates check constraint "document_fields_type_check"
detail: "Failing row contains (52808, Nmw-5qMsV, 06217620-aee9-11e9-9f1a-4bff6f1a2985, f046adc0-3214-11ea-8056-31c443663220, null, paragraph, <p>Here's President Donald Trump's tweet for reference.&nbsp;</p..., null, null, active, 5, {}, 2020-05-21 07:20:24.022705+02, 2020-05-21 07:20:24.022705+02)."
未能迁移架构。
错误:关系“文档\字段”的新行违反了检查约束“文档\字段\类型\检查”

细节:“失败的行包含(52808,Nmw-5qMsV,06217620-aee9-11e9-9f1a-4bff6f1a2985,f046adc0-3214-11ea-8056-31c443663220,空,段落,这是唐纳德·特朗普总统的推文供参考。从我所知,您已经将
类型设置为枚举:

table.enu('type'、['text'、'embed'、'slideshow']))

但是,您正在尝试插入
null
段落
,并且它们都不是枚举的一部分。

据我所知,您已将
类型
设置为枚举:

table.enu('type'、['text'、'embed'、'slideshow']))

但是,您正在尝试插入
null
段落
,它们都不是枚举的一部分。

感谢您的输入Mika!这与排序相关,最终使我走上了正确的轨道。这是一个我刚刚开始工作的客户项目,因此对过去的更改没有太多可见性。原来有一个自定义的postgres检查添加到了需要复制的源表中。Thad做到了。感谢你的输入Mika!这与我有点相关,最终使我走上了正确的轨道。这是一个我刚刚开始工作的客户项目,因此对过去的更改没有太多的可见性。结果不是这里有一个自定义的postgres检查添加到需要复制的源表中。