mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	The Config and Cwd modules were no longer used, but remained imported, in a number of tests. Remove to keep the imports to the actually used modules. Reviewed-by: Andrew Dunstan <andrew@dunslane.net> Discussion: https://postgr.es/m/A5A074CD-3198-492B-BE5E-7961EFC3733F@yesql.se
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
 | 
						|
# Copyright (c) 2021-2022, PostgreSQL Global Development Group
 | 
						|
 | 
						|
# Test CREATE INDEX CONCURRENTLY with concurrent modifications
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
use PostgreSQL::Test::Cluster;
 | 
						|
use PostgreSQL::Test::Utils;
 | 
						|
 | 
						|
use Test::More;
 | 
						|
 | 
						|
my ($node, $result);
 | 
						|
 | 
						|
#
 | 
						|
# Test set-up
 | 
						|
#
 | 
						|
$node = PostgreSQL::Test::Cluster->new('CIC_test');
 | 
						|
$node->init;
 | 
						|
$node->append_conf('postgresql.conf',
 | 
						|
	'lock_timeout = ' . (1000 * $PostgreSQL::Test::Utils::timeout_default));
 | 
						|
$node->start;
 | 
						|
$node->safe_psql('postgres', q(CREATE EXTENSION amcheck));
 | 
						|
$node->safe_psql('postgres', q(CREATE TABLE tbl(i int)));
 | 
						|
$node->safe_psql('postgres', q(CREATE INDEX idx ON tbl(i)));
 | 
						|
 | 
						|
#
 | 
						|
# Stress CIC with pgbench.
 | 
						|
#
 | 
						|
# pgbench might try to launch more than one instance of the CIC
 | 
						|
# transaction concurrently.  That would deadlock, so use an advisory
 | 
						|
# lock to ensure only one CIC runs at a time.
 | 
						|
#
 | 
						|
$node->pgbench(
 | 
						|
	'--no-vacuum --client=5 --transactions=100',
 | 
						|
	0,
 | 
						|
	[qr{actually processed}],
 | 
						|
	[qr{^$}],
 | 
						|
	'concurrent INSERTs and CIC',
 | 
						|
	{
 | 
						|
		'002_pgbench_concurrent_transaction' => q(
 | 
						|
			BEGIN;
 | 
						|
			INSERT INTO tbl VALUES(0);
 | 
						|
			COMMIT;
 | 
						|
		  ),
 | 
						|
		'002_pgbench_concurrent_transaction_savepoints' => q(
 | 
						|
			BEGIN;
 | 
						|
			SAVEPOINT s1;
 | 
						|
			INSERT INTO tbl VALUES(0);
 | 
						|
			COMMIT;
 | 
						|
		  ),
 | 
						|
		'002_pgbench_concurrent_cic' => q(
 | 
						|
			SELECT pg_try_advisory_lock(42)::integer AS gotlock \gset
 | 
						|
			\if :gotlock
 | 
						|
				DROP INDEX CONCURRENTLY idx;
 | 
						|
				CREATE INDEX CONCURRENTLY idx ON tbl(i);
 | 
						|
				SELECT bt_index_check('idx',true);
 | 
						|
				SELECT pg_advisory_unlock(42);
 | 
						|
			\endif
 | 
						|
		  )
 | 
						|
	});
 | 
						|
 | 
						|
$node->stop;
 | 
						|
done_testing();
 |