我对自定义架构的约束有疑问。
我的应用程序为每个与客户名称相对应的客户创建一个新的/单独的架构(即 clienta、clientb ,...)。有些表具有外键 约束,但它们不适用于默认公共(public) 架构以外的架构。例如,假设有一个名为 clienta 的模式,它有 projects 和 tasks 表,模型 Task 有一个belongsTo(models.Project) 关联(即 projects 表 primary_key
是表 foreign_key >tasks。问题从这里开始:尝试在表 tasks 中创建记录时出现错误,提示 foreign key violation错误...键 (project_id)=(1) 不存在于表“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
}
}
创建函数示例:
models.Task.create({...args}, { searchPath: 'clienta' })
注意 public 架构中的一切都按预期工作。
最佳答案
同步方法API列出了与 DB-schema 相关的两个选项:
options.schema - schema the table should be created in
options.searchPath - optional parameter to set searchPath (Postgresql)
当使用默认模式以外的模式并且已创建模型之间的关联(例如使用 belongsTo)时,设置 searchPath 以保存目标表模式的名称很重要。按照search_path in postgresql中的解释, 不指定 searchPath 将具有引用默认架构(通常为“公共(public)”)中的表(如果存在)的约束。
关于postgresql - 非公共(public)模式中的 Postgres 外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338171/