summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/execMain.c18
-rw-r--r--src/test/regress/expected/guc.out21
-rw-r--r--src/test/regress/sql/guc.sql12
3 files changed, 48 insertions, 3 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 728cdee480b..b5fbd8af97e 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -71,6 +71,18 @@ ExecutorEnd_hook_type ExecutorEnd_hook = NULL;
/* Hook for plugin to get control in ExecCheckPermissions() */
ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook = NULL;
+/*
+ * Check that the query ID is set, which is something that happens only
+ * if compute_query_id is enabled (or a module forced it), if track_activities
+ * is enabled, and if a client provided a query string to map with the query
+ * ID computed from it.
+ */
+#define EXEC_CHECK_QUERY_ID \
+do { \
+ Assert(!IsQueryIdEnabled() || !pgstat_track_activities || \
+ !debug_query_string || pgstat_get_my_query_id() != 0); \
+} while(0)
+
/* decls for local routines only used within this module */
static void InitPlan(QueryDesc *queryDesc, int eflags);
static void CheckValidRowMarkRel(Relation rel, RowMarkType markType);
@@ -297,7 +309,7 @@ ExecutorRun(QueryDesc *queryDesc,
bool execute_once)
{
/* If enabled, the query ID should be set. */
- Assert(!IsQueryIdEnabled() || pgstat_get_my_query_id() != 0);
+ EXEC_CHECK_QUERY_ID;
if (ExecutorRun_hook)
(*ExecutorRun_hook) (queryDesc, direction, count, execute_once);
@@ -408,7 +420,7 @@ void
ExecutorFinish(QueryDesc *queryDesc)
{
/* If enabled, the query ID should be set. */
- Assert(!IsQueryIdEnabled() || pgstat_get_my_query_id() != 0);
+ EXEC_CHECK_QUERY_ID;
if (ExecutorFinish_hook)
(*ExecutorFinish_hook) (queryDesc);
@@ -471,7 +483,7 @@ void
ExecutorEnd(QueryDesc *queryDesc)
{
/* If enabled, the query ID should be set. */
- Assert(!IsQueryIdEnabled() || pgstat_get_my_query_id() != 0);
+ EXEC_CHECK_QUERY_ID;
if (ExecutorEnd_hook)
(*ExecutorEnd_hook) (queryDesc);
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out
index 455b6d6c0ce..14edb42704a 100644
--- a/src/test/regress/expected/guc.out
+++ b/src/test/regress/expected/guc.out
@@ -824,6 +824,27 @@ 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 that disabling track_activities disables query ID reporting in
+-- pg_stat_activity.
+SET compute_query_id = on;
+SET track_activities = on;
+SELECT query_id IS NOT NULL AS qid_set FROM pg_stat_activity
+ WHERE pid = pg_backend_pid();
+ qid_set
+---------
+ t
+(1 row)
+
+SET track_activities = off;
+SELECT query_id IS NOT NULL AS qid_set FROM pg_stat_activity
+ WHERE pid = pg_backend_pid();
+ qid_set
+---------
+ f
+(1 row)
+
+RESET track_activities;
+RESET compute_query_id;
-- Test GUC categories and flag patterns
SELECT pg_settings_get_flags(NULL);
pg_settings_get_flags
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql
index dc79761955d..2be7ab29403 100644
--- a/src/test/regress/sql/guc.sql
+++ b/src/test/regress/sql/guc.sql
@@ -319,6 +319,18 @@ set default_with_oids to f;
-- Should not allow to set it to true.
set default_with_oids to t;
+-- Test that disabling track_activities disables query ID reporting in
+-- pg_stat_activity.
+SET compute_query_id = on;
+SET track_activities = on;
+SELECT query_id IS NOT NULL AS qid_set FROM pg_stat_activity
+ WHERE pid = pg_backend_pid();
+SET track_activities = off;
+SELECT query_id IS NOT NULL AS qid_set FROM pg_stat_activity
+ WHERE pid = pg_backend_pid();
+RESET track_activities;
+RESET compute_query_id;
+
-- Test GUC categories and flag patterns
SELECT pg_settings_get_flags(NULL);
SELECT pg_settings_get_flags('does_not_exist');