v20220721-0013-debug-func.patch
text/x-patch
Filename: v20220721-0013-debug-func.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v20220721-0013
Subject: debug func
| File | + | − |
|---|---|---|
| src/backend/commands/sessionvariable.c | 48 | 0 |
| src/include/catalog/pg_proc.dat | 7 | 0 |
From f7212cb587221b2ca595131d1bb0efafb186e476 Mon Sep 17 00:00:00 2001
From: "okbob@github.com" <pavel.stehule@gmail.com>
Date: Tue, 19 Jul 2022 09:45:34 +0200
Subject: [PATCH 13/13] debug func
---
src/backend/commands/sessionvariable.c | 48 ++++++++++++++++++++++++++
src/include/catalog/pg_proc.dat | 7 ++++
2 files changed, 55 insertions(+)
diff --git a/src/backend/commands/sessionvariable.c b/src/backend/commands/sessionvariable.c
index 50ae95903d..fa994a4879 100644
--- a/src/backend/commands/sessionvariable.c
+++ b/src/backend/commands/sessionvariable.c
@@ -27,6 +27,7 @@
#include "commands/session_variable.h"
#include "executor/executor.h"
#include "executor/svariableReceiver.h"
+#include "funcapi.h"
#include "optimizer/optimizer.h"
#include "parser/parse_coerce.h"
#include "parser/parse_collate.h"
@@ -2001,3 +2002,50 @@ AtEOSubXact_SessionVariable_on_xact_actions(bool isCommit, SubTransactionId mySu
}
}
}
+
+/*
+ * pg_debug_show_used_session_variables - designed for testing
+ *
+ * returns content of session vars
+ */
+Datum
+pg_debug_show_used_session_variables(PG_FUNCTION_ARGS)
+{
+#define NUM_PG_DEBUG_SHOW_USED_SESSION_VARIABLES_ATTS 9
+
+ SetSingleFuncCall(fcinfo, 0);
+
+ if (sessionvars)
+ {
+ ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
+ HASH_SEQ_STATUS status;
+ SVariable svar;
+
+ /* Ensure so all entries in sessionvars hash table are valid */
+ sync_sessionvars_all();
+
+ hash_seq_init(&status, sessionvars);
+
+ while ((svar = (SVariable) hash_seq_search(&status)) != NULL)
+ {
+ Datum values[NUM_PG_DEBUG_SHOW_USED_SESSION_VARIABLES_ATTS];
+ bool nulls[NUM_PG_DEBUG_SHOW_USED_SESSION_VARIABLES_ATTS];
+
+ memset(nulls, 0, sizeof(nulls));
+
+ values[0] = ObjectIdGetDatum(svar->varid);
+ values[1] = PointerGetDatum(cstring_to_text(get_namespace_name(get_session_variable_namespace(svar->varid))));
+ values[2] = PointerGetDatum(cstring_to_text(get_session_variable_name(svar->varid)));
+ values[3] = ObjectIdGetDatum(svar->svartype->typid);
+ values[4] = PointerGetDatum(cstring_to_text(svar->svartype->typname));
+ values[5] = BoolGetDatum(svar->is_valid);
+ values[6] = BoolGetDatum(session_variable_use_valid_type(svar));
+ values[7] = BoolGetDatum(pg_variable_aclcheck(svar->varid, GetUserId(), ACL_READ) == ACLCHECK_OK);
+ values[8] = BoolGetDatum(pg_variable_aclcheck(svar->varid, GetUserId(), ACL_WRITE) == ACLCHECK_OK);
+
+ tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
+ }
+ }
+
+ return (Datum) 0;
+}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 46b6354a51..7909b3d6a8 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -11889,4 +11889,11 @@
prorettype => 'bytea', proargtypes => 'pg_brin_minmax_multi_summary',
prosrc => 'brin_minmax_multi_summary_send' },
+{ oid => '8488', descr => 'debug list of used session variables',
+ proname => 'pg_debug_show_used_session_variables', prorows => '1000', proretset => 't',
+ provolatile => 's', prorettype => 'record', proargtypes => '',
+ proallargtypes => '{oid,text,text,oid,text,bool,bool,bool,bool}',
+ proargmodes => '{o,o,o,o,o,o,o,o,o}',
+ proargnames => '{varid,schema,name,typid,typname,has_value,has_valid_value,can_read,can_write}',
+ prosrc => 'pg_debug_show_used_session_variables' },
]
--
2.36.1