mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
 | 
						|
# Copyright (c) 2021-2023, PostgreSQL Global Development Group
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
use PostgreSQL::Test::Cluster;
 | 
						|
use PostgreSQL::Test::Utils;
 | 
						|
use Test::More;
 | 
						|
 | 
						|
 | 
						|
my $node = PostgreSQL::Test::Cluster->new('main');
 | 
						|
 | 
						|
$node->init;
 | 
						|
$node->append_conf(
 | 
						|
	'postgresql.conf',
 | 
						|
	qq{shared_preload_libraries = 'pg_prewarm'
 | 
						|
    pg_prewarm.autoprewarm = true
 | 
						|
    pg_prewarm.autoprewarm_interval = 0});
 | 
						|
$node->start;
 | 
						|
 | 
						|
# setup
 | 
						|
$node->safe_psql("postgres",
 | 
						|
	    "CREATE EXTENSION pg_prewarm;\n"
 | 
						|
	  . "CREATE TABLE test(c1 int);\n"
 | 
						|
	  . "INSERT INTO test SELECT generate_series(1, 100);");
 | 
						|
 | 
						|
# test read mode
 | 
						|
my $result =
 | 
						|
  $node->safe_psql("postgres", "SELECT pg_prewarm('test', 'read');");
 | 
						|
like($result, qr/^[1-9][0-9]*$/, 'read mode succeeded');
 | 
						|
 | 
						|
# test buffer_mode
 | 
						|
$result =
 | 
						|
  $node->safe_psql("postgres", "SELECT pg_prewarm('test', 'buffer');");
 | 
						|
like($result, qr/^[1-9][0-9]*$/, 'buffer mode succeeded');
 | 
						|
 | 
						|
# prefetch mode might or might not be available
 | 
						|
my ($cmdret, $stdout, $stderr) =
 | 
						|
  $node->psql("postgres", "SELECT pg_prewarm('test', 'prefetch');");
 | 
						|
ok( (        $stdout =~ qr/^[1-9][0-9]*$/
 | 
						|
		  or $stderr =~ qr/prefetch is not supported by this build/),
 | 
						|
	'prefetch mode succeeded');
 | 
						|
 | 
						|
# test autoprewarm_dump_now()
 | 
						|
$result = $node->safe_psql("postgres", "SELECT autoprewarm_dump_now();");
 | 
						|
like($result, qr/^[1-9][0-9]*$/, 'autoprewarm_dump_now succeeded');
 | 
						|
 | 
						|
# restart, to verify that auto prewarm actually works
 | 
						|
$node->restart;
 | 
						|
 | 
						|
$node->wait_for_log(
 | 
						|
	"autoprewarm successfully prewarmed [1-9][0-9]* of [0-9]+ previously-loaded blocks"
 | 
						|
);
 | 
						|
 | 
						|
$node->stop;
 | 
						|
 | 
						|
done_testing();
 |