test_clog.sql

text/plain

Filename: test_clog.sql
Type: text/plain
Part: 2
Message: clog_redo causing very long recovery time
create language plpgsql;
\i /path/to/share/contrib/dblink.sql

CREATE OR REPLACE FUNCTION test_clog(howmany int) RETURNS int AS $_$
DECLARE
 i int;
 arr text[];
 dbname text;
BEGIN
 dbname := current_database();
 arr := dblink_get_connections();
 IF arr IS NOT NULL THEN
  PERFORM dblink_disconnect('conn');
 END IF;
 EXECUTE $$SELECT dblink_connect('conn','dbname=$$ || dbname || $$')$$;
 PERFORM dblink_exec('conn', 'DROP TABLE IF EXISTS clogtest');
 PERFORM dblink_exec('conn', 'CREATE TABLE clogtest(id int primary key)');
 PERFORM dblink_exec('conn', 'SET debug_pretty_print TO ON');
 FOR i IN 1..howmany LOOP
  PERFORM dblink_exec('conn', 'insert into clogtest values(' || i || ')', false);
  IF (i % 5000) = 0 THEN
   RAISE WARNING '% iterations performed', i;
   RAISE WARNING 'Last ERROR: %', dblink_error_message('conn');
  END IF;
 END LOOP;
 PERFORM dblink_disconnect('conn');
 RETURN howmany;
END;
$_$ LANGUAGE plpgsql
 SET client_min_messages TO WARNING;

SELECT test_clog(1000000);