Node.js Sequelize模型的外键定义

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('

我正在尝试在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);
正如您所看到的,它正在创建一个FK to
user
表,而不是
'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。还得到不推荐的错误它不是跨数据库的。所有这些模式都在相同的数据库上。