Node.js 使用sync时将定义表多元化

Node.js 使用sync时将定义表多元化,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我编写了迁移来在单独的服务中定义我的表。然后,我使用node.js服务运行sequelize,在这里我定义的模型如下: import Sequelize from "sequelize"; import sequelize from "../config/sequelize"; export const MasterPlaylist = sequelize.define("Master_playlist", { id: { typ

我编写了迁移来在单独的服务中定义我的表。然后,我使用node.js服务运行sequelize,在这里我定义的模型如下:

import Sequelize from "sequelize";
import sequelize from "../config/sequelize";

export const MasterPlaylist = sequelize.define("Master_playlist", {
  id: { type: Sequelize.STRING, primaryKey: true },
  updated_at: {
    type: Sequelize.DATE,
    defaultValue: new Date(),
    allowNull: false,
  },
});
然后我导入这个并这样称呼它:

import Sequelize from "sequelize";
import sequelize from "./config/sequelize";
import { Label } from "./models/Label";

async function run(){
   await sequelize.sync();
   const label = await Label.findOne();
   console.log("done", label);
}

run()
这里稍微简化了一些事情,但这是正在运行的。 当我运行这个程序时,它会创建新的表,但会进行多元化,因此我最终会得到迁移插入的正确命名的表,然后是多元化的副本

例如,对于这个表,我以“Master_播放列表”结束

有人知道这里发生了什么吗

这是我的配置文件:

import Sequelize from "sequelize";

const sequelize = new Sequelize(
  process.env.DB,
  process.env.USERNAME,
  process.env.PASSWORD,
  {
    host: process.env.HOST,
    dialect: "postgres",
  }
);

async function run() {
  await sequelize.authenticate();
}

run();
export default sequelize;

不完全确定问题出在哪里,但sequelize使用复数表名

默认情况下,如果未指定表名,Sequelize会自动将模型名加成复数,并将其用作表名。这种复数化是由一个名为屈折的库在后台完成的,这样就可以正确计算不规则复数(如person->people)

您可以使用
freezeTableName:true
直接控制表名,这将保持表名与模型名相同:

sequelize.define('User', {
  // ... (attributes)
}, {
  freezeTableName: true
});
或显式指定表名:

sequelize.define('User', {
  // ... (attributes)
}, {
  tableName: 'users'
});