Postgres 和 Sequelize - SequelizeUniqueConstraintError
Postgres and Sequelize - SequelizeUniqueConstraintError
我有这个table:
CREATE TABLE "wf"."WorkflowAssignationContact" (
"workflowAssignationId" int4 NOT NULL,
"contactId" int4 NOT NULL,
"contactNumber" varchar NOT NULL,
CONSTRAINT "WorkflowAssignationContact_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "public"."contacts"("id"),
CONSTRAINT "WorkflowAssignationContact_workflowAssignationId_fkey" FOREIGN KEY ("workflowAssignationId") REFERENCES "wf"."WorkflowAssignation"("id"),
PRIMARY KEY ("workflowAssignationId","contactId"));
据我所知,这是一个带有两个主键的 table,所以对我来说,这意味着只有当这对(contactId 和 workflowAssignationId)等于其他已保存的对时,它才会阻止我保存,对吗?
好吧,当我尝试用这个查询保存时:
INSERT INTO "wf"."WorkflowAssignationContact" ("workflowAssignationId", "contactId", "contactNumber") VALUES (9, 1887, 'cfs:078286556');
我收到这个错误:
错误:重复键值违反唯一约束“WorkflowAssignationContact_pkey”
详细信息:键 ("workflowAssignationId", "contactId")=(9, 1887) 已经存在。
table完全是空的...
已验证 ID 9 存在于相关 table 中,并且 1887 是联系人 table 中的有效 ID。
sequelize模型是这个:
@Table({timestamps: false, schema: 'wf'})
export class WorkflowAssignationContact extends Model<WorkflowAssignationContact> {
@PrimaryKey
@ForeignKey(() => WorkflowAssignation)
@Column
workflowAssignationId: number;
@BelongsTo(() => WorkflowAssignation)
workflowAssignation: WorkflowAssignation;
@PrimaryKey
@ForeignKey(() => contacts)
@Column
contactId: number;
@Column
contactNumber: string;
@BelongsTo(() => contacts)
contact: contacts;
}
非常感谢任何帮助。
编辑
正在使用续集迁移创建 table:
await queryInterface.createTable("WorkflowAssignationContact", {
workflowAssignationId: {
allowNull : false,
primaryKey : true,
type : Sequelize.INTEGER,
references : {
model : "WorkflowAssignation",
key : "id"
}
},
contactId: {
allowNull : false,
primaryKey : true,
type : Sequelize.INTEGER,
references : {
model: {
tableName : "contacts",
schema : "public"
},
key: "id"
}
},
contactNumber: {
allowNull : false,
type : Sequelize.STRING
}
}, { schema: "wf"});
我发现了问题,
在对象创建期间,Sequelize 确实工作正常:
const workflowAssignation = await WorkflowAssignation.create(obj, { include: [ { model: WorkflowAssignationContact }, { model: WorkflowStepAssignation, include: [ WorkflowStepAssignationHasUser]}] });
我正在使用 create 传递已包含联系人记录的正文对象,因此在我尝试进行批量插入时失败了,因为它们已经创建。
我有这个table:
CREATE TABLE "wf"."WorkflowAssignationContact" (
"workflowAssignationId" int4 NOT NULL,
"contactId" int4 NOT NULL,
"contactNumber" varchar NOT NULL,
CONSTRAINT "WorkflowAssignationContact_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "public"."contacts"("id"),
CONSTRAINT "WorkflowAssignationContact_workflowAssignationId_fkey" FOREIGN KEY ("workflowAssignationId") REFERENCES "wf"."WorkflowAssignation"("id"),
PRIMARY KEY ("workflowAssignationId","contactId"));
据我所知,这是一个带有两个主键的 table,所以对我来说,这意味着只有当这对(contactId 和 workflowAssignationId)等于其他已保存的对时,它才会阻止我保存,对吗?
好吧,当我尝试用这个查询保存时:
INSERT INTO "wf"."WorkflowAssignationContact" ("workflowAssignationId", "contactId", "contactNumber") VALUES (9, 1887, 'cfs:078286556');
我收到这个错误:
错误:重复键值违反唯一约束“WorkflowAssignationContact_pkey” 详细信息:键 ("workflowAssignationId", "contactId")=(9, 1887) 已经存在。
table完全是空的...
已验证 ID 9 存在于相关 table 中,并且 1887 是联系人 table 中的有效 ID。
sequelize模型是这个:
@Table({timestamps: false, schema: 'wf'})
export class WorkflowAssignationContact extends Model<WorkflowAssignationContact> {
@PrimaryKey
@ForeignKey(() => WorkflowAssignation)
@Column
workflowAssignationId: number;
@BelongsTo(() => WorkflowAssignation)
workflowAssignation: WorkflowAssignation;
@PrimaryKey
@ForeignKey(() => contacts)
@Column
contactId: number;
@Column
contactNumber: string;
@BelongsTo(() => contacts)
contact: contacts;
}
非常感谢任何帮助。
编辑
正在使用续集迁移创建 table:
await queryInterface.createTable("WorkflowAssignationContact", {
workflowAssignationId: {
allowNull : false,
primaryKey : true,
type : Sequelize.INTEGER,
references : {
model : "WorkflowAssignation",
key : "id"
}
},
contactId: {
allowNull : false,
primaryKey : true,
type : Sequelize.INTEGER,
references : {
model: {
tableName : "contacts",
schema : "public"
},
key: "id"
}
},
contactNumber: {
allowNull : false,
type : Sequelize.STRING
}
}, { schema: "wf"});
我发现了问题,
在对象创建期间,Sequelize 确实工作正常:
const workflowAssignation = await WorkflowAssignation.create(obj, { include: [ { model: WorkflowAssignationContact }, { model: WorkflowStepAssignation, include: [ WorkflowStepAssignationHasUser]}] });
我正在使用 create 传递已包含联系人记录的正文对象,因此在我尝试进行批量插入时失败了,因为它们已经创建。