=pod
Test cleaning up orphaned temporary relations.
=cut

use strict;
use warnings;
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
use Time::HiRes qw(usleep);

my $node_primary;
my $pid;
my $cmdret;
my $stdout;
my $stderr;
my $ret;

$node_primary = PostgreSQL::Test::Cluster->new('primary');
$node_primary->init(allows_streaming => 1);
$node_primary->start;

$node_primary->safe_psql('postgres',
        qq(ALTER SYSTEM SET autovacuum_naptime to 1; SELECT pg_reload_conf();));

$pid = fork();
if ($pid==0)
{
    print "child process\n";
    $node_primary->psql('postgres',qq(
        CREATE TEMP SEQUENCE tmp_seq;
        CREATE TEMP VIEW tmp_view AS SELECT 1;
        CREATE TEMP TABLE tmp_tbl(id int);
        CREATE TEMP TABLE tmp_ptbl(id int) PARTITION BY RANGE(id);
        CREATE TEMP TABLE tmp_stbl PARTITION OF tmp_ptbl FOR VALUES FROM (1) TO (100);
        SELECT pg_sleep(5);
    ));
    exec "echo bye";
}
print "parent process\n";
usleep(250000); # 250ms

($cmdret, $stdout, $stderr) = $node_primary->psql("postgres",
    qq(SELECT pid FROM pg_stat_activity WHERE backend_type = 'client backend' AND pid !=pg_backend_pid()));
print "\n\n$stdout\n\n";
kill 'SIGKILL', $stdout;
usleep(250000); # 250ms

$node_primary->kill9;
$node_primary->start;

$ret = $node_primary->safe_psql('postgres',qq(show autovacuum;));
is($ret, "on", "check autovacuum");
$ret = $node_primary->safe_psql('postgres',qq(show autovacuum_max_workers;));
is($ret, "3", "check autovacuum_max_workers");
$ret = $node_primary->safe_psql('postgres',qq(show autovacuum_naptime;));
is($ret, "1s", "check autovacuum_naptime");
usleep(1500000); # 1500ms

$ret = $node_primary->safe_psql('postgres',qq(SELECT count(1) FROM pg_views where viewname='tmp_view';));
is($ret, "0", "check tmp_view");
$ret = $node_primary->safe_psql('postgres',qq(SELECT count(1) FROM pg_class where relname='tmp_seq';));
is($ret, "0", "check tmp_seq");
$ret = $node_primary->safe_psql('postgres',qq(SELECT count(1) FROM pg_class where relname='tmp_tbl';));
is($ret, "0", "check tmp_tbl");
$ret = $node_primary->safe_psql('postgres',qq(SELECT count(1) FROM pg_class where relname='tmp_ptbl';));
is($ret, "0", "check tmp_ptbl");
$ret = $node_primary->safe_psql('postgres',qq(SELECT count(1) FROM pg_class where relname='tmp_stbl';));
is($ret, "0", "check tmp_stbl");

is(1, 1, "end");
done_testing();
