我有function
其中checks
的maximum value
pid然后inserts
进入数据库。
但它提高了conflict
我有一段时间concurrent transactions!
那么我该如何避免这种冲突!
create table tablea(
sno serial,
pid integer,
ppid integer,
pname text
);
--这是检查pid的最大值然后插入数据库的函数。
CREATE OR REPLACE FUNCTION insert_details(_pname text)
RETURNS void AS
$BODY$
declare
_pid int;
begin
_pid := (select MAX(pid) from tablea);
_pid := coalesce(_pid, 0) + 1;
insert into tablea(pid,pname)
values(_pid,_pname);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
--(Sub Party)This is the function checks the maximum value of ppid and then inserts into the database.(sub-Party)
CREATE OR REPLACE FUNCTION insert_details(_pid int,_pname text)
RETURNS void AS
$BODY$
declare
_ppid int;
begin
_ppid := (select MAX(ppid) from tablea where pid=_pid);
_ppid := coalesce(_ppid, 0) + 1;
insert into tablea(pid,ppid,pname)
values (_pid,_ppid,_pname);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
我的要求:当我submit
从前端点击一个按钮时,我field(pname)
应该被插入到tablea
,通过增加pid by +1
,所以我不能从 tablea 中删除我的 pid,并且 pid 保持整数,以便我可以通过相同的 pid 插入另一条记录& 流程也和 ppid 一样..
所以我应该改变我的表结构还是任何其他方式来纠正并发事务中的冲突。
这就是我的整个概念的全部内容 sql fiddle demo