我有一個表Tag
(ID,名稱,描述,isAccepted),「檢查約束被一些行違反」 添加檢查約束
表Content
(ID,文本,日期,ID用戶→用戶,則contentType)
和TagQuestion
(idQuestion→內容,IDTAG→標籤)
,我想確保一個具體的問題只有5個或更少的相關標籤(類似的StackOverflow)
所以,I C reated功能:
CREATE FUNCTION can_insert_tag_question(integer) RETURNS boolean
LANGUAGE plpgsql
AS $_$
BEGIN
IF EXISTS (SELECT "idQuestion" FROM "TagQuestion" WHERE "idQuestion" = $1 GROUP BY "idQuestion" HAVING COUNT("idTag") <= 4)
THEN
RETURN TRUE;
ELSIF NOT EXISTS (SELECT "idQuestion" FROM "TagQuestion" WHERE "idQuestion" = $1)
THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
$_$;
和TagQuestion
嘗試添加CHECK
約束,以驗證它是否可以插入:
ALTER TABLE "public"."TagQuestion" ADD CONSTRAINT "valid_tag" CHECK (can_insert_tag_question("idQuestion"))
,但我得到一個錯誤說:
ERROR: check constraint "valid_tag" is violated by some row
什麼意思是不是?我該如何解決它?
我刪除了我在'TagQuestion'中的每一行,並再次添加了檢查,它工作。不過,我在相同的問題中插入了6個「標籤」,它允許我這樣做。 –
我取代了你的消化系統,現在它工作了。順便說一下,它不允許我使用參數名稱,不得不像以前那樣將它替換爲'$ 1'。任何線索爲什麼? –
@Hugo什麼是版本? 'select version()' –