2014-03-12 55 views
0

我在PostgreSQL 9.3.2上運行此查詢。任何人都可以告訴我爲什麼這個查詢波紋管拋出獨特的違規異常,而我不更新唯一列。更新非唯一列時的PostgreSQL重複鍵

內容表也有兩個觸發器,但它只是插入和更新其他表。

Execute command failed: ERROR: duplicate key value violates unique constraint "contents_0_uk" 
DETAIL: Key (hash)=(\x145806e0794729ba98f16e4e8ec723cb) already exists. 
CONTEXT: SQL statement "UPDATE contents cont 
    SET  content   = tmp.content, 
      primitive  = tmp.primitive, 
      lang   = ARRAY[lang_id(tmp.lang[1]), lang_id(tmp.lang[2]), lang_id(tmp.lang[3])], 
      percent   = tmp.percent, 
      score   = tmp.score 
    FROM tmp_post_bulk tmp 
    WHERE tmp.cid = cont.id 
      AND tmp.chash_matched = TRUE 
      AND (
        cont.content   != tmp.content 
        OR cont.primitive  != tmp.primitive 
        OR cont.percent   != tmp.percent 
        OR cont.score   != tmp.score 
        OR cont.lang   != ARRAY[lang_id(tmp.lang[1]), lang_id(tmp.lang[2]), lang_id(tmp.lang[3])] 
      )" 
PL/pgSQL function content_bulk() line 53 at SQL statement 
! Query is: SELECT content_bulk(); 
+0

也許'contents_0_uk'約束在觸發器更新的表上? 你可以發表表格的定義嗎? –

+0

contents_0_uk在contents_0上,它是內容表的一個分區。觸發器不更新內容表中的任何分區,並且更新的表沒有任何觸發器。 –

+0

那麼,仔細檢查觸發器。有些東西正在改變背後的「哈希」列。是「內容」表中的那一列的一部分嗎? –

回答

0

我剛纔找出的問題是一樣的 Postgres, duplicate unique index

因爲有此表duplicateds行(唯一列重複),所以當查詢更新重複的行和PostgreSQL拋出異常。

我會手動刪除重複的行。