Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/scripts/dump-typedefs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ if ! test -f pg_stat_monitor.so; then
exit 1
fi

../postgres/src/tools/find_typedef . >> typedefs.list
../postgres/src/tools/find_typedef . > typedefs.list

# Fetches typedefs list for PostgreSQL core and merges it with typedefs defined in this project.
# https://wiki.postgresql.org/wiki/Running_pgindent_on_non-core_code_or_development_code
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ jobs:
- name: Run pgindent
run: src/.github/scripts/run-pgindent.sh --check --diff

# - name: Run pgperltidy
# run: src/.github/scripts/run-pgperltidy.sh --assert-tidy --standard-error-output
- name: Run pgperltidy
run: src/.github/scripts/run-pgperltidy.sh --assert-tidy --standard-error-output

license:
name: License
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ dkms.conf
.vscode/*

# tools files
typedefs-full.list
typedefs*.list

# test files
results/
Expand Down
4 changes: 2 additions & 2 deletions pg_stat_monitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ typedef enum
PSGM_TRACK_NONE = 0, /* track no statements */
PGSM_TRACK_TOP, /* only top level statements */
PGSM_TRACK_ALL /* all statements, including nested ones */
} PGSMTrackLevel;
} PGSMTrackLevel;
static const struct config_enum_entry track_options[] =
{
{"none", PSGM_TRACK_NONE, false},
Expand All @@ -366,7 +366,7 @@ typedef enum
HISTOGRAM_START,
HISTOGRAM_END,
HISTOGRAM_COUNT
} HistogramTimingType;
} HistogramTimingType;

extern int pgsm_max;
extern int pgsm_query_max_len;
Expand Down
39 changes: 31 additions & 8 deletions t/001_settings_default.pl
Original file line number Diff line number Diff line change
Expand Up @@ -26,33 +26,54 @@
ok($rt_value == 1, "Start Server");

# CREATE EXTENSION and change out file permissions
my ($cmdret, $stdout, $stderr) = $node->psql('postgres', 'CREATE EXTENSION pg_stat_monitor;', extra_params => ['-a']);
my ($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'CREATE EXTENSION pg_stat_monitor;',
extra_params => ['-a']);
ok($cmdret == 0, "CREATE PGSM EXTENSION");
PGSM::append_to_file($stdout);

# Run required commands/queries and dump output to out file.
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT pg_stat_monitor_reset();',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Reset PGSM EXTENSION");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name LIKE '%pg_stat_monitor%';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name LIKE '%pg_stat_monitor%';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT datname, substr(query,0,100) AS query, calls FROM pg_stat_monitor ORDER BY datname, query, calls DESC Limit 20;', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT datname, substr(query,0,100) AS query, calls FROM pg_stat_monitor ORDER BY datname, query, calls DESC Limit 20;',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "SELECT XXX FROM pg_stat_monitor");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name LIKE '%pg_stat_monitor%';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name LIKE '%pg_stat_monitor%';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT pg_stat_monitor_reset();',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Reset PGSM EXTENSION");
PGSM::append_to_file($stdout);

# DROP EXTENSION
$stdout = $node->safe_psql('postgres', 'DROP EXTENSION pg_stat_monitor;', extra_params => ['-a']);
$stdout = $node->safe_psql(
'postgres',
'DROP EXTENSION pg_stat_monitor;',
extra_params => ['-a']);
ok($cmdret == 0, "DROP PGSM EXTENSION");
PGSM::append_to_file($stdout);

Expand All @@ -63,7 +84,9 @@
my $compare = PGSM->compare_results();

# Test/check if expected and result/out file match. If Yes, test passes.
is($compare,0,"Compare Files: $PGSM::expected_filename_with_path and $PGSM::out_filename_with_path files.");
is($compare, 0,
"Compare Files: $PGSM::expected_filename_with_path and $PGSM::out_filename_with_path files."
);

# Done testing for this testcase file.
done_testing();
140 changes: 106 additions & 34 deletions t/002_settings_pgsm_track_planning.pl
Original file line number Diff line number Diff line change
Expand Up @@ -28,56 +28,88 @@
ok($rt_value == 1, "Start Server");

# CREATE EXTENSION and change out file permissions
my ($cmdret, $stdout, $stderr) = $node->psql('postgres', 'CREATE EXTENSION pg_stat_monitor;', extra_params => ['-a']);
my ($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'CREATE EXTENSION pg_stat_monitor;',
extra_params => ['-a']);
ok($cmdret == 0, "CREATE PGSM EXTENSION");
PGSM::append_to_file($stdout);

# Run required commands/queries and dump output to out file.
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT pg_stat_monitor_reset();',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
PGSM::append_to_file($stdout);

# Run 'SELECT *** FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning;' two times and dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT query, calls, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time FROM pg_stat_monitor;', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT query, calls, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time FROM pg_stat_monitor;',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "SELECT FROM PGSM view");
PGSM::append_to_file($stdout);

# Test: total_plan_time is not 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (total_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (total_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'f',"Compare: total_plan_time is not 0).");
is($stdout, 'f', "Compare: total_plan_time is not 0).");

# Test: min_plan_time is not 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (min_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (min_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'f',"Compare: min_plan_time is not 0).");
is($stdout, 'f', "Compare: min_plan_time is not 0).");

