唯一字段 - 没有唯一约束匹配给定键

时间:2013-12-15 17:35:57

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

我在postgresql数据库中有三个表,即tec_configurations,tep_cores和tep2tec_bindings。表tec2tep_bindings引用前两个表的主键字段。每个表的相关create语句在下面的sql片段2,3和4中列出。我收到下面第一个片段中指出的错误。你能告诉我如何解决这个错误吗?表TEC_CONFIGURATIONS中的“id”字段已经是唯一的,因为它是主键。所以,我没有理由得到这个错误信息。

SNIPPET 1(错误讯息):

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

SNIPPET 2(表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(表tep_cores):

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

SNIPPET 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);

1 个答案:

答案 0 :(得分:0)

疯狂猜测,因为您发布了create table if not exists而不是create table:其中一个表存在而没有所需的唯一键(例如,缺少主键)。

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