やっています:
if (process.NODE_ENV === 'test') {
foreignKeyChecks = 0;
forceSync = true;
} else {
foreignKeyChecks = 1;
forceSync = false;
}
global.db.sequelize.query("SET FOREIGN_KEY_CHECKS = " + foreignKeyChecks).then(function() {
return global.db.sequelize.sync({
force: forceSync
});
}).then(function() {
return global.db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1');
}).then(function() {
var server;
console.log('Initialzed database on:');
console.log(config.db);
return server = app.listen(port, function() {
return console.log("Server listening at http://" + (server.address().address) + ":" + (server.address().port));
});
})["catch"](function(err) {
return console.log('err', err);
});
module.exports = app;
しかし、私は得る:SequelizeDatabaseError: unrecognized configuration parameter "foreign_key_checks"
Postgresでそのキーワードを使用できないと思いますか?しかし、すべてのテーブルを削除して再作成する同等の方法はありますか?
これは更新された回答であり、私のようにここに巻き込まれたグーグルを対象としています。
Sequelizeはドロップ機能を提供します:
drop(options) => promise
このsequelizeインスタンスを介して定義されたすべてのテーブルを削除します。これは、各モデルでModel.dropを呼び出すことによって行われます。 ドキュメントの続編
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var someModel = sequelize.define('somemodel', {
name: DataTypes.STRING
});
sequelize
.sync() // create the database table for our model(s)
.then(function(){
// do some work
})
.then(function(){
return sequelize.drop() // drop all tables in the db
});
そのJavaScriptライブラリについては何も知りませんが、Postgresは、ユーザーが所有するすべてのものを削除する単一のコマンドを提供します。
drop owned by <our_user_name cascade
これは、すべてが同じユーザーによって所有されており、そのユーザーがnotwantを実行するテーブル(またはビュー、シーケンスなど)を持っていない場合にのみ機能します。落とす。
マニュアルの詳細:
http://www.postgresql.org/docs/current/static/sql-drop-owned.html
データを一掃し、すべてを最初からやり直す場合(テストのように):
sequelize.sync({force: true});