2014-01-30 59 views
1

我從Java代碼ERROR關係桌子上

..... 
sql = "CREATE TABLE IF NOT EXISTS table1 (s VARCHAR(100), p VARCHAR(100), o VARCHAR(100), PRIMARY KEY (s,p,o)) ; ";     
pgsql.runUpdateQuery(sql);   

sql = "CREATE INDEX indextable1 ON table1 (s,p,o);"; 
pgsql.runUpdateQuery(sql);   
..... 

在PostgreSQL上運行的查詢時,下面有一個錯誤在創建索引時,但我得到了以下錯誤已經存在於PostgreSQL的

org.postgresql.util.PSQLException: ERROR: relation "indextable1" already exists   

有人可以解釋我發生了什麼?我的理解是PRIMARY KEY被認爲是INDEX,因此第二個查詢失敗。我對嗎 ?

+2

在模式中有另一個名爲'indextable1'的索引(或表)。它與列列表已被索引的事實無關。 –

+0

@a_horse_with_no_name謝謝,我已經清理了所有數據庫,然後再次運行查詢,現在一切順利。 –

回答

0

問題是主鍵約束名稱與表名相同。我不知道postgres如何表示約束,但我認爲在創建主鍵約束期間觸發了錯誤「關係已存在」,因爲表已經被聲明。但是由於這個錯誤,表格並沒有在最後被創建。