test1.sh.txt

text/plain

Filename: test1.sh.txt
Type: text/plain
Part: 0
Message: Re: Flushing large data immediately in pqcomm
#!/bin/bash

dbname=postgres
port=5432

test_cases=(
"100 100 5000000"		# only 100 bytes	
"1024 10240 200000"    # 1Kb and 10Kb 
"1024 1048576 2000"		# 1Kb and 1Mb 
"1048576 1048576 1000"	# all 1Mb
)

insert_rows(){
	psql -d $dbname -p $port -c "
	DO \$\$
	DECLARE
	    counter INT;
	BEGIN
	    FOR counter IN 1..$3 LOOP
	        IF counter % 2 = 1 THEN
	            INSERT INTO test_table VALUES (repeat('a', $1)::text);
	        ELSE
	            INSERT INTO test_table VALUES (repeat('b', $2)::text);
	        END IF;
	    END LOOP;
	END \$\$;
	" > /dev/null
}


psql -d $dbname -p $port -c "CREATE EXTENSION IF NOT EXISTS pg_prewarm;" > /dev/null

for case in "${test_cases[@]}" 
do
	psql -d $dbname -p $port -c "DROP TABLE IF EXISTS test_table;" > /dev/null
	psql -d $dbname -p $port -c "CREATE TABLE test_table(data text not null);" > /dev/null
	insert_rows $case

	psql -d $dbname -p $port -c "select pg_prewarm('test_table');" > /dev/null

	echo -n "Run $case: "

	elapsed_time=0
	for a in {1..30}
	do
		start_time=$(perl -MTime::HiRes=time -e 'printf "%.9f\n", time')
		psql -d $dbname -p $port -c "COPY test_table TO STDOUT;" > /dev/null
		end_time=$(perl -MTime::HiRes=time -e 'printf "%.9f\n", time')
		elapsed_time=$(perl -e "printf('%.9f', ($end_time - $start_time) + $elapsed_time)")
	done
	
	avg_elapsed_time_in_ms=$(perl -e "printf('%.9f', ($elapsed_time / 30))")
	echo $avg_elapsed_time_in_ms
done