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

时间:2015-02-09 20:16:21

标签: 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中拥有该关键字?但有没有相同的方法来删除所有表并重新创建?

4 个答案:

答案 0 :(得分:5)

这是一个更新的答案,针对像我一样在这里结束的谷歌。

Sequelize提供掉落功能:

drop(options) => promise
  

删除通过此续集实例定义的所有表。这是通过在每个模型上调用Model.drop来完成的。 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
  });

答案 1 :(得分:4)

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

drop owned by <our_user_name cascade

只有当所有内容都归同一个用户所有并且该用户没有要删除的某些表(或视图,序列......)时,这才有效。< / p>

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

答案 2 :(得分:1)

要清除数据并从头开始创建所有内容(例如在测试中):

sequelize.sync({force: true});

答案 3 :(得分:0)

对于寻找 sequelize-cli 解决方案的任何人,请查看此链接 Sequelize CLI

你可以直接运行:

sequelize_cli db:drop

sequelize_cli db:create

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