web-dev-qa-db-ja.com

postgresqlを使用してSequelize.jsですべてのテーブルを削除するにはどうすればよいですか?

やっています:

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でそのキーワードを使用できないと思いますか?しかし、すべてのテーブルを削除して再作成する同等の方法はありますか?

11
Shamoon

これは更新された回答であり、私のようにここに巻き込まれたグーグルを対象としています。

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
  });
9
jorgenkg

その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});
5
aercolino