1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
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;
|