Node.js Sequelize模型的外键定义
我正在尝试在Postgresql上创建这两个表的Sequelize(3.20)模型:Node.js Sequelize模型的外键定义,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我正在尝试在Postgresql上创建这两个表的Sequelize(3.20)模型: | user | | comment | |-------| |----------| | id | | id | | email | | userId | 用户表位于crm架构上,注释表位于注释架构上comment.userId具有指向user.id的外键 var User = db_conn.define('
| user | | comment |
|-------| |----------|
| id | | id |
| email | | userId |
用户表位于crm架构上,注释表位于注释架构上comment.userId
具有指向user.id
的外键
var User = db_conn.define('user', {
email: {
...
}
}, {
...
});
User.sync({force: true}).then(function () {
return User.create({
email: 'mail@gmail.com'
});
});
var Comment = db_conn.define('comment', {
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: User,
key : 'id',
deferrable: Sequelize.Deferrable.INITIALLY_DEFERRED
}
}
}, {
...
});
Comment.sync({force: true}).then(function () {
return Comment.create({
userId: 1,
});
});
但我得到了一个错误:
Unhandled rejection SequelizeDatabaseError: relation "user" does not exist
生成的SQL:
CREATE TABLE IF NOT EXISTS "comment"."comment" ("id" SERIAL, "userID" INTEGER NOT NULL REFERENCES "user" ("id") DEFERRABLE INITIALLY DEFERRED);
正如您所看到的,它正在创建一个FK touser
表,而不是'crm'。“user”
表。这是一个cauisng错误,因为公共架构上没有用户表。你能告诉我我错过了什么吗
谢谢。请使用以下代码进行尝试:
var Comment = db_conn.define('comment', {
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: 'user',
referencesKey: 'userId'
}
}
}
“references”属性的名称必须与数据库中的表名完全相同(注意大写!)
这能解决您的问题吗?Sequelize目前不支持跨数据库联接。这里的人提出了一个实现它的方法。请查收
在Sequelize解决此问题之前,您可以设置登录数据库的用户的搜索路径,如下所示:
ALTER ROLE sequelize_user IN DATABASE my_sequelize_app_db
SET search_path = crm, comment, public;
这样,当前失败的CREATETABLE语句将很好地工作。只有在不同的模式中有同名的表时,才会遇到问题。same error@Simon。还得到不推荐的错误它不是跨数据库的。所有这些模式都在相同的数据库上。