2015-11-24 5 views
0

Я пишу утилиту командной строки для инициализации базы данных postgres, отбрасывая все таблицы, создавая расширение postgis, а затем инициализируя мои модели.Инициализация postgres db с sequelize

Расширение необходимо создать, потому что мои модели зависят от него.

Я хотел бы знать «Sequelize way» для этого. Например, мог бы я сделать это в сеялке, а затем позвонить sequelize db:seed?

SQL, выглядит следующим образом:

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

-- Add PostGIS support 
CREATE EXTENSION postgis; 

ответ

0

// Edit: Перечитывая свой вопрос я вижу, что я пропустил явный запрос на пути Sequelize, чтобы сделать это - ниже может оказаться полезным, но, вероятно, не имеет значения.

Я столкнулся с этой проблемой в приложениях, которые я создал. Простейшим решением (см. Ниже) является сценарий оболочки с JS-скриптом для вызовов Sequelize. В других приложениях я использую несколько классов 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(); 
}) 
Смежные вопросы