使用sequelize初始化postgres db

时间:2015-11-24 18:24:45

标签: node.js sequelize.js

我正在编写命令行实用程序来初始化postgres数据库,方法是删除所有表,创建postgis扩展,然后初始化我的模型。

需要创建扩展名,因为我的模型依赖于它。

我想知道" Sequelize方式"去做这个。例如,我会在播种机中执行此操作然后调用sequelize db:seed吗?

SQL看起来像这样:

-- Drop all tables
drop schema public cascade;
create schema public;

-- Add PostGIS support
CREATE EXTENSION postgis;

1 个答案:

答案 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();
})