私はknexを使用してpostgresデータベースに単純なテーブルを作成しています:
_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()
がデフォルト値にnextval('communities_id_seq'::regclass)
を持つ主キーを作成し、IDなしで挿入を実行できないことです(生のSQLでも)。
デフォルトでIDをインクリメントする方法を知っている人はいますか?
私の問題は、idの値が空の文字列であり、undefinedまたはnullではないため、データ型としての整数の制約が解消されることでした。
それが役に立てば幸い!
パーティーに少し遅れましたが、同じユースケースでこの問題が発生していました。ただし、私の解決策は、シーケンスにすべての正しいアクセス許可が付与されておらず、DBを停止したときのテーブルのみが付与されていたことです。
つまり、"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO PUBLIC"
の線に沿った何か