Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error with migration postgress, i have two columns over, why?

i have a migration, i only have four colums, id, name, last_name and email but when i do a query from postman it show me other colums over SELECT \"id\", \"name\", \"lastName\", \"email\", \"createdAt\", \"updatedAt\" FROM \"Users\" AS \"User\" what is the wrong?

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');
  }
};

and when i used my service

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

i get this error from postman:

{
    "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\";"
    }
}

i before used this commands many times: sequelize db:migrate and sequelize db:migrate:undo

this is my git repository: https://github.com/x-rw/basePostgresExpressjs

you should situate in server directory and write npm run dev


1 Answers

That's because your sequelize model instance have updatedAt and createdAt fields and because of that it queries the database to get these two fields too. But in your migration file there is no updatedAt and createdAt fields. So your database table does not have these columns.

You have two options, if you really don't want to use updatedAt and createdAt you should specify that while initializing your sequelize model instance. Check the api reference. You should see options.timestamps. You can set it to 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.
    }
);

If you want to use it however, check my answer here to generate correct migrations.

like image 142
Mansur Avatar answered Mar 06 '26 03:03

Mansur



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!