| CREATE TYPE testt AS (x integer, y integer, v varchar); |
| |
| CREATE OR REPLACE FUNCTION st(integer, integer, varchar) |
| RETURNS void AS $$ |
| DECLARE t testt; r record; |
| BEGIN t.x := $1; t.y := $2; t.v := $3; |
| select into r 10,10,'boo'; |
| PERFORM dbms_pipe.pack_message(t); |
| END; |
| $$ LANGUAGE plpgsql; |
| |
| CREATE OR REPLACE FUNCTION sk() |
| RETURNS void AS $$ |
| DECLARE t testt; |
| o testt; |
| BEGIN t.x := 1; t.y := 2; t.v := 'Pavel Stehule'; |
| RAISE NOTICE 'SEND'; |
| PERFORM dbms_pipe.pack_message(t); |
| PERFORM dbms_pipe.send_message('boo',4,10); |
| RAISE NOTICE 'RECEIVE'; |
| -- PERFORM dbms_pipe.receive_message('boo',4); |
| -- SELECT INTO o * from dbms_pipe.unpack_message_record() as (x integer, y integer, v varchar); |
| -- RAISE NOTICE 'received %', o.v; |
| END; |
| $$ LANGUAGE plpgsql; |
| |
| |
| |
| CREATE OR REPLACE FUNCTION SessionA() RETURNS void AS $$ |
| BEGIN |
| FOR i IN 1..100000 LOOP |
| PERFORM dbms_pipe.pack_message('Prvni '||i); |
| PERFORM dbms_pipe.pack_message('Druhy '||i); |
| RAISE NOTICE 'SEND'; |
| IF dbms_pipe.send_message('pipe_name',4,10) = 1 THEN |
| RAISE NOTICE 'Timeout'; |
| PERFORM pg_sleep(5); |
| PERFORM dbms_pipe.send_message('pipe_name',4,10); |
| END IF; |
| PERFORM pg_sleep(random()); |
| END LOOP; |
| END; $$ LANGUAGE plpgsql; |
| |
| CREATE OR REPLACE FUNCTION SessionB() RETURNS void AS $$ |
| BEGIN |
| FOR i IN 1..100000 LOOP |
| IF dbms_pipe.receive_message('pipe_name',4) = 1 THEN |
| RAISE NOTICE 'Timeout'; |
| PERFORM pg_sleep(5); |
| CONTINUE; |
| END IF; |
| RAISE NOTICE 'RECEIVE % %', dbms_pipe.unpack_message_text(), |
| dbms_pipe.unpack_message_text(); |
| PERFORM pg_sleep(random()); |
| END LOOP; |
| END; $$ LANGUAGE plpgsql; |
| |
| |