2013-12-15 23 views
0

我有一個postgresql數據庫中的三個表,即tec_configurations,tep_cores和tep2tec_bindings。表tec2tep_bindings引用前兩個表的主鍵字段。每個表的相關創建語句在下面的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); 
+0

無法在PostgreSQL 9.1中重現。你使用什麼版本? –

回答

0

胡亂猜測,因爲你發出create table if not exists而不是create table:存在一個表,而不需要的唯一鍵(例如從缺少主鍵)。

(如果正確的話,我想補充這張紙幣Postgres的核心開發者敵視增加if existsif not exists結構的想法,反對這樣的:「什麼是應該發生的,當你create table if not exists,默默的‘成功’,並現有的表與您所希望的表有所不同?「)

+0

確實如此,其中一個表格是從我以前的運行中存在的......我首先刪除包含級聯表達式的表格,然後以乾淨的方式重新創建表格。所以,它的工作......謝謝 –

相關問題