非公开模式中的Postgres外键约束

时间:2018-07-14 11:44:52

标签: postgresql foreign-keys sequelize.js

我对自定义架构上的约束有疑问。 我的应用程序为每个与客户端名称相对应的客户端创建新的/单独的架构(即。 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 模式中按预期工作。

1 个答案:

答案 0 :(得分:1)

同步方法API列出了两个与DB模式有关的选项:

  

options.schema-应该在其中创建表的模式

     

options.searchPath-设置searchPath(Postgresql)的可选参数

使用默认模式以外的其他模式并且已在模型之间创建关联时(例如,使用belongsTo),将searchPath设置为保留目标表的模式名称非常重要。按照search_path in postgresql中的解释,未指定searchPath将具有默认表(通常为“ public”)中引用表(如果存在)的约束。