【发布时间】:2022-01-26 03:41:55
【问题描述】:
我有这张桌子:
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"));
据我所知,这是一个有两个主键的表,所以对我来说,这意味着只有当这对(contactId 和 workflowAssignationId)等于其他已保存的对时,它才会阻止我保存?
发生的事情是,当我尝试使用此查询进行保存时:
INSERT INTO "wf"."WorkflowAssignationContact" ("workflowAssignationId", "contactId", "contactNumber") VALUES (9, 1887, 'cfs:078286556');
我收到了这个错误:
错误:重复键值违反唯一约束“WorkflowAssignationContact_pkey” 详细信息:键 ("workflowAssignationId", "contactId")=(9, 1887) 已存在。
桌子完全是空的...
已验证的 id 9 存在于相关表中,并且 1887 也是联系表中的有效 ID。
续集模型是这个:
@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;
}
非常感谢任何帮助。
编辑
正在使用 sequelize 迁移创建表:
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 的 INSERT 查询,它是否有效?
-
不,它不能直接在数据库中进行续集
标签: postgresql sequelize.js sequelize-typescript