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;