How does autoIncrement work in NodeJs's Sequelize?

Sequelize's document doesn't say a whole lot about autoIncrement. It only includes the following example:

// autoIncrement can be used to create auto_incrementing integer columns incrementMe: { type: Sequelize.INTEGER, autoIncrement: true } 

Based off of this example I have the following code:

db.define('Entries', { id: { type: Seq.INTEGER, autoIncrement: true, primaryKey: true }, title: { type: Seq.STRING, allowNull: false }, entry: { type: Seq.TEXT, allowNull: false } } 

Now when I want to create an entry I want to do something like this:

models.Entry.create({title:'first entry', entry:'yada yada yada'}) 

However, when I execute that code I get a database error:

Null value in column "id" violates not null constraint

I would assume Sequelize would put the integer in for me or define the database table to do that itself. Apparently not? What am I missing here to ensure that the id is automatically incremented and filled?

Thanks much.

5 Answers

Normally Sequelize.js adapt itself with the database. So the autoincrement attribute corresponds to a serial type in PostgreSQL.

I already worked with Sequelize and what I remember is that you don't need to specify an id as a primary key. Sequelize will do it for you.

Try to not add an id attribute and see if Sequelize will not add it for you or not.

6

omitNull config option by default is false. Set it to true, and the id will be taken care of by Postgres:

sequelize = new Sequelize('mydb', 'postgres', null, { host: 'localhost', port: 5432, dialect: 'postgres', omitNull: true }) Visitor = sequelize.define('visitor', { email: Sequelize.STRING }) Visitor.create({email: ''}) 
4

It works for me if I add the "id" field manually (in this case, Sequelize will not add it automatically) in the model like this:

Visitor = sequelize.define('visitor', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, email: Sequelize.STRING }) 

Resultant SQL command is: CREATE TABLE IF NOT EXISTS "visitor" ("id" SERIAL, "email" varchar(255)...

In my case the problem was that the table definition was not updated. If there is no valuable data, try removing the table and then have Sequelize recreate that table.

In my case this was because I had specified autoincrement: true instead of autoIncrement: true.

Worth checking if you are still having problems. Tables needed dropping and rebuilding for it to work.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like