我正在用nodejs nestjs typeorm构建一些东西,并使用sqlite进行存储。一切都很好,但现在我想向一个表中添加一个非空的列。
我将列添加到实体文件中,并让nestjs为我生成该列,但我得到错误消息QueryFailedError: SQLITE_CONSTRAINT: NOT NULL constraint failed: temporary_MyTable.deleted
。(注:表名为MyTable
,不知道‘临时’从何而来)
所以我确实删除了该表中的每个条目,并再次运行该程序,之后生成了该列。我确实通过程序将几行安全保存到表中,并查看了DB,发现我的新列中确实有数据。
但现在奇怪的部分来了。当现在重新启动程序时,它不会启动,并且还会给予我错误消息:QueryFailedError: SQLITE_CONSTRAINT: NOT NULL constraint failed: temporary_MyTable.deleted
。现在查看数据库时,在程序尝试启动后,deleted
的所有数据字段现在都是null
。我在程序开始时不向数据库写入任何数据...
所以接下来我尝试删除整个DB,让nestjs从头开始生成它。这在第一次启动时确实有效,我向该表写入了一些数据。重新启动后,我仍然会得到QueryFailedError: SQLITE_CONSTRAINT: NOT NULL constraint failed: temporary_MyTable.deleted
错误消息,但这次列不是null
,但仍然包含正确的数据。
那张table有什么问题吗?我错过了什么?
@Column({ select: false })
deleted: boolean;
1条答案
按热度按时间lztngnrs1#
问题是您试图向一个已经有数据的列添加NOT NULL约束。SQLite不允许这样做,因为它需要更改所有现有行以使列具有值。
要解决此问题,您需要:
如果您想删除表中的所有数据:
然后运行:
或者,创建一个临时表来保护所有数据,然后使用default语句将表列更改为非空,然后将该数据复制到表中。