我有一个关于自定义模式下的约束限制的问题。我的应用程序为每个客户端创建一个新的/分离的模式,对应于客户端的名称(即clienta、clientb等)。一些表具有外键约束,但它们只能在除默认public模式之外的模式上工作。例如,假设有一个名为clienta的模式,它有projects和tasks表,模型Task具有belongsTo(models.Project)关联(即projects表
primary_key
是表tasks的一个foreign_key
)。问题从这里开始:当尝试在表tasks中创建记录时,会出现一个错误,指出foreign key violation error... Key (project_id)=(1) is not present in table "projects...
,即使projects表具有相应的id=1的记录。我想知道这是sequelize
库本身的限制还是我的配置中缺少了什么。
Sequelize配置
"development": {
"database": "my_app",
"host": "127.0.0.1",
"dialect": "postgres",
"operatorsAliases": "Sequelize.Op",
"dialectOptions": {
"prependSearchPath": true
},
"define": {
"underscored": true
}
}
create函数的示例:
models.Task.create({...args}, { searchPath: 'clienta' })
注意:在public模式下一切如预期般工作。
sync
助手动态创建了我的表(例如Project.sync({schema: testa})),这确实创建了一个表,但不足以将约束条件分配给相应的模式。我在sync
选项中添加了searchPath
选项(例如Model.sync({schema: testa, searchPath: testa})
),现在它可以工作了。谢谢!你值得获得赏金奖励! - bir_ham