2017-05-16 38 views
1

我得到編譯錯誤:當參數自動增量= TRUE是考慮到主鍵語法錯誤或接近「串行」與自動增量只有

Server failed to start due to error: SequelizeDatabaseError: syntax error at or near "SERIAL"

此錯誤纔會出現。

'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。

回答

2

不是普通sequelize用戶在這裏,但我想指出,使用自動增量非連續的列不在postgreql正確的方式。 Postgresql不提供默認的uuid號碼生成器,但可以很容易地添加擴展https://www.postgresql.org/docs/9.4/static/uuid-ossp.html。我相信你已經這樣做了。

接下來就是我們的sequelize.fn函數。

Creates an object representing a database function. This can be used in search queries, both in where and order parts, and as default values in column definitions.

所以我們

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

因此,如果我得到了這個權利,你不能告訴Sequelize讓PostgreSQL通過創建表時配置的默認值來生成UUID嗎? – rXp

+0

不,這是它所做的。將一個調用傳遞給postgresql生成器。這就是sequelize.fn的確如此 – e4c5

+0

是的,但繼續傳遞自己的電話。他沒有使用在PostgreSQL中配置的默認值。 但我知道現在該做什麼。謝謝。 – rXp

1

我的猜測是PostgreSQL的autoIncrement被硬編碼爲使用SERIAL類型的列,這與您選擇的UUID衝突。

嘗試去掉自動增量參數,而是使用默認值:

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

但是這將會使Sequelize產生的UUID。問題是我想讓postgreSQL來照顧它。 – rXp