Knex主键自动增量

时间:2016-10-02 08:25:07

标签: node.js postgresql knex.js

我使用knex在postgres数据库中创建一个简单的表:

class User < ApplicationRecord
    has_many :likes
    has_many :connections
end

class Like < ApplicationRecord
    belongs_to :user, :foreign_key => 'liker_id'
    belongs_to :user, :foreign_key => 'likee_id'
end

class Connection < ApplicationRecord
    has_many :likes
    has_many :users, through: likes
end

};

function up(knex, Promise) {
return knex.schema.createTableIfNotExists('communities', (table) => {

    table.increments('id').primary().unsigned();

    table.string('name', 255).notNullable();
    table.string('slug', 100).notNullable();

    table.timestamp('createdAt').defaultTo( knex.fn.now() );
    table.timestamp('updatedAt');
});

我的问题是function down(knex, Promise) { return knex.schema.dropTableIfExists(tableName); }; module.exports = { tableName, up, down } 创建了一个主键,默认值为table.increments('id').primary(),我无法进行没有id的插入(即使在原始sql中)。

有没有人知道如何默认增加id?

3 个答案:

答案 0 :(得分:1)

在js中: id int unsigned not null auto_increment primary key

输出sql: myproject/ ¦ ¦--jobs/ ¦ ¦--job1/{job1 directories & files} ¦ ¦--job2/{job2 directories & files}

check this out for more information

答案 1 :(得分:0)

我的问题是id的值是一个空字符串而不是undefined或null,所以这就是将整数约束作为数据类型制动。

希望它有所帮助!

答案 2 :(得分:0)

派对有点晚了,但我遇到了同样的用例问题。但是我的解决方案是我没有授予我的序列所有正确的权限,只有我停止数据库时的表格。

所谓的"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO PUBLIC"