mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
Per discussion, "location" is a rather vague term that could refer to multiple concepts. "LSN" is an unambiguous term for WAL locations and should be preferred. Some function names, view column names, and function output argument names used "lsn" already, but others used "location", as well as yet other terms such as "wal_position". Since we've already renamed a lot of things in this area from "xlog" to "wal" for v10, we may as well incur a bit more compatibility pain and make these names all consistent. David Rowley, minor additional docs hacking by me Discussion: https://postgr.es/m/CAKJS1f8O0njDKe8ePFQ-LK5-EjwThsDws6ohJ-+c6nWK+oUxtg@mail.gmail.com
65 lines
2.0 KiB
Perl
65 lines
2.0 KiB
Perl
# Test simple scenario involving a standby
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use TestLib;
|
|
use Test::More tests => 4;
|
|
use PostgresNode;
|
|
|
|
my $bkplabel = 'backup';
|
|
my $master = get_new_node('master');
|
|
$master->init(allows_streaming => 1);
|
|
|
|
$master->append_conf(
|
|
'postgresql.conf', qq{
|
|
track_commit_timestamp = on
|
|
max_wal_senders = 5
|
|
});
|
|
$master->start;
|
|
$master->backup($bkplabel);
|
|
|
|
my $standby = get_new_node('standby');
|
|
$standby->init_from_backup($master, $bkplabel, has_streaming => 1);
|
|
$standby->start;
|
|
|
|
for my $i (1 .. 10)
|
|
{
|
|
$master->safe_psql('postgres', "create table t$i()");
|
|
}
|
|
my $master_ts = $master->safe_psql('postgres',
|
|
qq{SELECT ts.* FROM pg_class, pg_xact_commit_timestamp(xmin) AS ts WHERE relname = 't10'}
|
|
);
|
|
my $master_lsn =
|
|
$master->safe_psql('postgres', 'select pg_current_wal_lsn()');
|
|
$standby->poll_query_until('postgres',
|
|
qq{SELECT '$master_lsn'::pg_lsn <= pg_last_wal_replay_lsn()})
|
|
or die "slave never caught up";
|
|
|
|
my $standby_ts = $standby->safe_psql('postgres',
|
|
qq{select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = 't10'}
|
|
);
|
|
is($master_ts, $standby_ts, "standby gives same value as master");
|
|
|
|
$master->append_conf('postgresql.conf', 'track_commit_timestamp = off');
|
|
$master->restart;
|
|
$master->safe_psql('postgres', 'checkpoint');
|
|
$master_lsn =
|
|
$master->safe_psql('postgres', 'select pg_current_wal_lsn()');
|
|
$standby->poll_query_until('postgres',
|
|
qq{SELECT '$master_lsn'::pg_lsn <= pg_last_wal_replay_lsn()})
|
|
or die "slave never caught up";
|
|
$standby->safe_psql('postgres', 'checkpoint');
|
|
|
|
# This one should raise an error now
|
|
my ($ret, $standby_ts_stdout, $standby_ts_stderr) = $standby->psql('postgres',
|
|
'select ts.* from pg_class, pg_xact_commit_timestamp(xmin) ts where relname = \'t10\''
|
|
);
|
|
is($ret, 3, 'standby errors when master turned feature off');
|
|
is($standby_ts_stdout, '',
|
|
"standby gives no value when master turned feature off");
|
|
like(
|
|
$standby_ts_stderr,
|
|
qr/could not get commit timestamp data/,
|
|
'expected error when master turned feature off');
|