mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Respect permissions within logical replication.
Prevent logical replication workers from performing insert, update, delete, truncate, or copy commands on tables unless the subscription owner has permission to do so. Prevent subscription owners from circumventing row-level security by forbidding replication into tables with row-level security policies which the subscription owner is subject to, without regard to whether the policy would ordinarily allow the INSERT, UPDATE, DELETE or TRUNCATE which is being replicated. This seems sufficient for now, as superusers, roles with bypassrls, and target table owners should still be able to replicate despite RLS policies. We can revisit the question of applying row-level security policies on a per-row basis if this restriction proves too severe in practice. Author: Mark Dilger Reviewed-by: Jeff Davis, Andrew Dunstan, Ronan Dunklau Discussion: https://postgr.es/m/9DFC88D3-1300-4DE8-ACBC-4CEF84399A53%40enterprisedb.com
This commit is contained in:
@ -2599,6 +2599,42 @@ sub wait_for_slot_catchup
|
||||
|
||||
=pod
|
||||
|
||||
=item $node->wait_for_log(regexp, offset)
|
||||
|
||||
Waits for the contents of the server log file, starting at the given offset, to
|
||||
match the supplied regular expression. Checks the entire log if no offset is
|
||||
given. Times out after 180 seconds.
|
||||
|
||||
If successful, returns the length of the entire log file, in bytes.
|
||||
|
||||
=cut
|
||||
|
||||
sub wait_for_log
|
||||
{
|
||||
my ($self, $regexp, $offset) = @_;
|
||||
$offset = 0 unless defined $offset;
|
||||
|
||||
my $max_attempts = 180 * 10;
|
||||
my $attempts = 0;
|
||||
|
||||
while ($attempts < $max_attempts)
|
||||
{
|
||||
my $log = PostgreSQL::Test::Utils::slurp_file($self->logfile, $offset);
|
||||
|
||||
return $offset+length($log) if ($log =~ m/$regexp/);
|
||||
|
||||
# Wait 0.1 second before retrying.
|
||||
usleep(100_000);
|
||||
|
||||
$attempts++;
|
||||
}
|
||||
|
||||
# The logs didn't match within 180 seconds. Give up.
|
||||
croak "timed out waiting for match: $regexp";
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item $node->query_hash($dbname, $query, @columns)
|
||||
|
||||
Execute $query on $dbname, replacing any appearance of the string __COLUMNS__
|
||||
|
Reference in New Issue
Block a user