我使用sequelize 6.5.0。我创建了一个简单的模型来做两件基本的事情:a)查找记录,b)创建记录。我在创作唱片时遇到了麻烦;特别是那些有主键的。如果我将列指定为primaryKey,如下所示:
const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
primaryKey: true
},
datum: {...}
...
并尝试创建如下记录:
Table.create({datum: 'abc'})
,它将尝试(和失败)设置主键:
INSERT INTO "table" ("id","datum") VALUES ($1,$2) RETURNING ...;
这是我没有要求它做的50%。现在,我不需要发生这种情况,因为id
的默认值已经在数据库级别处理了。因此,下一个自然的步骤是而不是将id
指定为primaryKey
:
const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
// primaryKey: true
},
datum: {...}
...
但现在续集试图变得聪明并发脾气:
Uncaught Error: A column called 'id' was added to the attributes of 'table' but not marked with 'primaryKey: true'
Q)如何在创建时获得NOT处理主键?
我认为你可以在定义中跳过id
字段,PostgreSQL仍然会有一个
为了使用DataType.UUID
,您必须指定一些其他选项,如defaultValue
和allowNull
。下面是一个例子:
const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
allowNull: false
},
datum: {...}
});