středa 29. dubna 2026

PostgreSQL: Čtení pg_statistic bez práv superuser

V Postgres databázích se ukládají statistiky do tabulky pg_statistic. Pro jejich čtení jsou ale potřeba práva superuser. Což má jen uživatel postgres a uživatelé, kterým je admin přidělí. Nicméně je lepší, když co nejméně uživatelů má tato oprávnění. V praxi jej mívají jen DBA.

Jak se tedy dostat ke statistikám bez superuser práv?

Tabulka pg_statistic je interní systémová tabulka, uchovávající aproximační statistická data o obsahu sloupců v tabulkách a indexových výrazech. Data jsou nezbytná pro optimalizaci dotazů. Statistiky generuje příkaz ANALYZE.

V PostgreSQL od verze 10 je možné tyto statistiky zobrazit i uživatelem, který není superuser. A to pomocí přiřazené role pg_read_all_stats.

GRANT pg_read_all_stats TO lojza_uzivatel;

Role pg_read_all_stats umožňuje čtení všech pohledů, které začínají na pg_stat_*, jenž poskytují statistiky o aktivitě databáze. Např:

  • pg_stat_activity - informace o aktuálních procesech a dotazech (včetně dotazů jiných uživatelů, které jinak bývají skryté)
  • pg_stat_database - statistiky pro jednotlivé databáze
  • pg_stat_user_tables, pg_stat_sys_tables - statistiky pro uživatelské a systémové tabulky
  • pg_stat_user_indexes, pg_stat_sys_indexes - využití indexů
  • pg_stat_bgwriter - statistiky background zápisu
  • pg_stat_replication - informace o replikaci (pro replikované servery)
  • pg_stat_wal_receiver - statistiky příjemce WAL (Write-Ahead Log)

Kromě těchto pohledů umožňuje role také přístup k rozšířením pro statistiky, jako je pg_stat_statements a dalším systémovým pohledům, např. pg_backend_memory_contexts a pg_shmem-allocations, které nejsou příma pg_stat_*, ale slouží pro monitorování.

A tady ještě malé shrnutí:
Katalog / view Přístup s pg_read_all_stats Poznámka
pg_stat_* Ano Monitoring, bezpečné
pg_stat_statements Ano Pokud je extension aktivní
pg_stats Ano Bezpečné statistiky
pg_catalog.pg_statistics Částečně Jen pro tabulky, ke kterým má uživatel povolený select
pg_catalog.pg_statistic
(nízkoúrovňový)
Ne Pouze superuser