Search code examples
postgresqlsequelize.jssequelize-cli

Unhandled rejection SequelizeForeignKeyConstraintError: insert or update on table


I use sequelize-cli for migrations:

My migration code:

module.exports = {
 up(queryInterface, Sequelize) {
   queryInterface.showAllSchemas({
     options: {},
   }).then((data) => {
     data.forEach(schema => queryInterface.addColumn({
       tableName: 'visitors',
       schema, // dynamic schemas coming from loop
     }, 'purposeId', {
       type: Sequelize.INTEGER,
       references: {
         model: 'purposes', // name of Target model
         key: 'id', // key in Target model that we're referencing
       },
     }));
   });
 },
};

I have multiple schemas, inside that i have table called 'visitors', in that table i want to add column called 'purposeId' references from 'purposes' table.

Migrations successfully done, also i got a purposeId column inside my 'visitors' table.

But if i do crud operations inside 'visitors' table i am getting this error:

Unhandled rejection SequelizeForeignKeyConstraintError: insert or update on table "visitors" violates foreign key constraint "visitors_purposeId_fkey"

NOTE: I am using postgres.


Solution

  • Actually i solved this using constraints:false.

    I removed that references from my migration.

    My Migration code:

    module.exports = {
     up(queryInterface, Sequelize) {
       queryInterface.showAllSchemas({
         options: {},
       }).then((data) => {
         data.forEach(schema => queryInterface.addColumn({
           tableName: 'visitors',
           schema,
         }, 'purposeId', {
           type: Sequelize.INTEGER,
         }));
       });
     },
    
     down(queryInterface, Sequelize) {
       queryInterface.showAllSchemas({
         options: {},
       }).then((data) => {
         data.forEach(schema => queryInterface.removeColumn({
           tableName: 'visitors',
           schema,
         }, 'purposeId', {
           type: Sequelize.INTEGER,
         }));
       });
     },
    };
    

    And in my Sequelize model:

    Visitor.belongsTo(Purpose, { constraints: false });