Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DO
- $$
- DECLARE
- c INT;
- conn_str TEXT DEFAULT
- 'host=localhost port=5432 user=tgl dbname=postgres sslmode=disable';
- conn_count INT DEFAULT 50;
- remaining INT;
- finished BOOL[];
- conn TEXT;
- loops INT DEFAULT 10;
- looper INT;
- timer TIMESTAMPTZ;
- inner_timer TIMESTAMPTZ;
- returned TEXT[];
- _found BOOL;
- _idle_wait BOOL DEFAULT false;
- _query TEXT DEFAULT format(
- 'DO $d$ DECLARE x INT; BEGIN FOR x IN 1..100 '
- 'LOOP RAISE NOTICE ''%s''; END LOOP; END;$d$', lpad('', 1025, 'x'));
- BEGIN
- CREATE EXTENSION IF NOT EXISTS dblink;
- PERFORM dblink_connect(
- 'test' || s,
- conn_str)
- FROM generate_series(1,conn_count) s;
- timer := clock_timestamp();
- FOR looper in 1..loops
- LOOP
- remaining := conn_count;
- finished = null;
- PERFORM dblink_send_query('test' || s, _query) FROM generate_series(1,conn_count) s;
- inner_timer := clock_timestamp();
- LOOP
- _found := false;
- FOR c IN 1..conn_count
- LOOP
- IF finished[c]
- THEN
- CONTINUE;
- END IF;
- conn := 'test' || c;
- IF dblink_is_busy('test' || c) = 0
- THEN
- _found := true;
- PERFORM * FROM dblink_get_result(conn) AS R(V TEXT);
- PERFORM * FROM dblink_get_result(conn) AS R(V TEXT);
- finished[c] := true;
- remaining := remaining - 1;
- END IF;
- END LOOP;
- IF NOT _found AND _idle_wait
- THEN
- PERFORM pg_sleep(0.01);
- END IF;
- EXIT WHEN remaining = 0;
- END LOOP;
- RAISE NOTICE 'LOOP: % %', looper, clock_timestamp() - inner_timer;
- END LOOP;
- PERFORM dblink_disconnect('test' || s) FROM generate_series(1,conn_count) s;
- END;
- $$ LANGUAGE PLPGSQL;
Advertisement
Add Comment
Please, Sign In to add comment