首页 > 解决方案 > 在 Postgres 中创建一个触发器函数,它不允许你有两个具有相同 id 的条目

问题描述

我在 postgres 中有两个表,我想创建一个函数,该函数在借贷表中没有超过 2 个具有相同人员 ID 的贷款。例如:在贷款表中,我不能有 3 笔来自同一个人的贷款,即我们用同一个人的 id 贷款。

我需要使用一个函数来做到这一点,我把我想做的事情做了,但它没有用

CREATE TABLE person (
    name_person varchar (100) ,
    id_person varchar(14) primary key
)

CREATE TABLE lending(
    id_lending primary key (100) ,
    id_publication (14) FK,
    id_person fk REFERENCES id_person (person)




CREATE OR REPLACE FUNCTION check_numlending() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
IF( select * from lending
   inner join person 
   on person.id_person = lending.id_person > 2  ) THEN 
    RAISE EXCEPTION 'ERROR'; 
END IF; 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 


-- Trigger
CREATE TRIGGER  
trg_check_num_lending  
BEFORE INSERT OR UPDATE ON 
lendingFOR EACH ROW EXECUTE PROCEDURE check_numlending(); 

标签: sqlpostgresqlfunction

解决方案


编写您的触发函数,如下所示:

-- Function
CREATE OR REPLACE FUNCTION check_numlending() 
RETURNS trigger AS 
$BODY$ 
declare counter int;
BEGIN 
select count(*) into counter from lending where id_person =new.id_person;
IF( counter>=2  ) THEN 
    RAISE EXCEPTION 'ERROR'; 
END IF; 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 


-- Trigger
CREATE TRIGGER  
trg_check_num_lending  
BEFORE INSERT OR UPDATE ON 
lending FOR EACH ROW EXECUTE PROCEDURE check_numlending(); 

推荐阅读