Как я могу удалить все таблицы с Sequelize.js использует 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? Но есть ли эквивалентный способ удалить все таблицы и воссоздать?

3 ответов


Я ничего не знаю об этой библиотеке JavaScript, но Postgres предоставляет одну команду, чтобы удалить все, что принадлежит пользователю:

drop owned by <our_user_name cascade

Это будет работать, только если все принадлежит тому же пользователю, и у этого пользователя нет некоторых таблиц (или представлений, последовательностей, ...), что вы делаете не хочу бросить.

подробнее в руководстве:
http://www.postgresql.org/docs/current/static/sql-drop-owned.html


это обновленный ответ, ориентированный на гуглеров, которые оказались здесь, как и я.

Sequelize предлагает функцию падения:

drop(options) => promise

удалите все таблицы, определенные через этот экземпляр sequelize. Это делается путем вызова модели.бросьте на каждой модели. 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});