我想在這裏得到的是哪個主題已經有4個教室,如果超過了通知並返回null,並且工作。但是當我插入其他主題「2」時,代碼會提出相同的通知,但我這個主題只有1個類。我知道我使用的是「HAVING COUNT(cod_classroom) = 4
」,代碼只能得到主題已經有4個教室的內容。我試圖只用這個:「SELECT DISTINCT cod_subject,COUNT(cod_classroom) AS CountOf FROM registration_subject GROUP BY cod_subject
」但我不知道如何檢查更多的值。檢查PostgreSQL中每個值都已經超過了觸發器的限制併發出通知
我希望你們都明白我想要什麼,我盡力=)謝謝大家提前
CREATE OR REPLACE FUNCTION quantas()
RETURNS trigger AS
$BODY$declare qtd record;
begin
SELECT * INTO qtd FROM (SELECT DISTINCT cod_subject,COUNT(cod_classroom) AS CountOf FROM registration_subject
GROUP BY cod_subject HAVING COUNT(cod_classroom) = 4) AS total;
if found then
raise notice 'This subject has already 4 classroom';
return null;
end if;
end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION qtd()
OWNER TO postgres;
沒有添加適當的'LOCK'語句,這個函數很容易出現競爭條件,這意味着它會錯誤地拒絕併發刪除操作中的合法更改,並且會錯誤地允許多次插入。你*必須*鎖定'registration_subject'表'IN EXCLUSIVE MODE'以獲得可靠的結果。考慮'SELECT ... FOR SHARE'行鎖不足以防止併發插入。 –