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ázepg_stat_user_tables,pg_stat_sys_tables- statistiky pro uživatelské a systémové tabulkypg_stat_user_indexes,pg_stat_sys_indexes- využití indexůpg_stat_bgwriter- statistiky background zápisupg_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í.
| 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 |
Ano
Částečně
Ne