postgresql - 非公共(public)模式中的 Postgres 外键约束

标签 postgresql foreign-keys sequelize.js

我对自定义架构的约束有疑问。 我的应用程序为每个与客户名称相对应的客户创建一个新的/单独的架构(即 clientaclientb ,...)。有些表具有外键 约束,但它们不适用于默认公共(public) 架构以外的架构。例如,假设有一个名为 clienta 的模式,它有 projectstasks 表,模型 Task 有一个belongsTo(models.Project) 关联(即 projectsprimary_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/

相关文章:

mysql - Apollo 服务器订阅不起作用

javascript - 有没有办法阻止 sequelize sync() 添加特定的外键?

javascript - 希望在 Sequelize/Postgres DB 查询中迭代 JSON 以找到匹配的值

python - 运行 TestCase 时出现 AssertionError : 400 ! = 201

mysql - 如何在MySQL中创建也是主键的外键?

javascript - 将 .sql 文件转换为 .json 或 javascript 对象或 Sequelize 模型文件的最佳方法

postgresql - 在 docker-compose 文件中创建多个 PostgreSQL 数据库

postgresql - 我们如何在不使用 `psql` 的命令或选项的情况下显示集群中的所有数据库?

node.js - Node/Express & Postgresql - 当没有行匹配时

jsf - javax.el.PropertyNotFoundException : Target Unreachable, 'null' 在外键引用上返回 null