mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Add new simple TAP test for tablespaces.
The tablespace tests in the main regression tests have been changed to use "in-place" tablespaces, so that they work when streamed to a replica on the same host. Add a new TAP test that exercises tablespaces with absolute paths, for coverage. Reviewed-by: Andres Freund <andres@anarazel.de> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CA%2BhUKGKpRWQ9SxdxxDmTBCJoR0YnFpMBe7kyzY8SUQk%2BHeskxg%40mail.gmail.com
This commit is contained in:
parent
d6d317dbf6
commit
d1511fe1b0
96
src/test/modules/test_misc/t/002_tablespace.pl
Normal file
96
src/test/modules/test_misc/t/002_tablespace.pl
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Simple tablespace tests that can't be replicated on the same host
|
||||||
|
# due to the use of absolute paths, so we keep them out of the regular
|
||||||
|
# regression tests.
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use PostgreSQL::Test::Cluster;
|
||||||
|
use PostgreSQL::Test::Utils;
|
||||||
|
use Test::More tests => 20;
|
||||||
|
|
||||||
|
my $node = PostgreSQL::Test::Cluster->new('main');
|
||||||
|
$node->init;
|
||||||
|
$node->start;
|
||||||
|
|
||||||
|
# Create a couple of directories to use as tablespaces.
|
||||||
|
my $TS1_LOCATION = $node->basedir() . "/ts1";
|
||||||
|
mkdir($TS1_LOCATION);
|
||||||
|
my $TS2_LOCATION = $node->basedir() . "/ts2";
|
||||||
|
mkdir($TS2_LOCATION);
|
||||||
|
|
||||||
|
my $result;
|
||||||
|
|
||||||
|
# Create a tablespace with an absolute path
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'");
|
||||||
|
ok($result == 0, 'create tablespace with absolute path');
|
||||||
|
|
||||||
|
# Can't create a tablespace where there is one already
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'");
|
||||||
|
ok($result != 0, 'clobber tablespace with absolute path');
|
||||||
|
|
||||||
|
# Create table in it
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLE t () TABLESPACE regress_ts1");
|
||||||
|
ok($result == 0, 'create table in tablespace with absolute path');
|
||||||
|
|
||||||
|
# Can't drop a tablespace that still has a table in it
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"DROP TABLESPACE regress_ts1");
|
||||||
|
ok($result != 0, 'drop tablespace with absolute path');
|
||||||
|
|
||||||
|
# Drop the table
|
||||||
|
$result = $node->psql('postgres', "DROP TABLE t");
|
||||||
|
ok($result == 0, 'drop table in tablespace with absolute path');
|
||||||
|
|
||||||
|
# Drop the tablespace
|
||||||
|
$result = $node->psql('postgres', "DROP TABLESPACE regress_ts1");
|
||||||
|
ok($result == 0, 'drop tablespace with absolute path');
|
||||||
|
|
||||||
|
# Create two absolute tablespaces and two in-place tablespaces, so we can
|
||||||
|
# testing various kinds of tablespace moves.
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLESPACE regress_ts1 LOCATION '$TS1_LOCATION'");
|
||||||
|
ok($result == 0, 'create tablespace 1 with absolute path');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLESPACE regress_ts2 LOCATION '$TS2_LOCATION'");
|
||||||
|
ok($result == 0, 'create tablespace 2 with absolute path');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"SET allow_in_place_tablespaces=on; CREATE TABLESPACE regress_ts3 LOCATION ''");
|
||||||
|
ok($result == 0, 'create tablespace 3 with in-place directory');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"SET allow_in_place_tablespaces=on; CREATE TABLESPACE regress_ts4 LOCATION ''");
|
||||||
|
ok($result == 0, 'create tablespace 4 with in-place directory');
|
||||||
|
|
||||||
|
# Create a table and test moving between absolute and in-place tablespaces
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"CREATE TABLE t () TABLESPACE regress_ts1");
|
||||||
|
ok($result == 0, 'create table in tablespace 1');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"ALTER TABLE t SET tablespace regress_ts2");
|
||||||
|
ok($result == 0, 'move table abs->abs');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"ALTER TABLE t SET tablespace regress_ts3");
|
||||||
|
ok($result == 0, 'move table abs->in-place');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"ALTER TABLE t SET tablespace regress_ts4");
|
||||||
|
ok($result == 0, 'move table in-place->in-place');
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"ALTER TABLE t SET tablespace regress_ts1");
|
||||||
|
ok($result == 0, 'move table in-place->abs');
|
||||||
|
|
||||||
|
# Drop everything
|
||||||
|
$result = $node->psql('postgres',
|
||||||
|
"DROP TABLE t");
|
||||||
|
ok($result == 0, 'create table in tablespace 1');
|
||||||
|
$result = $node->psql('postgres', "DROP TABLESPACE regress_ts1");
|
||||||
|
ok($result == 0, 'drop tablespace 1');
|
||||||
|
$result = $node->psql('postgres', "DROP TABLESPACE regress_ts2");
|
||||||
|
ok($result == 0, 'drop tablespace 2');
|
||||||
|
$result = $node->psql('postgres', "DROP TABLESPACE regress_ts3");
|
||||||
|
ok($result == 0, 'drop tablespace 3');
|
||||||
|
$result = $node->psql('postgres', "DROP TABLESPACE regress_ts4");
|
||||||
|
ok($result == 0, 'drop tablespace 4');
|
||||||
|
|
||||||
|
$node->stop;
|
Loading…
x
Reference in New Issue
Block a user