在我的快速应用程序中有两个表:
- 文件
- document_revision_fields
我需要将document_revision_fields内某些记录的某些列(基于其中一列的值(迁移到新的表document_fields。
创建新表的方式如下:
await knex.schema
.createTable('document_fields', (table) => {
table.increments()
table
.text('sid')
.unique()
table.text('applicationId')
table
.foreign('applicationId')
.references('id')
.inTable('applications')
.onDelete('CASCADE')
table.text('documentId')
table
.foreign('documentId')
.references('id')
.inTable('documents')
.onDelete('CASCADE')
table.text('digitalAssetId')
table
.foreign(['digitalAssetId', 'applicationId'])
.references(['id', 'applicationId'])
.inTable('digital_assets')
.onDelete('CASCADE')
table.enu('type', ['text', 'embed', 'slideshow'])
table.text('value')
table.text('copy')
table.text('header')
table.enu('status', ['active', 'inactive', 'deleted'])
table.integer('order')
table.text('meta')
table.timestamp('createdAt').defaultTo(knex.fn.now())
table.timestamp('updatedAt').defaultTo(knex.fn.now())
})
这就是我选择要迁移的行的方式
const rows = await knex('document_revision_fields')
.select(
'document_revision_fields.sid',
'document_revision_fields.applicationId',
'document_revision_fields.documentId',
'document_revision_fields.digitalAssetId',
'document_revision_fields.type',
'document_revision_fields.value',
'document_revision_fields.copy',
'document_revision_fields.header',
'document_revision_fields.status',
'document_revision_fields.order',
'document_revision_fields.meta'
)
.join('documents', 'documents.activeRevisionId', 'document_revision_fields.revisionId')
最后,这就是我尝试将这些行迁移到新表的方式
return knex.batchInsert('document_fields', rows)
直到批处理插入为止的所有内容都可以正常工作。事实上,我可以控制台.log行变量,我得到了预期的结果。
但是,当我尝试在新表中批量插入这些行时,出现此错误
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. </p..., null, null, active, 5, {}, 2020-05-21 07:20:24.022705+02, 2020-05-21 07:20:24.022705+02)."
你能发现任何问题吗?
据我所知,您已经将type
设置为枚举:
table.enu('type', ['text', 'embed', 'slideshow'])
但是,您正在尝试插入null
或paragraph
,并且它们都不是枚举的一部分。