DatabaseMeter

Free PostgreSQL tool

Understand pg_stat_statements counters—without sharing SQL text

Compare cumulative workload, frequency, average execution time, reads, temporary writes, planning, and WAL using transparent rankings. Import CSV, TSV, or JSON locally, or choose an eligible connected database while signed in.

SQL text is not needed

Manual CSV, TSV, and JSON exports stay in this browser. Query-text columns are discarded before analysis and export. An explicit connected run uses your owned encrypted connection server-side and returns only bounded counters without saving the report.

Security detailsPrivacy details

Recommended

Analyze a connected database

Use a verified monitoring connection without copying SQL, exporting a file, or entering credentials again. The one-time report is not saved to monitoring history.

Checking for connected databases…

No connection required

Use without connecting

Run a fixed query in your provider console, then analyze the exported counters locally in this browser.

Manual step 1

Export safe query counters

Run this fixed SELECT-only helper and export its result as CSV, TSV, or JSON. It returns database metadata, 500 bounded fingerprints, and counters—never the query column.

Extension location

Auto matches Neon's unqualified pg_stat_statements examples and is recommended first. The portable helper leaves stats_reset unknown because some hosted or older installations expose the statement view without pg_stat_statements_info.

PostgreSQL 14–18
Preview query
WITH analyzer_metadata AS (
  SELECT
    'databasemeter-pgss-v1'::text AS schema_version,
    current_database()::text AS database_name,
    current_setting('server_version')::text AS postgres_version,
    clock_timestamp() AS generated_at,
    NULL::timestamp with time zone AS stats_reset
)
SELECT
  m.schema_version,
  m.database_name,
  m.postgres_version,
  m.generated_at,
  m.stats_reset,
  s.queryid::text AS queryid,
  s.calls::double precision AS calls,
  s.total_plan_time::double precision AS total_plan_time,
  s.total_exec_time::double precision AS total_exec_time,
  s.mean_plan_time::double precision AS mean_plan_time,
  s.mean_exec_time::double precision AS mean_exec_time,
  s.rows::double precision AS rows,
  s.shared_blks_hit::double precision AS shared_blks_hit,
  s.shared_blks_read::double precision AS shared_blks_read,
  s.shared_blks_dirtied::double precision AS shared_blks_dirtied,
  s.shared_blks_written::double precision AS shared_blks_written,
  s.temp_blks_read::double precision AS temp_blks_read,
  s.temp_blks_written::double precision AS temp_blks_written,
  s.wal_records::double precision AS wal_records,
  s.wal_bytes::double precision AS wal_bytes
FROM pg_stat_statements AS s
CROSS JOIN analyzer_metadata AS m
WHERE s.dbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = current_database())
  AND s.queryid IS NOT NULL
ORDER BY s.total_exec_time DESC
LIMIT 500;
Query failed in the provider console?

Relation does not exist: try Auto first and confirm the copied query does not reference pg_stat_statements_info. The extension must be enabled in the exact database selected in the provider console.

Permission denied: use a restricted role with statistics access; do not substitute an owner or application credential.

Fastest signed-in recovery: the guided setup prepares and verifies the role and extension access before returning to this analyzer.

Sign in for guided database setup

Manual step 2

Import the export

The minimum useful fields are queryid, calls, and total_exec_time. Missing optional fields remain unavailable rather than becoming zero.

0 / 1,048,576 bytes

Definitions and sources

Provider and PostgreSQL statements last reviewed August 29, 2026. Pricing consoles and invoices remain authoritative.