【发布时间】:2014-03-30 02:30:04
【问题描述】:
我有一张桌子Tag(id, name, description, isAccepted),
一个表Content(id, text, date, idUser → User, contentType)
还有一个TagQuestion(idQuestion → Content, idTag → Tag)
并且我想确保特定问题只有 5 个或更少的相关标签(类似于 StackOverflow)
所以,我创建了一个函数:
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
这是什么意思?我该如何解决?
【问题讨论】:
标签: sql database postgresql