Alejo Dev
Alejo Dev

Reputation: 2586

Sequelize migration fails (postgres)

I am trying to use postgresql with my node application using sequelize. But I can't make it work. When I run sequelize -m I get this output:

Loaded configuration file "config/config.json".
Using environment "development".
Running migrations...
20130916100313-create-table-usuarios.js
Completed in 21ms

events.js:74
        throw TypeError('Uncaught, unspecified "error" event.');
              ^
TypeError: Uncaught, unspecified "error" event.
    at TypeError (<anonymous>)
    at EventEmitter.emit (events.js:74:15)
    at null.<anonymous> (/home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/migrator.js:95:44)
    at EventEmitter.emit (events.js:98:17)
    at module.exports.finish (/home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/query-chainer.js:138:30)
    at exec (/home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/query-chainer.js:92:16)
    at onError (/home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/query-chainer.js:72:11)
    at EventEmitter.emit (events.js:95:17)
    at /home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/migration.js:65:19
    at null.<anonymous> (/home/alejo/workspace/cloudlogger/api/node_modules/sequelize/lib/emitters/custom-event-emitter.js:52:38)

This is my config.json:

{
  "development": {
    "username": "cloudlogger",
    "password": "foobar",
    "database": "cloudlogger_dev",
    "dialect":"postgres",
    "protocol":"postgres",
    "host": "127.0.0.1"
  },
  "test": {
    "username": "cloudlogger",
    "password": "foobar",
    "database": "cloudlogger_test",
    "dialect":"postgres",
    "protocol":"postgres",    
    "host": "127.0.0.1"
  },
  "production": {
    "username": "cloudlogger",
    "password": "foobar",
    "database": "cloudlogger_pro",
    "dialect":"postgres",
    "protocol":"postgres",
    "host": "127.0.0.1"
  }
}

And this is 20130916100313-create-table-usuarios.js

module.exports = {
  up: function(migration, DataTypes, done) {
    migration.createTable('Usuario',{
      nombre: {
        type: DataTypes.STRING,
        allowBlank: false,
      },
      username: {
        type: DataTypes.STRING,
        unique: true,
      },
      genero: {
        type:   DataTypes.ENUM,
        values: ['Hombre', 'Mujer']
      },
      email: {
        type: DataTypes.STRING,
        unique: true,
        allowBlank: false,
      },
      password_digest: {
        type: DataTypes.STRING,
        allowBlank: false,
      },
      remember_token: DataTypes.STRING,
      superadministrador: {
        type: DataTypes.BOOLEAN,
        defaultValue: false
      },
      token: DataTypes.STRING,
      fecha_token: {
        type: DataTypes.DATE,
        defaultValue: new Date(0)
      },
      lastLogin: DataTypes.DATE
    }).complete(done);
  },
  down: function(migration, DataTypes, done) {
    migration.dropAllTables().complete(done);
  }
}

EDIT

I isolated the error, if I comment or change this lines:

      genero: {
        type:   DataTypes.ENUM,
        values: ['Hombre', 'Mujer']
      },

it works good. It seems to be a problem with ENUM type

Upvotes: 6

Views: 2491

Answers (2)

frenchie4111
frenchie4111

Reputation: 399

I am having the same issue as well. Looking through the Postgres source it seems like Enum's must be created separately before being assigned to a column type.

I am not sure that sequelize supports this operation

Source: http://www.postgresql.org/docs/9.2/static/datatype-enum.html

Upvotes: 0

agchou
agchou

Reputation: 747

Your syntax for ENUMs is just incorrect. Here's what it should be:

type: DataTypes.ENUM('Hombre', 'Mujer')

Check out the sequelize documentation on data types if you have more questions

Upvotes: 2

Related Questions