【问题标题】:Postgres and Sequelize - SequelizeUniqueConstraintErrorPostgres 和 Sequelize - SequelizeUniqueConstraintError
【发布时间】: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


【解决方案1】:

我发现了问题,

在对象创建期间,Sequelize 确实工作正常:

const workflowAssignation = await WorkflowAssignation.create(obj, { include: [ { model: WorkflowAssignationContact }, { model: WorkflowStepAssignation, include: [ WorkflowStepAssignationHasUser]}] });

我正在使用 create 传递已经包含联系人记录的主体对象,所以在我尝试进行批量插入时它失败了,因为它们已经被创建了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2018-02-22
    • 2020-07-14
    相关资源
    最近更新 更多