“SERIAL”或其附近的语法错误,仅限autoIncrement

时间:2017-05-16 06:14:16

标签: javascript angularjs postgresql sequelize.js

我在构建时遇到错误:

  

服务器由于错误而无法启动:SequelizeDatabaseError:语法   “SERIAL”或附近的错误

仅在为主键提供参数autoIncrement = true时才会出现此错误。

'use strict';

export default function(sequelize, DataTypes) {
  return sequelize.define('Ladder', {
    ladder_id: {
      type: DataTypes.UUID,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true //<------- If commented it works fine
    },
    ladder_name: {
      type: DataTypes.STRING(50),
      allowNull: false,
      unique: true
    },
    ladder_description: {
      type: DataTypes.TEXT,
      allowNull: true
    },
    ladder_open: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    },
    ladder_hidden: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    },
    ladder_creation_date: {
      type: DataTypes.DATE,
      allowNull: false
    },
    ladder_fk_user: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    ladder_fk_game: {
      type: DataTypes.UUID,
      allowNull: false
    },
    ladder_fk_platforms: {
      type: DataTypes.ARRAY(DataTypes.UUID),
      allowNull: false
    }

  },
    {
      schema: 'ladder',
      tableName: 'ladders'
    });
}

我有Sequelize 3.30.4和postgreSQL 9.6。

我希望autoIncrement为true,因为我使用postgreSQL uuid_generate_v4()生成UUID。

3 个答案:

答案 0 :(得分:2)

这里不是一个普通的sequelize用户,但是让我指出在postgreql中使用autoIncrement作为非顺序列不是正确的方法。 Postgresql不提供默认的uuid数字生成器,但可以轻松添加扩展名https://www.postgresql.org/docs/9.4/static/uuid-ossp.html。我相信你已经这样做了。

接下来的步骤是sequelize.fn函数。

  

创建表示数据库函数的对象。这可以使用   在搜索查询中,包括在哪里和订单部分,以及默认情况下   列定义中的值。

所以我们有

ladder_id: {
    type: DataTypes.UUID,
    allowNull: false,
    primaryKey: true,
    default: sequelize.fn('uuid_generate_v4')
}

答案 1 :(得分:1)

我的猜测是PostgreSQL的autoIncrement被硬编码为列使用SERIAL类型,这与您选择的UUID冲突。

尝试删除autoincrement参数,而不是使用defaultvalue:

return sequelize.define('Ladder', {
    ladder_id: {
      type: DataTypes.UUID,
      allowNull: false,
      primaryKey: true,
      defaultValue: UUIDV4
    },

答案 2 :(得分:0)

child_id: {
    primaryKey: true,
    autoIncrement: true,
    type: Sequelize.INTEGER
},
parent_id: {
    references: {
        model: 'parent',
        key: 'parent_id'
    },
    type: Sequelize.INTEGER
}