【问题标题】:Unique Field - no unique constraint matching given keys唯一字段 - 没有与给定键匹配的唯一约束
【发布时间】:2013-12-16 02:16:31
【问题描述】:

我在 postgresql 数据库中有三个表,分别是 tec_configurations、tep_cores 和 tep2tec_bindings。表 tec2tep_bindings 引用前两个表的主键字段。每个表的相关创建语句在下面的 sql sn-ps 2,3 和 4 中列出。我得到下面第一个 sn-p 中指示的错误。你能告诉我如何解决这个错误吗?表 TEC_CONFIGURATIONS 中的“id”字段已经是唯一的,因为它是主键。因此,我看不到收到此错误消息的理由。

片段 1(错误消息):

ERROR: there is no unique constraint matching given keys for referenced table
"tec_configurations"

SNIPPET 2(TABLE tec_configurations):

CREATE TABLE IF NOT EXISTS TEC_CONFIGURATIONS ( 
         ID              SERIAL PRIMARY KEY,           
         TEC_ID          INT  NOT NULL,
         HANDLER_MAC     TEXT NOT NULL, 
         PRIMARY_MAC     TEXT, 
         SECONDARY_MAC   TEXT, 
         TERTIARY_MAC    TEXT, 
         EXPECTED_FLOWS  INT DEFAULT 0, 
         VERSION         INT  DEFAULT 0, 
         UUID            TEXT DEFAULT NULL );

SNIPPET 3(TABLE tep_cores):

CREATE TABLE IF NOT EXISTS TEP_CORES (
         ID     SERIAL PRIMARY KEY,                       
         MAC    TEXT,
         UUID   TEXT,
         CORE_NO INT DEFAULT 0);

片段 4(表 tec2tep_bindings)

CREATE TABLE IF NOT EXISTS TEC2TEP_BINDINGS (
         ID              SERIAL PRIMARY KEY,            
         TEC_ID_FK       INT  NOT NULL REFERENCES TEC_CONFIGURATIONS(ID),
         TEP_CORE_ID_FK  INT  NOT NULL REFERENCES TEP_CORES(ID),
         REPLICA_RANK    INT  DEFAULT 0);

【问题讨论】:

  • 无法在 PostgreSQL 9.1 中重现。你用的是什么版本?

标签: postgresql foreign-keys foreign-key-relationship


【解决方案1】:

猜想,因为您发出的是 create table if not exists 而不是 create table:其中一个表存在但没有所需的唯一键(例如,由于缺少主键)。

(如果正确,我会添加此注释。一些 Postgres 核心开发人员对添加 if existsif not exists 构造的想法持敌对态度,因此反对:“当你 create table if not exists 时,应该会发生什么,默默地“成功”,并且现有表的架构与您希望的不同?”)

【讨论】:

  • 在我之前的运行中确实存在一个表...我首先删除了包含级联表达式的表,然后以干净的方式重新创建。所以,它起作用了......谢谢
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 2017-08-11
  • 2016-04-13
  • 2022-09-27
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多