我对自定义架构上的约束有疑问。
我的应用程序为每个与客户端名称相对应的客户端创建新的/单独的架构(即。 clienta , clientb ,...)。有些表具有外键约束,但它们不能用于默认 public 模式以外的其他模式。例如,假设有一个名为 clienta 的架构,它具有 projects 和 tasks 表,模型 Task 具有一个归属于(模型。项目)关联(即 项目 表primary_key
是表 任务的foreign_key
。问题从这里开始:尝试在表 任务 中创建记录时,即使 projects 表具有ID = 1的相应记录。我是要说这是foreign key violation error... Key (project_id)=(1) is not present in table "projects...
库本身的限制还是我在配置中缺少某些内容?
序列化配置
sequelize
创建功能示例:
"development": {
"database": "my_app",
"host": "127.0.0.1",
"dialect": "postgres",
"operatorsAliases": "Sequelize.Op",
"dialectOptions": {
"prependSearchPath": true
},
"define": {
"underscored": true
}
}
N.B 一切都能在 public 模式中按预期工作。
答案 0 :(得分:1)
同步方法API列出了两个与DB模式有关的选项:
options.schema-应该在其中创建表的模式
options.searchPath-设置searchPath(Postgresql)的可选参数
使用默认模式以外的其他模式并且已在模型之间创建关联时(例如,使用belongsTo),将searchPath设置为保留目标表的模式名称非常重要。按照search_path in postgresql中的解释,未指定searchPath将具有默认表(通常为“ public”)中引用表(如果存在)的约束。