我正在编写命令行实用程序来初始化postgres数据库,方法是删除所有表,创建postgis扩展,然后初始化我的模型。
需要创建扩展名,因为我的模型依赖于它。
我想知道" Sequelize方式"去做这个。例如,我会在播种机中执行此操作然后调用sequelize db:seed
吗?
SQL看起来像这样:
-- Drop all tables
drop schema public cascade;
create schema public;
-- Add PostGIS support
CREATE EXTENSION postgis;
答案 0 :(得分:0)
//编辑:重读你的问题我看到我错过了Sequelize方法的明确要求 - 下面的内容可能会有所帮助,但可能不相关。
我已经在我构建的应用中解决了这个问题。最简单的解决方案(下面)是一个带有用于Sequelize调用的JS脚本的shell脚本。在其他应用程序中,我使用了许多Python类和一些JS脚本。这很粗糙,但很灵活,而且很有效。
run.sh :
#!/bin/bash
DB_NAME="sqpg"
DB_USER="sequelize"
DB_PW="sequelize"
DB_SCHEMA="s00"
export BLUEBIRD_DEBUG=1
sudo -u postgres psql -c "DROP SCHEMA IF EXISTS $DB_SCHEMA CASCADE" "$DB_NAME"
sudo -u postgres psql -c "CREATE SCHEMA $DB_SCHEMA AUTHORIZATION $DB_USER;" "$DB_NAME"
sudo -u postgres psql -c "CREATE EXTENSION \"uuid-ossp\" SCHEMA $DB_SCHEMA;" "$DB_NAME"
node populate-db.js
填充-db.js :
'use strict';
var Sequelize = require('sequelize');
sq_options = { /* ... */ };
var sq = new Sequelize('sqpg', 'sequelize', 'sequelize', sq_options);
var models = {
Foo: sq.define('Foo', {
/* ... * /
},
Bar: sq.define('Bar', {
/* ... */
}
};
models.Foo.belongsToMany(models.Bar, { through: 'foo_bar' });
models.Bar.belongsToMany(models.Foo, { through: 'foo_bar' });
sq.sync({ force: true })
.then(a_function_to_create_some_instances)
.then(a_function_to_create_some_more_instances)
.catch(function(err) {
console.warn('Rejected promise: ' + err);
console.warn(err.stack);
})
.finally(function() {
sq.close();
})