Guest User

Untitled

a guest
Sep 22nd, 2026
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1.  
  2. DO
  3. $$
  4. DECLARE
  5. c INT;
  6. conn_str TEXT DEFAULT
  7. 'host=localhost port=5432 user=tgl dbname=postgres sslmode=disable';
  8. conn_count INT DEFAULT 50;
  9.  
  10. remaining INT;
  11. finished BOOL[];
  12.  
  13. conn TEXT;
  14.  
  15. loops INT DEFAULT 10;
  16. looper INT;
  17.  
  18. timer TIMESTAMPTZ;
  19. inner_timer TIMESTAMPTZ;
  20.  
  21. returned TEXT[];
  22.  
  23. _found BOOL;
  24. _idle_wait BOOL DEFAULT false;
  25.  
  26. _query TEXT DEFAULT format(
  27. 'DO $d$ DECLARE x INT; BEGIN FOR x IN 1..100 '
  28. 'LOOP RAISE NOTICE ''%s''; END LOOP; END;$d$', lpad('', 1025, 'x'));
  29.  
  30. BEGIN
  31. CREATE EXTENSION IF NOT EXISTS dblink;
  32.  
  33. PERFORM dblink_connect(
  34. 'test' || s,
  35. conn_str)
  36. FROM generate_series(1,conn_count) s;
  37.  
  38. timer := clock_timestamp();
  39.  
  40. FOR looper in 1..loops
  41. LOOP
  42. remaining := conn_count;
  43. finished = null;
  44.  
  45. PERFORM dblink_send_query('test' || s, _query) FROM generate_series(1,conn_count) s;
  46.  
  47. inner_timer := clock_timestamp();
  48.  
  49. LOOP
  50. _found := false;
  51.  
  52. FOR c IN 1..conn_count
  53. LOOP
  54. IF finished[c]
  55. THEN
  56. CONTINUE;
  57. END IF;
  58.  
  59. conn := 'test' || c;
  60.  
  61. IF dblink_is_busy('test' || c) = 0
  62. THEN
  63. _found := true;
  64.  
  65. PERFORM * FROM dblink_get_result(conn) AS R(V TEXT);
  66. PERFORM * FROM dblink_get_result(conn) AS R(V TEXT);
  67.  
  68. finished[c] := true;
  69. remaining := remaining - 1;
  70.  
  71. END IF;
  72. END LOOP;
  73.  
  74. IF NOT _found AND _idle_wait
  75. THEN
  76. PERFORM pg_sleep(0.01);
  77. END IF;
  78.  
  79. EXIT WHEN remaining = 0;
  80. END LOOP;
  81.  
  82. RAISE NOTICE 'LOOP: % %', looper, clock_timestamp() - inner_timer;
  83. END LOOP;
  84.  
  85. PERFORM dblink_disconnect('test' || s) FROM generate_series(1,conn_count) s;
  86.  
  87. END;
  88. $$ LANGUAGE PLPGSQL;
  89.  
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment