reset role; SET client_min_messages = notice; SET log_error_verbosity = terse; -- SELECT ftruncatetables(); -- select fresetmarket(); SET role client; -- two concurrent paths, (a) is the best -- path (b) -- select finsertorder('A','x',25 ,100 ,'z'); select finsertorder('A','z',200 ,200 ,'x'); NOTICE: owner A created CONTEXT: PL/pgSQL function fgetowner(text,boolean) line 10 at assignment PL/pgSQL function finsertorder(text,text,bigint,bigint,text) line 20 at assignment finsertorder -------------------------------- (1,3-1,8,11,200,10,200,0,0,{}) (1 row) -- path (a) -- select finsertorder('B','x',25 ,200 ,'y'); select finsertorder('B','y',200 ,25 ,'x'); NOTICE: owner B created CONTEXT: PL/pgSQL function fgetowner(text,boolean) line 10 at assignment PL/pgSQL function finsertorder(text,text,bigint,bigint,text) line 20 at assignment finsertorder ------------------------------- (2,3-2,9,11,25,12,200,0,0,{}) (1 row) --select finsertorder('C','y',100 ,100 ,'z'); select finsertorder('C','z',100 ,100 ,'y'); NOTICE: owner C created CONTEXT: PL/pgSQL function fgetowner(text,boolean) line 10 at assignment PL/pgSQL function finsertorder(text,text,bigint,bigint,text) line 20 at assignment finsertorder --------------------------------- (3,3-3,10,12,100,10,100,0,0,{}) (1 row) -- no exchange select id,uuid,nb,oruuid,grp,provider,quality,qtt,receiver from vmvt order by uuid; id | uuid | nb | oruuid | grp | provider | quality | qtt | receiver ----+------+----+--------+-----+----------+---------+-----+---------- (0 rows) --select finsertorder('D','z',250 ,250 ,'x'); select finsertorder('D','x',250 ,250 ,'z'); NOTICE: owner D created CONTEXT: PL/pgSQL function fgetowner(text,boolean) line 10 at assignment PL/pgSQL function finsertorder(text,text,bigint,bigint,text) line 20 at assignment finsertorder ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (4,3-4,11,10,250,11,250,300,250,"{""[(2, 9, 11, 25, 12, 200, 200),(3, 10, 12, 100, 10, 100, 100),(4, 11, 10, 250, 11, 250, 250)]"",""[(1, 8, 11, 200, 10, 200, 200),(4, 11, 10, 250, 11, 250, 200)]""}") (1 row) --two exchanges in a single transaction select id,uuid,nb,oruuid,grp,provider,quality,qtt,receiver from vmvt order by uuid; id | uuid | nb | oruuid | grp | provider | quality | qtt | receiver ----+------+----+--------+-----+----------+---------+-----+---------- 1 | 3-1 | 3 | 3-4 | 3-1 | D | x | 50 | B 2 | 3-2 | 3 | 3-2 | 3-1 | B | y | 200 | C 3 | 3-3 | 3 | 3-3 | 3-1 | C | z | 100 | D 4 | 3-4 | 2 | 3-4 | 3-4 | D | x | 200 | A 5 | 3-5 | 2 | 3-1 | 3-4 | A | z | 200 | D (5 rows) select id,qtt from tquality; id | qtt ----+----- 1 | 0 2 | 0 3 | 0 4 | 0 5 | 0 6 | 0 7 | 0 8 | 0 9 | 0 12 | 200 10 | 300 11 | 250 (12 rows) select * from fgetstats(true); _name | cnt -----------------------------+----- number of qualities | 12 number of owners | 11 number of quotes | 0 number of orders | 28 number of movements | 31 number of quotes removed | 5 number of orders removed | 28 number of movements removed | 26 number of agreements | 12 number of orders rejected | 0 agreements with 2 partners | 5 agreements with 3 partners | 7 (12 rows) select * from fgeterrs(true); _name | cnt ------------------------------+----- balance | 0 errors on quantities in mvts | 0 errors on agreements in mvts | 0 (3 rows)