mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +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();
 |