zugeordnet werden. Ich versuche Sequelize (1.7) mit Postgresql (9.3) zu verwenden und versuche, Schemas zu verwenden. Ich habe Schemas extern in der Datenbank erstellt, aber in meinen Modellen verwendet. Wenn ich versuche, Modellverbände zu machen, beklagt Sequelize, dass die Beziehung nicht existiert. Wenn ich die Modelle neu definiere, um das Standard "öffentliche" Schema von PostgreSQL zu verwenden, funktioniert es gut.Modelle können nicht in einem Schema (PostgreSQL) mit Sequelize
Hier sind die Modelldefinitionen und Code für den Testfall
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 ");
});
});
Wenn Sie diesen Code ausführen, der Fehler gemeldet wird:
error: relation "task" does not exist
Und die generierten Abfragen sind:
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 *
Es ist deutlich zu sehen, dass die UPDATE-Anweisung fehlschlägt, weil das Schema-Präfix "test_ Schema "fehlt. Mit anderen Worten, wenn das Werkzeug die folgende Abfrage ausgegeben hätte:
Es hätte gut funktioniert. Kann jemand hier irgendwelche Workarounds/Einblicke zur Verfügung stellen?