agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Andrew Dunstan <[email protected]>
Subject: [PATCH 2/9] Add adjust_conf method to PostgresNode
Date: Wed, 19 May 2021 08:58:09 -0400
This method will modify or delete an existing line in the config file
rather than simply appending to the file. This makes adjustment of files
for older versions much simpler and more compact.
---
src/test/perl/PostgresNode.pm | 49 ++++++++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index b39e728ae9..6dd1e6ac03 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -19,10 +19,13 @@ PostgresNode - class representing PostgreSQL server instance
# Start the PostgreSQL server
$node->start();
- # Change a setting and restart
+ # Add a setting and restart
$node->append_conf('postgresql.conf', 'hot_standby = on');
$node->restart();
+ # Modify or delete an existing setting
+ $node->adjust_conf('postgresql.conf', 'max_wal_senders', '10');
+
# run a query with psql, like:
# echo 'SELECT 1' | psql -qAXt postgres -v ON_ERROR_STOP=1
$psql_stdout = $node->safe_psql('postgres', 'SELECT 1');
@@ -544,6 +547,50 @@ sub append_conf
=pod
+=item $node->adjust_conf(filename, setting, value, skip_equals)
+
+Modify the named config file setting with the value. If the value is undefined,
+instead delete the setting. If the setting is not present no action is taken.
+
+This will write "$setting = $value\n" in place of the existing line,
+unless skip_equals is true, in which case it will write
+"$setting $value\n". If the value needs to be quoted it is the caller's
+responsibility to do that.
+
+=cut
+
+sub adjust_conf
+{
+ my ($self, $filename, $setting, $value, $skip_equals) = @_;
+
+ my $conffile = $self->data_dir . '/' . $filename;
+
+ my $contents = TestLib::slurp_file($conffile);
+ my @lines = split(/\n/, $contents);
+ my @result;
+ my $eq = $skip_equals ? '' : '= ';
+ foreach my $line (@lines)
+ {
+ if ($line !~ /^$setting\W/)
+ {
+ push(@result, "$line\n");
+ }
+ elsif (defined $value)
+ {
+ push(@result, "$setting $eq$value\n");
+ }
+ }
+ open my $fh, ">", $conffile
+ or croak "could not write \"$conffile\": $!";
+ print $fh @result;
+ close $fh;
+
+ chmod($self->group_access() ? 0640 : 0600, $conffile)
+ or die("unable to set permissions for $conffile");
+}
+
+=pod
+
=item $node->backup(backup_name)
Create a hot backup with B<pg_basebackup> in subdirectory B<backup_name> of
--
2.25.4
--------------2D62665F86298A3CD7493562
Content-Type: text/x-patch; charset=UTF-8;
name="0003-Unify-PostgresNode-s-new-and-get_new_node-methods.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename*0="0003-Unify-PostgresNode-s-new-and-get_new_node-methods.patch"
view thread (5+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH 2/9] Add adjust_conf method to PostgresNode
In-Reply-To: <no-message-id-1861834@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox