我使用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?
答案 0 :(得分:1)
在js中:
id int unsigned not null auto_increment primary key
输出sql:
myproject/
¦
¦--jobs/
¦
¦--job1/{job1 directories & files}
¦
¦--job2/{job2 directories & files}
答案 1 :(得分:0)
我的问题是id的值是一个空字符串而不是undefined或null,所以这就是将整数约束作为数据类型制动。
希望它有所帮助!
答案 2 :(得分:0)
派对有点晚了,但我遇到了同样的用例问题。但是我的解决方案是我没有授予我的序列所有正确的权限,只有我停止数据库时的表格。
所谓的"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO PUBLIC"