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 35 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 35 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 35 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 35 at assignment finsertorder ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (4,3-4,11,10,250,11,250,300,250,"[[{""id"":2, ""own"":9, ""nr"":11, ""qtt_requ"":25, ""np"":12, ""qtt_prov"":200, ""qtt"":200, ""flowr"":200 },{""id"":3, ""own"":10, ""nr"":12, ""qtt_requ"":100, ""np"":10, ""qtt_prov"":100, ""qtt"":100, ""flowr"":100 },{""id"":4, ""own"":11, ""nr"":10, ""qtt_requ"":250, ""np"":11, ""qtt_prov"":250, ""qtt"":250, ""flowr"":50 }]+ ,[{""id"":1, ""own"":8, ""nr"":11, ""qtt_requ"":200, ""np"":10, ""qtt_prov"":200, ""qtt"":200, ""flowr"":200 },{""id"":4, ""own"":11, ""nr"":10, ""qtt_requ"":250, ""np"":11, ""qtt_prov"":250, ""qtt"":200, ""flowr"":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 * 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(); _name | cnt ------------------------------+----- errors on quantities in mvts | 0 errors on agreements in mvts | 0 (2 rows)