From: Justin Pryzby <pryzby@telsasoft.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: peter.eisentraut@enterprisedb.com
Cc: pgsql-hackers@lists.postgresql.org
Cc: bruce@momjian.us
Cc: tgl@sss.pgh.pa.us
Subject: Re: GUC flags
Date: Mon, 24 Jan 2022 19:07:29 -0600
Message-ID: <20220125010729.GC23027@telsasoft.com> (raw)
In-Reply-To: <20220106053641.GW14051@telsasoft.com>
References: <YbG7sp+2YEYgbY0D@paquier.xyz>
<20211209155322.GG17618@telsasoft.com>
<20211229023240.GM24477@telsasoft.com>
<20220105.114757.369416916044334409.horikyota.ntt@gmail.com>
<20220105030648.GE14051@telsasoft.com>
<YdUp118ekFgGiixT@paquier.xyz>
<20220105235517.GR14051@telsasoft.com>
<YdZ7zCymonPV4//X@paquier.xyz>
<20220106053641.GW14051@telsasoft.com>
On Wed, Jan 05, 2022 at 11:36:41PM -0600, Justin Pryzby wrote:
> On Thu, Jan 06, 2022 at 02:19:08PM +0900, Michael Paquier wrote:
> > > + initStringInfo(&ret);
> > > + appendStringInfoChar(&ret, '{');
> > > +
> > > + if (flags & GUC_NO_SHOW_ALL)
> > > + appendStringInfo(&ret, "NO_SHOW_ALL,");
> > > + if (flags & GUC_NO_RESET_ALL)
> > > + appendStringInfo(&ret, "NO_RESET_ALL,");
> > > + if (flags & GUC_NOT_IN_SAMPLE)
> > > + appendStringInfo(&ret, "NOT_IN_SAMPLE,");
> > > + if (flags & GUC_EXPLAIN)
> > > + appendStringInfo(&ret, "EXPLAIN,");
> > > + if (flags & GUC_RUNTIME_COMPUTED)
> > > + appendStringInfo(&ret, "RUNTIME_COMPUTED,");
> > > +
> > > + /* Remove trailing comma, if any */
> > > + if (ret.len > 1)
> > > + ret.data[--ret.len] = '\0';
> >
> > The way of building the text array is incorrect here. See
I think you'll find that this is how it's done elsewhere in postgres.
In the frontend, see appendPQExpBufferChar and appendPGArray and 3e6e86abc.
On the backend, see: git grep -F "'{'" |grep -w appendStringInfoChar
I updated the patch with a regex to accommodate GUCs without '=', as needed
since f47ed79cc8.
--
Justin
Attachments:
[text/x-diff] 0001-check_guc-fix-absurd-number-of-false-positives.patch (3.9K, ../20220125010729.GC23027@telsasoft.com/2-0001-check_guc-fix-absurd-number-of-false-positives.patch)
download | inline diff:
From eee345a1685a04eeb0fedf3ba9ad0fc6fe6e3d81 Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Sun, 5 Dec 2021 23:22:04 -0600
Subject: [PATCH 1/2] check_guc: fix absurd number of false positives
Avoid false positives;
Avoid various assumptions;
Avoid list of exceptions;
Simplify shell/awk/sed/grep;
This requires GNU awk for RS as a regex.
---
src/backend/utils/misc/check_guc | 69 +++++---------------------------
1 file changed, 10 insertions(+), 59 deletions(-)
diff --git a/src/backend/utils/misc/check_guc b/src/backend/utils/misc/check_gucindex b171ef0e4ff..323ca13191b 100755--- a/src/backend/utils/misc/check_guc+++ b/src/backend/utils/misc/check_guc@@ -1,78 +1,29 @@-#!/bin/sh+#! /bin/sh+set -e-## currently, this script makes a lot of assumptions:+## this script makes some assumptions about the formatting of files it parses.
## in postgresql.conf.sample:
## 1) the valid config settings may be preceded by a '#', but NOT '# '
## (we use this to skip comments)
-## 2) the valid config settings will be followed immediately by ' ='-## (at least one space preceding the '=')-## in guc.c:-## 3) the options have PGC_ on the same line as the option-## 4) the options have '{' on the same line as the option--## Problems-## 1) Don't know what to do with TRANSACTION ISOLATION LEVEL--## if an option is valid but shows up in only one file (guc.c but not-## postgresql.conf.sample), it should be listed here so that it-## can be ignored-INTENTIONALLY_NOT_INCLUDED="debug_deadlocks in_hot_standby \-is_superuser lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time \-pre_auth_delay role seed server_encoding server_version server_version_num \-session_authorization trace_lock_oidmin trace_lock_table trace_locks trace_lwlocks \-trace_notify trace_userlocks transaction_isolation transaction_read_only \-zero_damaged_pages"
### What options are listed in postgresql.conf.sample, but don't appear
### in guc.c?
-# grab everything that looks like a setting and convert it to lower case-SETTINGS=`grep ' =' postgresql.conf.sample |-grep -v '^# ' | # strip comments-sed -e 's/^#//' |-awk '{print $1}'`--SETTINGS=`echo "$SETTINGS" | tr 'A-Z' 'a-z'`+# grab everything that looks like a setting+SETTINGS=`sed '/^#[[:alnum:]]/!d; s/^#//; s/ =.*//; /^include/d' postgresql.conf.sample`
for i in $SETTINGS ; do
- hidden=0
## it sure would be nice to replace this with an sql "not in" statement
- ## it doesn't seem to make sense to have things in .sample and not in guc.c-# for hidethis in $INTENTIONALLY_NOT_INCLUDED ; do-# if [ "$hidethis" = "$i" ] ; then-# hidden=1-# fi-# done- if [ "$hidden" -eq 0 ] ; then- grep -i '"'$i'"' guc.c > /dev/null- if [ $? -ne 0 ] ; then- echo "$i seems to be missing from guc.c";- fi;- fi+ grep -i "\"$i\"" guc.c >/dev/null ||+ echo "$i seems to be missing from guc.c";
done
### What options are listed in guc.c, but don't appear
### in postgresql.conf.sample?
# grab everything that looks like a setting and convert it to lower case
--SETTINGS=`grep '{.* PGC_' guc.c | awk '{print $1}' | \- sed -e 's/{//g' -e 's/"//g' -e 's/,//'`--SETTINGS=`echo "$SETTINGS" | tr 'A-Z' 'a-z'`-+SETTINGS=`gawk -F '[",]' 'BEGIN{RS="\n\t\\\\{\n"} /",[[:space:]]*PGC_.*.*gettext_noop/ && !/NOT_IN_SAMPLE/{print tolower($2)}' guc.c`
for i in $SETTINGS ; do
- hidden=0- ## it sure would be nice to replace this with an sql "not in" statement- for hidethis in $INTENTIONALLY_NOT_INCLUDED ; do- if [ "$hidethis" = "$i" ] ; then- hidden=1- fi- done- if [ "$hidden" -eq 0 ] ; then- grep -i '#'$i' ' postgresql.conf.sample > /dev/null- if [ $? -ne 0 ] ; then- echo "$i seems to be missing from postgresql.conf.sample";- fi- fi+ grep "#$i " postgresql.conf.sample >/dev/null ||+ echo "$i seems to be missing from postgresql.conf.sample";
done
--
2.17.1
[text/x-diff] 0002-Expose-GUC-flags-in-SQL-function-retire-.-check_guc.patch (15.9K, ../20220125010729.GC23027@telsasoft.com/3-0002-Expose-GUC-flags-in-SQL-function-retire-.-check_guc.patch)
download | inline diff:
From f475b7eced95bb792c4509aa87373348b375742a Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Wed, 8 Dec 2021 12:06:35 -0600
Subject: [PATCH 2/2] Expose GUC flags in SQL function; retire ./check_guc
---
src/backend/catalog/system_views.sql | 19 ++++-
src/backend/utils/misc/check_guc | 29 -------
src/backend/utils/misc/guc.c | 37 +++++++-
src/include/catalog/pg_proc.dat | 6 +-
src/test/regress/expected/guc.out | 122 +++++++++++++++++++++++++++
src/test/regress/expected/rules.out | 2 +-
src/test/regress/sql/guc.sql | 72 ++++++++++++++++
7 files changed, 252 insertions(+), 35 deletions(-)
delete mode 100755 src/backend/utils/misc/check_guc
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sqlindex 3cb69b1f87b..cdae0616bdd 100644--- a/src/backend/catalog/system_views.sql+++ b/src/backend/catalog/system_views.sql@@ -582,7 +582,24 @@ FROM
JOIN pg_authid rol ON l.classoid = rol.tableoid AND l.objoid = rol.oid;
CREATE VIEW pg_settings AS
- SELECT * FROM pg_show_all_settings() AS A;+ SELECT a.name,+ a.setting,+ a.unit,+ a.category,+ a.short_desc,+ a.extra_desc,+ a.context,+ a.vartype,+ a.source,+ a.min_val,+ a.max_val,+ a.enumvals,+ a.boot_val,+ a.reset_val,+ a.sourcefile,+ a.sourceline,+ a.pending_restart+ FROM pg_show_all_settings() AS A;
CREATE RULE pg_settings_u AS
ON UPDATE TO pg_settings
diff --git a/src/backend/utils/misc/check_guc b/src/backend/utils/misc/check_gucdeleted file mode 100755index 323ca13191b..00000000000--- a/src/backend/utils/misc/check_guc+++ /dev/null@@ -1,29 +0,0 @@-#! /bin/sh-set -e--## this script makes some assumptions about the formatting of files it parses.-## in postgresql.conf.sample:-## 1) the valid config settings may be preceded by a '#', but NOT '# '-## (we use this to skip comments)--### What options are listed in postgresql.conf.sample, but don't appear-### in guc.c?--# grab everything that looks like a setting-SETTINGS=`sed '/^#[[:alnum:]]/!d; s/^#//; s/ =.*//; /^include/d' postgresql.conf.sample`--for i in $SETTINGS ; do- ## it sure would be nice to replace this with an sql "not in" statement- grep -i "\"$i\"" guc.c >/dev/null ||- echo "$i seems to be missing from guc.c";-done--### What options are listed in guc.c, but don't appear-### in postgresql.conf.sample?--# grab everything that looks like a setting and convert it to lower case-SETTINGS=`gawk -F '[",]' 'BEGIN{RS="\n\t\\\\{\n"} /",[[:space:]]*PGC_.*.*gettext_noop/ && !/NOT_IN_SAMPLE/{print tolower($2)}' guc.c`-for i in $SETTINGS ; do- grep "#$i " postgresql.conf.sample >/dev/null ||- echo "$i seems to be missing from postgresql.conf.sample";-donediff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.cindex 4c94f09c645..2cb84d68610 100644--- a/src/backend/utils/misc/guc.c+++ b/src/backend/utils/misc/guc.c@@ -9634,6 +9634,36 @@ GetConfigOptionByName(const char *name, const char **varname, bool missing_ok)
return _ShowOption(record, true);
}
+/*+ * Return an text[] array of the given flags (or a useful subset?) XXX+ */+static char *+get_flags_array_text(int flags)+{+ StringInfoData ret;++ initStringInfo(&ret);+ appendStringInfoChar(&ret, '{');++ if (flags & GUC_NO_SHOW_ALL)+ appendStringInfo(&ret, "NO_SHOW_ALL,");+ if (flags & GUC_NO_RESET_ALL)+ appendStringInfo(&ret, "NO_RESET_ALL,");+ if (flags & GUC_NOT_IN_SAMPLE)+ appendStringInfo(&ret, "NOT_IN_SAMPLE,");+ if (flags & GUC_EXPLAIN)+ appendStringInfo(&ret, "EXPLAIN,");+ if (flags & GUC_RUNTIME_COMPUTED)+ appendStringInfo(&ret, "RUNTIME_COMPUTED,");++ /* Remove trailing comma, if any */+ if (ret.len > 1)+ ret.data[--ret.len] = '\0';++ appendStringInfoChar(&ret, '}');+ return ret.data;+}+
/*
* Return GUC variable value by variable number; optionally return canonical
* form of name. Return value is palloc'd.
@@ -9861,6 +9891,9 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
}
values[16] = (conf->status & GUC_PENDING_RESTART) ? "t" : "f";
++ /* flags */+ values[17] = get_flags_array_text(conf->flags);
}
/*
@@ -9916,7 +9949,7 @@ show_config_by_name_missing_ok(PG_FUNCTION_ARGS)
* show_all_settings - equiv to SHOW ALL command but implemented as
* a Table Function.
*/
-#define NUM_PG_SETTINGS_ATTS 17+#define NUM_PG_SETTINGS_ATTS 18
Datum
show_all_settings(PG_FUNCTION_ARGS)
@@ -9978,6 +10011,8 @@ show_all_settings(PG_FUNCTION_ARGS)
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 17, "pending_restart",
BOOLOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 18, "flags",+ TEXTARRAYOID, -1, 0);
/*
* Generate attribute metadata needed later to produce tuples from raw
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.datindex 0859dc81cac..1d7f6b4d376 100644--- a/src/include/catalog/pg_proc.dat+++ b/src/include/catalog/pg_proc.dat@@ -6092,9 +6092,9 @@
{ oid => '2084', descr => 'SHOW ALL as a function',
proname => 'pg_show_all_settings', prorows => '1000', proretset => 't',
provolatile => 's', prorettype => 'record', proargtypes => '',
- proallargtypes => '{text,text,text,text,text,text,text,text,text,text,text,_text,text,text,text,int4,bool}',- proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',- proargnames => '{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart}',+ proallargtypes => '{text,text,text,text,text,text,text,text,text,text,text,_text,text,text,text,int4,bool,_text}',+ proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',+ proargnames => '{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart,flags}',
prosrc => 'show_all_settings' },
{ oid => '3329', descr => 'show config file settings',
proname => 'pg_show_all_file_settings', prorows => '1000', proretset => 't',
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.outindex 59da91ff04d..5f15b5680be 100644--- a/src/test/regress/expected/guc.out+++ b/src/test/regress/expected/guc.out@@ -813,3 +813,125 @@ set default_with_oids to f;
-- Should not allow to set it to true.
set default_with_oids to t;
ERROR: tables declared WITH OIDS are not supported
+--+-- Test GUC categories and flags.+--+CREATE TABLE pg_settings_flags AS SELECT name, category,+ 'NO_SHOW_ALL' =ANY(flags) AS no_show_all,+ 'NO_RESET_ALL' =ANY(flags) AS no_reset_all,+ 'NOT_IN_SAMPLE' =ANY(flags) AS not_in_sample,+ 'EXPLAIN' =ANY(flags) AS guc_explain,+ 'COMPUTED' =ANY(flags) AS guc_computed+ FROM pg_show_all_settings();+-- test that GUCS are in postgresql.conf+SELECT lower(name) FROM pg_settings_flags WHERE NOT not_in_sample EXCEPT+SELECT regexp_replace(ln, '^#?([_[:alpha:]]+) (= .*|[^ ]*$)', '\1') AS guc+FROM (SELECT regexp_split_to_table(pg_read_file('postgresql.conf'), '\n') AS ln) conf+WHERE ln ~ '^#?[[:alpha:]]'+ORDER BY 1;+ lower +-----------------------------+ config_file+ plpgsql.check_asserts+ plpgsql.extra_errors+ plpgsql.extra_warnings+ plpgsql.print_strict_params+ plpgsql.variable_conflict+(6 rows)++-- test that lines in postgresql.conf that look like GUCs are GUCs+SELECT regexp_replace(ln, '^#?([_[:alpha:]]+) (= .*|[^ ]*$)', '\1') AS guc+FROM (SELECT regexp_split_to_table(pg_read_file('postgresql.conf'), '\n') AS ln) conf+WHERE ln ~ '^#?[[:alpha:]]'+EXCEPT SELECT lower(name) FROM pg_settings_flags WHERE NOT not_in_sample+ORDER BY 1;+ guc +-------------------+ include+ include_dir+ include_if_exists+(3 rows)++-- test that section:DEVELOPER GUCs are flagged GUC_NOT_IN_SAMPLE:+SELECT * FROM pg_settings_flags+WHERE category='Developer Options' AND NOT not_in_sample+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------+----------+-------------+--------------+---------------+-------------+--------------+(0 rows)++-- Maybe the converse:+SELECT * FROM pg_settings_flags+WHERE category NOT IN ('Developer Options', 'Preset Options') AND not_in_sample+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------------------------+-------------------------------------------------+-------------+--------------+---------------+-------------+--------------+ application_name | Reporting and Logging / What to Log | f | f | t | f | f+ transaction_deferrable | Client Connection Defaults / Statement Behavior | f | t | t | f | f+ transaction_isolation | Client Connection Defaults / Statement Behavior | f | t | t | f | f+ transaction_read_only | Client Connection Defaults / Statement Behavior | f | t | t | f | f+(4 rows)++-- Most Query Tuning GUCs are flagged as EXPLAIN:+SELECT * FROM pg_settings_flags+WHERE category ~ '^Query Tuning' AND NOT guc_explain+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +---------------------------+--------------------------------------+-------------+--------------+---------------+-------------+--------------+ default_statistics_target | Query Tuning / Other Planner Options | f | f | f | f | f+(1 row)++-- Maybe the converse:+SELECT * FROM pg_settings_flags+WHERE guc_explain AND NOT category ~ '^Query Tuning|^Resource Usage'+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +---------------------+-------------------------------------------------+-------------+--------------+---------------+-------------+--------------+ force_parallel_mode | Developer Options | f | f | t | t | f+ search_path | Client Connection Defaults / Statement Behavior | f | f | f | t | f+(2 rows)++-- GUCs flagged RUNTIME are Preset+SELECT * FROM pg_settings_flags+WHERE guc_computed AND NOT category='Preset Options'+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------+----------+-------------+--------------+---------------+-------------+--------------+(0 rows)++-- PRESET GUCs are flagged NOT_IN_SAMPLE+SELECT * FROM pg_settings_flags+WHERE category='Preset Options' AND NOT not_in_sample+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------+----------+-------------+--------------+---------------+-------------+--------------+(0 rows)++-- NO_SHOW_ALL implies NO_RESET_ALL:+SELECT * FROM pg_settings_flags+WHERE no_show_all AND NOT no_reset_all+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------+----------+-------------+--------------+---------------+-------------+--------------+(0 rows)++-- Usually the converse:+SELECT * FROM pg_settings_flags+WHERE NOT no_show_all AND no_reset_all+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------------------------+-------------------------------------------------+-------------+--------------+---------------+-------------+--------------+ transaction_deferrable | Client Connection Defaults / Statement Behavior | f | t | t | f | f+ transaction_isolation | Client Connection Defaults / Statement Behavior | f | t | t | f | f+ transaction_read_only | Client Connection Defaults / Statement Behavior | f | t | t | f | f+(3 rows)++-- NO_SHOW_ALL implies NOT_IN_SAMPLE:+SELECT * FROM pg_settings_flags+WHERE no_show_all AND NOT not_in_sample+ORDER BY 1;+ name | category | no_show_all | no_reset_all | not_in_sample | guc_explain | guc_computed +------+----------+-------------+--------------+---------------+-------------+--------------+(0 rows)++DROP TABLE pg_settings_flags;diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.outindex d652f7b5fb4..833c1fab6c7 100644--- a/src/test/regress/expected/rules.out+++ b/src/test/regress/expected/rules.out@@ -1725,7 +1725,7 @@ pg_settings| SELECT a.name,
a.sourcefile,
a.sourceline,
a.pending_restart
- FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline, pending_restart);+ FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline, pending_restart, flags);
pg_shadow| SELECT pg_authid.rolname AS usename,
pg_authid.oid AS usesysid,
pg_authid.rolcreatedb AS usecreatedb,
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sqlindex c39c11388d5..c3898ae690f 100644--- a/src/test/regress/sql/guc.sql+++ b/src/test/regress/sql/guc.sql@@ -311,3 +311,75 @@ reset check_function_bodies;
set default_with_oids to f;
-- Should not allow to set it to true.
set default_with_oids to t;
++--+-- Test GUC categories and flags.+--+CREATE TABLE pg_settings_flags AS SELECT name, category,+ 'NO_SHOW_ALL' =ANY(flags) AS no_show_all,+ 'NO_RESET_ALL' =ANY(flags) AS no_reset_all,+ 'NOT_IN_SAMPLE' =ANY(flags) AS not_in_sample,+ 'EXPLAIN' =ANY(flags) AS guc_explain,+ 'COMPUTED' =ANY(flags) AS guc_computed+ FROM pg_show_all_settings();++-- test that GUCS are in postgresql.conf+SELECT lower(name) FROM pg_settings_flags WHERE NOT not_in_sample EXCEPT+SELECT regexp_replace(ln, '^#?([_[:alpha:]]+) (= .*|[^ ]*$)', '\1') AS guc+FROM (SELECT regexp_split_to_table(pg_read_file('postgresql.conf'), '\n') AS ln) conf+WHERE ln ~ '^#?[[:alpha:]]'+ORDER BY 1;++-- test that lines in postgresql.conf that look like GUCs are GUCs+SELECT regexp_replace(ln, '^#?([_[:alpha:]]+) (= .*|[^ ]*$)', '\1') AS guc+FROM (SELECT regexp_split_to_table(pg_read_file('postgresql.conf'), '\n') AS ln) conf+WHERE ln ~ '^#?[[:alpha:]]'+EXCEPT SELECT lower(name) FROM pg_settings_flags WHERE NOT not_in_sample+ORDER BY 1;++-- test that section:DEVELOPER GUCs are flagged GUC_NOT_IN_SAMPLE:+SELECT * FROM pg_settings_flags+WHERE category='Developer Options' AND NOT not_in_sample+ORDER BY 1;++-- Maybe the converse:+SELECT * FROM pg_settings_flags+WHERE category NOT IN ('Developer Options', 'Preset Options') AND not_in_sample+ORDER BY 1;++-- Most Query Tuning GUCs are flagged as EXPLAIN:+SELECT * FROM pg_settings_flags+WHERE category ~ '^Query Tuning' AND NOT guc_explain+ORDER BY 1;++-- Maybe the converse:+SELECT * FROM pg_settings_flags+WHERE guc_explain AND NOT category ~ '^Query Tuning|^Resource Usage'+ORDER BY 1;++-- GUCs flagged RUNTIME are Preset+SELECT * FROM pg_settings_flags+WHERE guc_computed AND NOT category='Preset Options'+ORDER BY 1;++-- PRESET GUCs are flagged NOT_IN_SAMPLE+SELECT * FROM pg_settings_flags+WHERE category='Preset Options' AND NOT not_in_sample+ORDER BY 1;++-- NO_SHOW_ALL implies NO_RESET_ALL:+SELECT * FROM pg_settings_flags+WHERE no_show_all AND NOT no_reset_all+ORDER BY 1;++-- Usually the converse:+SELECT * FROM pg_settings_flags+WHERE NOT no_show_all AND no_reset_all+ORDER BY 1;++-- NO_SHOW_ALL implies NOT_IN_SAMPLE:+SELECT * FROM pg_settings_flags+WHERE no_show_all AND NOT not_in_sample+ORDER BY 1;++DROP TABLE pg_settings_flags;--
2.17.1
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: pgsql-hackers@postgresql.org
Cc: pryzby@telsasoft.com, michael@paquier.xyz, horikyota.ntt@gmail.com, peter.eisentraut@enterprisedb.com, pgsql-hackers@lists.postgresql.org, bruce@momjian.us, tgl@sss.pgh.pa.us
Subject: Re: GUC flags
In-Reply-To: <20220125010729.GC23027@telsasoft.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox