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

bir*_*ham 8 postgresql foreign-keys sequelize.js

我有关于自定义架构的约束的问题.我的应用程序为每个客户端的名称(即clienta,clientb,...)创建一个新的/单独的模式.某些表具有外键约束,但它们不适用于默认公共模式以外的模式.例如,假设有一个名为clienta的模式,它有项目任务表,模型任务有一个belongsTo(models.Project)关联(即项目primary_key是一个foreign_key任务.问题从这里开始:当试图创建一个记录在表任务中出现错误,foreign key violation error... Key (project_id)=(1) is not present in table "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
    }
  }
Run Code Online (Sandbox Code Playgroud)

创建函数示例:

models.Task.create({...args}, { searchPath: 'clienta' })

NB一切都在公共架构中按预期工作.

小智 1

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

options.schema - 应在其中创建表的架构

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

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