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');