从 MySQL 迁移到 Postgres 后在自动增量字段上续集 "null value in column of relation violates not-null constraint"

Sequelize "null value in column of relation violates not-null constraint" on auto increment field after migrate from MySQL to Postgres

我正在尝试从 MySQL 迁移到 Postgres,我使用 pgLoader 移动我的数据,读取操作似乎工作正常但我遇到了这个问题 - 当我尝试使用创建新记录时model.create() 我得到 SequelizeDatabaseError: null value in column of relation violates not-null constraint

我的续集是这样的:

const sequelize = new Sequelize(
    process.env.DB_NAME,
    process.env.DB_USER,
    process.env.DB_PASS,
    {
        dialect: 'postgres',
        host: process.env.DB_HOST,
        port: process.env.DB_PORT,
        schema: process.env.DB_PORT.DB_SCHEMA,
        logging: false,
        dialectOptions: {
            ...(process.env.DB_PORT === "5432" ? {} : addSSL())
        }
    }
);

const exampleModel = sequelize.define(
    "exampleModel",
    {
        ExampleID: {
            type: DataTypes.INTEGER,
            autoIncrement: true,
            primaryKey: true,
        },
        Name: {
            type: DataTypes.STRING,
            allowNull: false,
            unique: true,
        },
    },
);

但是当我这样做时:

await model.create({
  Name: "FooBaz",
});

我遇到了那个错误。 它在 MySQL 上运行良好,但现在我遇到了这个问题。

我不确定在这种情况下我应该怎么做,因为它明确表示它为 null 重置计数器不会生效。

编辑: 运行 sequelize.sync({alter: true}) 打印以下内容

CREATE TABLE IF NOT EXISTS "schema"."exampleModel" ("ExampleID"  SERIAL , "Name" VARCHAR(255) NOT NULL UNIQUE, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("ExampleID"));

后跟一些 alter tables 行。 但是当我检查 ExampleID 类型时它仍然是整数(因为它在 MySQL 上),alter 不会改变它。 那我需要手动转串口吗?

已解决!

问题是 pgLoader 没有正确复制自动增量,要修复它,您需要使用序列在 postgres 上手动设置它,请查看此处的说明。 Changing primary key int type to serial

修复后,问题解决。

谢谢@a_horse_with_no_name