Tom Lane <t...@sss.pgh.pa.us> writes: > I wonder if it'd be a good idea to convert > auto_explain's TAP test to load auto_explain via session_preload_libraries > instead of shared_preload_libraries, and then pass in the settings for > each test via PGOPTIONS instead of constantly rewriting postgresql.conf.
That whole config-file rewriting did feel a bit icky when I added more tests recently, but I completely forgot about PGOPTIONS and -c. Something like the attached is indeed much nicer. - ilmari
>From c9d6850e89ff95df1034c13ca9c10aaf1cf0f02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilm...@ilmari.org> Date: Mon, 25 Jul 2022 16:23:09 +0100 Subject: [PATCH] Use PGOPTIONS and session_preload_libraries in auto_explain tests Instead of constantly rewriting postgresql.conf. Also change the from shared_preload_libraries to session_preload_libraries to givesome coverage of extensions providing custom GUCs. --- contrib/auto_explain/t/001_auto_explain.pl | 24 +++------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/contrib/auto_explain/t/001_auto_explain.pl b/contrib/auto_explain/t/001_auto_explain.pl index 1d952fb54d..b86761919b 100644 --- a/contrib/auto_explain/t/001_auto_explain.pl +++ b/contrib/auto_explain/t/001_auto_explain.pl @@ -16,38 +16,20 @@ sub query_log my ($node, $sql, $params) = @_; $params ||= {}; - if (keys %$params) - { - for my $key (keys %$params) - { - $node->append_conf('postgresql.conf', "$key = $params->{$key}\n"); - } - $node->reload; - } + local $ENV{PGOPTIONS} = join " ", map { "-c $_=$params->{$_}" } keys %$params; my $log = $node->logfile(); my $offset = -s $log; $node->safe_psql("postgres", $sql); - my $log_contents = slurp_file($log, $offset); - - if (keys %$params) - { - for my $key (keys %$params) - { - $node->adjust_conf('postgresql.conf', $key, undef); - } - $node->reload; - } - - return $log_contents; + return slurp_file($log, $offset); } my $node = PostgreSQL::Test::Cluster->new('main'); $node->init; $node->append_conf('postgresql.conf', - "shared_preload_libraries = 'auto_explain'"); + "session_preload_libraries = 'auto_explain'"); $node->append_conf('postgresql.conf', "auto_explain.log_min_duration = 0"); $node->append_conf('postgresql.conf', "auto_explain.log_analyze = on"); $node->start; -- 2.30.2