postgresql - knex / postgresql 将外键更新为空
问题描述
我正在使用带有 postgresql 的 knex.js 所以我有一个带有可为空外键的表。
缩短版:
exports.up = function (knex, Promise) {
return knex.schema.createTable('Note', function (table) {
table.string('id').primary()
table
.string('sourceId')
.references('id')
.inTable('Source')
.onDelete('SET NULL')
.index()
})
}
exports.down = function (knex, Promise) {
return knex.schema.dropTable('Note')
}
我可以创建带有或不带有 sourceId 的注释。但是,如果我创建一个带有 sourceId 的注释,然后更新它以将 sourceId 设置为 NULL,则更新不起作用。我没有收到错误消息,但未删除外键。
例如,如果我创建一个注释:
{
id: '123',
sourceId: '456'
}
然后尝试更新它:
const result = await Note.query().updateAndFetchById(id, {
id: '123',
sourceId: null
})
我得到的结果是:
Note {
id: '123',
sourceId: '456'
}
如果我尝试将其他可为空的值更新为 null(只要它们不是外键),我就没有问题,并且我可以将 sourceId 更新为不同的源 ID。如果我尝试将不可为空的外键更新为 null,则会出现错误。但在上述情况下,我没有收到任何错误。它只是不更新。
知道这里可能会发生什么吗?
解决方案
推荐阅读
- mips - MARS 上的 Mips 汇编语言
- python - 在 Pyspark 中读取和保存图像文件
- sql - PostgreSQL - 如何在条件后连接行值
- java - 为什么 ISO 8583 解包会产生无效值?
- ios - 带有 CFNotificationCenter 强引用的 UIViewController 不会发布
- html - 隐藏链接,除非在小屏幕上
- javascript - xhttp.open 函数没有响应
- css - 垂直对齐顶部不适用于 dt 和 dd 元素
- list - 如何在 Java 中循环赋予队列列表各种名称?
- mysql - MySQL (Aurora) 使用 adddate 或 date-add 或 date-sub 更新时间戳表示语法错误