2013-12-15 1 views
0

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 create table if not exists 오히려 create table보다 발행하고 있기 때문에 (표 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

추측 : 테이블 중 하나가 필요 고유 키없이 존재한다 (예를 들어, 기본 키가 부족하여).

(올바른 경우, 나는이 메모를 추가 할 것입니다 일부 포스트 그레스 코어의 devs if existsif not exists 구조를 추가하는 생각에 적대적이었다, 따라서 반대 :. "성공"당신 create table if not exists이 자동으로 할 때 발생하도록되어 무엇 "과 기존 테이블은 당신이 원했던 테이블과 다른 스키마를 가지고 있습니다. ")

+0

실제로 테이블 중 하나가 이전 실행에서 존재했던 경우입니다. 먼저 캐스케이드 표현식이 포함 된 테이블을 삭제 한 다음 깨끗한 방식으로 다시 작성합니다. 그래서, 그것은 효과가 ... 감사 –