gpt4 book ai didi

node.js - Sequelize 模型上的外键定义

转载 作者:行者123 更新时间:2023-12-03 22:42:14 25 4
gpt4 key购买 nike

我正在尝试在 Postgresql 上创建这两个表的 Sequelize (3.20) 模型:

| 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);

如您所见,它正在为 user 创建一个 FK表不 'crm'.'user' table 。这是因为公共(public)模式上没有用户表而导致错误。你能告诉我我错过了什么吗?

谢谢你。

最佳答案

在 Sequelize 修复此问题之前,作为一种解决方法,您可以设置您登录到数据库的用户的 search_path,如下所示:

ALTER ROLE sequelize_user IN DATABASE my_sequelize_app_db
SET search_path = crm, comment, public;

这样,当前失败的 CREATE TABLE 语句将很好地工作。如果您在不同的模式上有相同名称的表,您只会遇到问题。

关于node.js - Sequelize 模型上的外键定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com