# Test: max_plan_time is not 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (max_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (max_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'f',"Compare: max_plan_time is not 0).");
is($stdout, 'f', "Compare: max_plan_time is not 0).");

# Test: mean_plan_time is not 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (mean_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (mean_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'f',"Compare: mean_plan_time is not 0).");
is($stdout, 'f', "Compare: mean_plan_time is not 0).");

# Test: stddev_plan_time is not 0
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (stddev_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
#trim($stdout);
#is($stdout,'f',"Compare: stddev_plan_time is not 0).");

# Test: total_plan_time = min_plan_time + max_plan_time
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (round(total_plan_time::numeric,3) = round(min_plan_time::numeric + max_plan_time::numeric,3)) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (round(total_plan_time::numeric,3) = round(min_plan_time::numeric + max_plan_time::numeric,3)) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: (round(total_plan_time::numeric,3) = round(min_plan_time::numeric + max_plan_time::numeric,3)).");
is($stdout, 't',
"Compare: (round(total_plan_time::numeric,3) = round(min_plan_time::numeric + max_plan_time::numeric,3))."
);

# Test: mean_plan_time = total_plan_time/2
#($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (round(mean_plan_time::numeric,3) = round((total_plan_time/2)::numeric,3)) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
Expand All @@ -90,67 +122,107 @@
#is($stdout,'t',"Compare mean_plan_time: (round(stddev_plan_time::numeric,3) = round(mean_plan_time::numeric - min_plan_time::numeric,3)).");

# Dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT substr(query, 0,100) AS query, calls, total_plan_time, min_plan_time,max_plan_time,mean_plan_time,stddev_plan_time FROM pg_stat_monitor ORDER BY query;', extra_params => ['-a','-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT substr(query, 0,100) AS query, calls, total_plan_time, min_plan_time,max_plan_time,mean_plan_time,stddev_plan_time FROM pg_stat_monitor ORDER BY query;',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
PGSM::append_to_file($stdout);

# Disable pgsm_track_planning
$node->append_conf('postgresql.conf', "pg_stat_monitor.pgsm_track_planning = 'no'\n");
$node->append_conf('postgresql.conf',
"pg_stat_monitor.pgsm_track_planning = 'no'\n");
$node->restart();

# Dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT pg_stat_monitor_reset();',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Reset PGSM EXTENSION");
PGSM::append_to_file($stdout);

# Run 'SELECT *** FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning;' two times and dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', "SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';", extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
"SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name = 'pg_stat_monitor.pgsm_track_planning';",
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Print PGSM EXTENSION Settings");
PGSM::append_to_file($stdout);

($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT query, calls, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time FROM pg_stat_monitor;', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT query, calls, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time FROM pg_stat_monitor;',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "SELECT FROM PGSM view");
PGSM::append_to_file($stdout);

# Test: total_plan_time is 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (total_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (total_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: total_plan_time is 0).");
is($stdout, 't', "Compare: total_plan_time is 0).");

# Test: min_plan_time is 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (min_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (min_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: min_plan_time is 0).");
is($stdout, 't', "Compare: min_plan_time is 0).");

# Test: max_plan_time is 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (max_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (max_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: max_plan_time is 0).");
is($stdout, 't', "Compare: max_plan_time is 0).");

# Test: mean_plan_time is 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (mean_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (mean_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: mean_plan_time is 0).");
is($stdout, 't', "Compare: mean_plan_time is 0).");

# Test: stddev_plan_time is 0
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT (stddev_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;', extra_params => ['-Pformat=unaligned','-Ptuples_only=on']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT (stddev_plan_time = 0) FROM pg_stat_monitor WHERE calls = 2;',
extra_params => [ '-Pformat=unaligned', '-Ptuples_only=on' ]);
trim($stdout);
is($stdout,'t',"Compare: stddev_plan_time is 0).");
is($stdout, 't', "Compare: stddev_plan_time is 0).");

# Dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT substr(query, 0,100) AS query, calls, total_plan_time, min_plan_time,max_plan_time,mean_plan_time,stddev_plan_time FROM pg_stat_monitor ORDER BY query;', extra_params => ['-a','-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT substr(query, 0,100) AS query, calls, total_plan_time, min_plan_time,max_plan_time,mean_plan_time,stddev_plan_time FROM pg_stat_monitor ORDER BY query;',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
PGSM::append_to_file($stdout);

# Dump output to out file
($cmdret, $stdout, $stderr) = $node->psql('postgres', 'SELECT pg_stat_monitor_reset();', extra_params => ['-a', '-Pformat=aligned','-Ptuples_only=off']);
($cmdret, $stdout, $stderr) = $node->psql(
'postgres',
'SELECT pg_stat_monitor_reset();',
extra_params => [ '-a', '-Pformat=aligned', '-Ptuples_only=off' ]);
ok($cmdret == 0, "Reset PGSM EXTENSION");
PGSM::append_to_file($stdout);

# DROP EXTENSION
$stdout = $node->safe_psql('postgres', 'DROP EXTENSION pg_stat_monitor;', extra_params => ['-a']);
$stdout = $node->safe_psql(
'postgres',
'DROP EXTENSION pg_stat_monitor;',
extra_params => ['-a']);
ok($cmdret == 0, "DROP PGSM EXTENSION");
PGSM::append_to_file($stdout);

Expand Down
Loading
Loading