Я пытаюсь использовать Sequelize (1.7) с Postgresql (9.3) и пытаюсь использовать схемы. Я создал схемы извне в базе данных, но использовал их в своих моделях. Когда я пытаюсь сделать ассоциации моделей, Sequelize жалуется, что отношения не существует. Когда я переопределяю модели, использующие стандартную «общедоступную» схему PostgreSQL, она отлично работает.Невозможно связать модели в схеме (postgresql) с помощью Sequelize
Вот определение модели и код для тестового примера
var Promise = require("bluebird");
var Sequelize = require("sequelize");
var _ = require('lodash-node');
var schemaName ="test_schema";
var sequelize = new Sequelize(c.database,c.username,
c.password,{dialect :'postgres', port:'5432',schema:schemaName});
var User =sequelize.define('User',{
id:{ type: Sequelize.INTEGER,primaryKey:true, autoIncrement:true},
name:{type:Sequelize.TEXT,allowNull:false},
nick_name:{type:Sequelize.TEXT,allowNull:true},
date_of_joining:{type:Sequelize.DATE,allowNull:false,defaultValue:Sequelize.NOW}
},
{
tableName:"user",
underscored:true,
timestamps:false
}
);
var Task = sequelize.define('Task',
{
id:{ type: Sequelize.INTEGER,primaryKey:true, autoIncrement:true},
name:{type:Sequelize.TEXT,allowNull:false},
begin_time:{type:Sequelize.DATE,allowNull:false,defaultValue:Sequelize.NOW},
end_time:{type:Sequelize.DATE,allowNull:true}
},
{
tableName:"task",
underscored:true,
timestamps:false
}
);
User.schema(schemaName);
Task.schema(schemaName);
User.hasMany(Task, {as:"Tasks"});
sequelize.sync({force:true}, {logging:console.log})
.then(function(args){
var users =[
{name:"Abraham Milbard"},
{name:"Jimmy Quake"},
{name:"John Amayo"}
];
var tasks =[
{name:"Bring 100 apples by today evening"},
{name:"Do the dishes"},
{name:"Watch soap and weep"},
{name:"Bitch about your miserable life"}
];
User.create(users[0])
.success(function(usr){
var chainer = new Sequelize.Utils.QueryChainer;
var t1 = Task.build(tasks[0 ]),
t2 = Task.build(tasks[1]);
chainer.add(t1.save());
chainer.add(t2.save());
chainer.runSerially({ skipOnError:true})
.success(function(results){
var tsk1 = results[0];
var tsk2 = results[1];
usr.setTasks([tsk1,tsk2]).success(function(assocTasks){
});
}).error(function(err){
console.log("Could not add tasks to user"+err);
});
}).error(function(err){
console.log("Could not create user ");
});
});
Если выполнить этот код, ошибка, сообщаемая является:
error: relation "task" does not exist
И запросы, генерируемые являются:
Executing (default): SELECT * FROM "test_schema"."task" WHERE "test_schema"."task"."user_id"=1;
Executing (default): UPDATE "task" SET "user_id"=1 WHERE "id" IN (1,2) RETURNING *
Очевидно, что инструкция UPDATE не работает, поскольку префикс схемы "test_ схема "отсутствует. Другими словами, если инструмент вывел следующий запрос:
UPDATE "test_schema"."task" SET "user_id"=1 WHERE "id" IN (1,2) RETURNING *
Это сработало бы очень хорошо. Может ли кто-нибудь здесь предоставить какие-либо обходные пути/идеи?