{"record":{"id":"f408cf715dbfb619","repo":"ankane/pghero","slug":"query-stats-not-enabled","errorCode":null,"errorMessage":"Query stats not enabled","messagePattern":"Query stats not enabled","errorType":"exception","errorClass":"PgHero::NotEnabled","httpStatus":null,"severity":"error","filePath":"lib/pghero/methods/query_stats.rb","lineNumber":207,"sourceCode":"              captured_at: captured_at,\n              total_time: r[:total_time],\n              calls: r[:calls],\n              origin: r[:origin]\n            }\n          end\n        end\n        stats.each do |query|\n          query[:average_time] = query[:total_time] / query[:calls]\n        end\n        stats\n      end\n\n      private\n\n      # https://www.craigkerstiens.com/2013/01/10/more-on-postgres-performance/\n      def current_query_stats(limit: nil, sort: nil, user: nil, query_hash: nil, origin: false)\n        if !query_stats_enabled?\n          raise NotEnabled, \"Query stats not enabled\"\n        end\n\n        limit ||= 100\n        sort ||= \"total_time\"\n        query = <<~SQL\n          WITH query_stats AS (\n            SELECT\n              LEFT(query, 10000) AS query,\n              queryid AS query_hash,\n              rolname AS user,\n              total_plan_time + total_exec_time AS total_time,\n              #{\"(total_plan_time + total_exec_time) / calls AS average_time,\" if sort == \"average_time\"}\n              calls\n            FROM\n              pg_stat_statements\n            INNER JOIN\n              pg_database ON pg_database.oid = pg_stat_statements.dbid\n            INNER JOIN","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/ankane/pghero/blob/7edb57986ffd36f9d64f0830c4ccc90a5eac46d6/lib/pghero/methods/query_stats.rb#L189-L225","documentation":"current_query_stats (the backing for query_stats and the /pghero/queries page) reads pg_stat_statements, which requires the extension to be installed in the database. query_stats_enabled? checks for it; when missing, PgHero raises NotEnabled \"Query stats not enabled\" before running any stats SQL.","triggerScenarios":"Visiting the pghero Queries tab or calling database.query_stats on a database where CREATE EXTENSION pg_stat_statements was never run; the extension was dropped (e.g. someone ran database.disable_query_stats); the server lacks pg_stat_statements in shared_preload_libraries so it cannot even be created.","commonSituations":"New or newly-attached databases in a multi-database pghero setup; managed Postgres where the extension is available but not preloaded (requires a parameter-group change and restart); testing against a fresh local Postgres container.","solutions":["Enable it through pghero: PgHero.databases[\"primary\"].enable_query_stats (runs CREATE EXTENSION IF NOT EXISTS pg_stat_statements)","If CREATE fails, add pg_stat_statements to shared_preload_libraries in postgresql.conf (or the managed-service parameter group), restart Postgres, then retry","Check availability first: SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'"],"exampleFix":"# before - raises NotEnabled until the extension exists\ndatabase.query_stats\n\n# after - ensure extension first, then query\ndatabase.enable_query_stats\ndatabase.query_stats","handlingStrategy":"validation","validationCode":"unless database.query_stats_enabled?\n  database.enable_query_stats # requires pg_stat_statements in shared_preload_libraries\nend\ndatabase.query_stats","typeGuard":null,"tryCatchPattern":"begin\n  database.query_stats\nrescue PgHero::NotEnabled => e\n  # enable once (or surface setup instructions), then retry manually - do not loop\n  Rails.logger.warn(\"#{e.message} - run database.enable_query_stats\")\nend","preventionTips":["Add pg_stat_statements to shared_preload_libraries at server provisioning time so enable_query_stats never needs a restart later","For multi-database setups, enable the extension on every database in pghero.yml","Check pg_available_extensions before assuming the extension can be created on managed Postgres"],"tags":["pghero","query-stats","postgres-extension","not-enabled"],"backgroundTag":"feature-not-enabled","analyzedSha":"7edb57986ffd36f9d64f0830c4ccc90a5eac46d6","analyzedAt":"2026-08-21T17:33:54.942Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}