如何使用 postgresql 删除所有 Sequelize.js 的表?

How can I drop all tables with Sequelize.js using postgresql?

我正在尝试:

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 中使用该关键字?但是是否有等效的方法来删除所有表并重新创建?

我对那个 JavaScript 库一无所知,但 Postgres 提供了一个命令来删除用户拥有的所有内容:

drop owned by <our_user_name cascade

只有当所有东西都归同一用户所有并且该用户没有您使用的某些表(或视图、序列...)时才有效不是想降。

手册中的更多详细信息:
http://www.postgresql.org/docs/current/static/sql-drop-owned.html

这是一个更新的答案,针对像我一样来到这里的 google 员工。

Sequelize 提供拖放功能:

drop(options) => promise

Drop all tables defined through this sequelize instance. This is done by calling Model.drop on each model. Sequelize docs

例子

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

用于清除数据并从头开始重新创建所有数据(如在测试中):

sequelize.sync({force: true});

对于任何使用 sequelize-cli 寻找解决方案的人,请查看此 link Sequelize CLI:

你可以 运行:

sequelize_cli db:drop

sequelize_cli db:create

使用 cli 工具创建或删除数据库。这样你就会有一个空的数据库。