【问题标题】:Error with migration postgress, i have two columns over, why?迁移后错误,我有两列,为什么?
【发布时间】:2020-07-29 02:47:19
【问题描述】:

我有一个迁移,我只有四个列,id,name,last_name 和 email,但是当我从邮递员那里查询时,它显示了 SELECT \"id\", \"name\", \"lastName\", \"email\", \"createdAt\", \"updatedAt\" FROM \"Users\" AS \"User\" 上的其他列,这是怎么回事?

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('User', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      last_name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      email: {
        type: Sequelize.STRING,
        allowNull: false,
      },
    });
  },
  down: (queryInterface) => {
    return queryInterface.dropTable('User');
  }
};

当我使用我的服务时

static async getAllUsers() {
    try {
      const users = await database.User.findAll();
      console.log('COnsOLE ', users)
      return users
    } catch (error) {
      throw error;
    }
  }

我从邮递员那里得到这个错误:

{
    "status": "error",
    "message": {
        "name": "SequelizeDatabaseError",
        "parent": {
            "length": 104,
            "name": "error",
            "severity": "ERROR",
            "code": "42P01",
            "position": "73",
            "file": "parse_relation.c",
            "line": "1180",
            "routine": "parserOpenTable",
            "sql": "SELECT \"id\", \"name\", \"lastName\", \"email\", \"createdAt\", \"updatedAt\" FROM \"Users\" AS \"User\";"
        },
        "original": {
            "length": 104,
            "name": "error",
            "severity": "ERROR",
            "code": "42P01",
            "position": "73",
            "file": "parse_relation.c",
            "line": "1180",
            "routine": "parserOpenTable",
            "sql": "SELECT \"id\", \"name\", \"lastName\", \"email\", \"createdAt\", \"updatedAt\" FROM \"Users\" AS \"User\";"
        },
        "sql": "SELECT \"id\", \"name\", \"lastName\", \"email\", \"createdAt\", \"updatedAt\" FROM \"Users\" AS \"User\";"
    }
}

我之前多次使用此命令:sequelize db:migratesequelize db:migrate:undo

这是我的 git 存储库:https://github.com/x-rw/basePostgresExpressjs

你应该位于服务器目录并写npm run dev

【问题讨论】:

    标签: postgresql express sequelize.js


    【解决方案1】:

    那是因为您的 sequelize 模型实例具有 updatedAt 和 createdAt 字段,因此它也查询数据库以获取这两个字段。但是在您的迁移文件中没有 updatedAt 和 createdAt 字段。所以你的数据库表没有这些列。

    你有两个选择,如果你真的不想使用 updatedAt 和 createdAt 你应该在初始化你的 sequelize 模型实例时指定它。 Check the api reference. 你应该看到 options.timestamps。您可以将其设置为 false。

    class YourModel extends Sequelize.Model { }
    YourModel.init(
        {
            name: {
                type: Sequelize.DataTypes.STRING(100),
                allowNull: false,
                validate: {
                    notNull: true,
                    notEmpty: true,
                    len: [2, 100]
                }
            },
        },
        {
            sequelize: sequelizeInstance,
            timestamps: false // This is what you need.
        }
    );
    

    如果您想使用它,请检查 my answer here 以生成正确的迁移。

    【讨论】:

    • 我怎么能把假的?
    • 检查答案。我添加了一个示例。
    • 我有这个问题 ReferenceError: sequelizeInstance is not defined
    • 但这对我有用 { freezeTableName: true, // 模型 tableName 将与模型名称相同 timestamps: false, underscored: true }
    猜你喜欢
    • 2020-07-08
    • 2019-03-30
    • 2020-11-01
    • 2021-07-07
    • 2015-02-12
    • 1970-01-01
    • 2013-01-24
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多