Hi Hackers, The attached patch fixes the statistics retrieval of tables in GreenPlum
Thanks Joao
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/stats.sql new file mode 100644 index 00000000..e8dab7ad --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/stats.sql @@ -0,0 +1,57 @@ +SELECT + seq_scan AS {{ conn|qtIdent(_('Sequential scans')) }}, + seq_tup_read AS {{ conn|qtIdent(_('Sequential tuples read')) }}, + idx_scan AS {{ conn|qtIdent(_('Index scans')) }}, + idx_tup_fetch AS {{ conn|qtIdent(_('Index tuples fetched')) }}, + n_tup_ins AS {{ conn|qtIdent(_('Tuples inserted')) }}, + n_tup_upd AS {{ conn|qtIdent(_('Tuples updated')) }}, + n_tup_del AS {{ conn|qtIdent(_('Tuples deleted')) }}, + n_tup_hot_upd AS {{ conn|qtIdent(_('Tuples HOT updated')) }}, + n_live_tup AS {{ conn|qtIdent(_('Live tuples')) }}, + n_dead_tup AS {{ conn|qtIdent(_('Dead tuples')) }}, + heap_blks_read AS {{ conn|qtIdent(_('Heap blocks read')) }}, + heap_blks_hit AS {{ conn|qtIdent(_('Heap blocks hit')) }}, + idx_blks_read AS {{ conn|qtIdent(_('Index blocks read')) }}, + idx_blks_hit AS {{ conn|qtIdent(_('Index blocks hit')) }}, + toast_blks_read AS {{ conn|qtIdent(_('Toast blocks read')) }}, + toast_blks_hit AS {{ conn|qtIdent(_('Toast blocks hit')) }}, + tidx_blks_read AS {{ conn|qtIdent(_('Toast index blocks read')) }}, + tidx_blks_hit AS {{ conn|qtIdent(_('Toast index blocks hit')) }}, + last_vacuum AS {{ conn|qtIdent(_('Last vacuum')) }}, + last_autovacuum AS {{ conn|qtIdent(_('Last autovacuum')) }}, + last_analyze AS {{ conn|qtIdent(_('Last analyze')) }}, + last_autoanalyze AS {{ conn|qtIdent(_('Last autoanalyze')) }}, + pg_stat_get_vacuum_count({{ tid }}::oid) AS {{ conn|qtIdent(_('Vacuum counter')) }}, + pg_stat_get_autovacuum_count({{ tid }}::oid) AS {{ conn|qtIdent(_('Autovacuum counter')) }}, + pg_stat_get_analyze_count({{ tid }}::oid) AS {{ conn|qtIdent(_('Analyze counter')) }}, + pg_stat_get_autoanalyze_count({{ tid }}::oid) AS {{ conn|qtIdent(_('Autoanalyze counter')) }}, + pg_relation_size(stat.relid) AS {{ conn|qtIdent(_('Table size')) }}, + CASE WHEN cl.reltoastrelid = 0 THEN NULL ELSE pg_relation_size(cl.reltoastrelid) + + COALESCE((SELECT SUM(pg_relation_size(indexrelid)) + FROM pg_index WHERE indrelid=cl.reltoastrelid)::int8, 0) + END AS {{ conn|qtIdent(_('Toast table size')) }}, + COALESCE((SELECT SUM(pg_relation_size(indexrelid)) + FROM pg_index WHERE indrelid=stat.relid)::int8, 0) + AS {{ conn|qtIdent(_('Indexes size')) }} +{% if is_pgstattuple %} +{#== EXTENDED STATS ==#} + ,tuple_count AS {{ conn|qtIdent(_('Tuple count')) }}, + tuple_len AS {{ conn|qtIdent(_('Tuple length')) }}, + tuple_percent AS {{ conn|qtIdent(_('Tuple percent')) }}, + dead_tuple_count AS {{ conn|qtIdent(_('Dead tuple count')) }}, + dead_tuple_len AS {{ conn|qtIdent(_('Dead tuple length')) }}, + dead_tuple_percent AS {{ conn|qtIdent(_('Dead tuple percent')) }}, + free_space AS {{ conn|qtIdent(_('Free space')) }}, + free_percent AS {{ conn|qtIdent(_('Free percent')) }} +FROM + pgstattuple('{{schema_name}}.{{table_name}}'), pg_stat_all_tables stat +{% else %} +FROM + pg_stat_all_tables stat +{% endif %} +JOIN + pg_statio_all_tables statio ON stat.relid = statio.relid +JOIN + pg_class cl ON cl.oid=stat.relid +WHERE + stat.relid = {{ tid }}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.2_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.2_plus/stats.sql new file mode 100644 index 00000000..30137a8e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.2_plus/stats.sql @@ -0,0 +1,57 @@ +SELECT + seq_scan AS {{ conn|qtIdent(_('Sequential scans')) }}, + seq_tup_read AS {{ conn|qtIdent(_('Sequential tuples read')) }}, + idx_scan AS {{ conn|qtIdent(_('Index scans')) }}, + idx_tup_fetch AS {{ conn|qtIdent(_('Index tuples fetched')) }}, + n_tup_ins AS {{ conn|qtIdent(_('Tuples inserted')) }}, + n_tup_upd AS {{ conn|qtIdent(_('Tuples updated')) }}, + n_tup_del AS {{ conn|qtIdent(_('Tuples deleted')) }}, + n_tup_hot_upd AS {{ conn|qtIdent(_('Tuples HOT updated')) }}, + n_live_tup AS {{ conn|qtIdent(_('Live tuples')) }}, + n_dead_tup AS {{ conn|qtIdent(_('Dead tuples')) }}, + heap_blks_read AS {{ conn|qtIdent(_('Heap blocks read')) }}, + heap_blks_hit AS {{ conn|qtIdent(_('Heap blocks hit')) }}, + idx_blks_read AS {{ conn|qtIdent(_('Index blocks read')) }}, + idx_blks_hit AS {{ conn|qtIdent(_('Index blocks hit')) }}, + toast_blks_read AS {{ conn|qtIdent(_('Toast blocks read')) }}, + toast_blks_hit AS {{ conn|qtIdent(_('Toast blocks hit')) }}, + tidx_blks_read AS {{ conn|qtIdent(_('Toast index blocks read')) }}, + tidx_blks_hit AS {{ conn|qtIdent(_('Toast index blocks hit')) }}, + last_vacuum AS {{ conn|qtIdent(_('Last vacuum')) }}, + last_autovacuum AS {{ conn|qtIdent(_('Last autovacuum')) }}, + last_analyze AS {{ conn|qtIdent(_('Last analyze')) }}, + last_autoanalyze AS {{ conn|qtIdent(_('Last autoanalyze')) }}, + vacuum_count AS {{ conn|qtIdent(_('Vacuum counter')) }}, + autovacuum_count AS {{ conn|qtIdent(_('Autovacuum counter')) }}, + analyze_count AS {{ conn|qtIdent(_('Analyze counter')) }}, + autoanalyze_count AS {{ conn|qtIdent(_('Autoanalyze counter')) }}, + pg_relation_size(stat.relid) AS {{ conn|qtIdent(_('Table size')) }}, + CASE WHEN cl.reltoastrelid = 0 THEN NULL ELSE pg_relation_size(cl.reltoastrelid) + + COALESCE((SELECT SUM(pg_relation_size(indexrelid)) + FROM pg_index WHERE indrelid=cl.reltoastrelid)::int8, 0) + END AS {{ conn|qtIdent(_('Toast table size')) }}, + COALESCE((SELECT SUM(pg_relation_size(indexrelid)) + FROM pg_index WHERE indrelid=stat.relid)::int8, 0) + AS {{ conn|qtIdent(_('Indexes size')) }} +{% if is_pgstattuple %} +{#== EXTENDED STATS ==#} + ,tuple_count AS {{ conn|qtIdent(_('Tuple count')) }}, + tuple_len AS {{ conn|qtIdent(_('Tuple length')) }}, + tuple_percent AS {{ conn|qtIdent(_('Tuple percent')) }}, + dead_tuple_count AS {{ conn|qtIdent(_('Dead tuple count')) }}, + dead_tuple_len AS {{ conn|qtIdent(_('Dead tuple length')) }}, + dead_tuple_percent AS {{ conn|qtIdent(_('Dead tuple percent')) }}, + free_space AS {{ conn|qtIdent(_('Free space')) }}, + free_percent AS {{ conn|qtIdent(_('Free percent')) }} +FROM + pgstattuple('{{schema_name}}.{{table_name}}'), pg_stat_all_tables stat +{% else %} +FROM + pg_stat_all_tables stat +{% endif %} +JOIN + pg_statio_all_tables statio ON stat.relid = statio.relid +JOIN + pg_class cl ON cl.oid=stat.relid +WHERE + stat.relid = {{ tid }}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/stats.sql index 30137a8e..f3b2e19e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/stats.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/stats.sql @@ -21,10 +21,6 @@ SELECT last_autovacuum AS {{ conn|qtIdent(_('Last autovacuum')) }}, last_analyze AS {{ conn|qtIdent(_('Last analyze')) }}, last_autoanalyze AS {{ conn|qtIdent(_('Last autoanalyze')) }}, - vacuum_count AS {{ conn|qtIdent(_('Vacuum counter')) }}, - autovacuum_count AS {{ conn|qtIdent(_('Autovacuum counter')) }}, - analyze_count AS {{ conn|qtIdent(_('Analyze counter')) }}, - autoanalyze_count AS {{ conn|qtIdent(_('Autoanalyze counter')) }}, pg_relation_size(stat.relid) AS {{ conn|qtIdent(_('Table size')) }}, CASE WHEN cl.reltoastrelid = 0 THEN NULL ELSE pg_relation_size(cl.reltoastrelid) + COALESCE((SELECT SUM(pg_relation_size(indexrelid)) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/gpdb_5.0_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/gpdb_5.0_plus/stats.sql new file mode 100644 index 00000000..7d717417 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/gpdb_5.0_plus/stats.sql @@ -0,0 +1,16 @@ +SELECT + last_vacuum AS {{ conn|qtIdent(_('Last vacuum')) }}, + last_analyze AS {{ conn|qtIdent(_('Last analyze')) }} +FROM ( + SELECT statime as last_vacuum + FROM pg_stat_operations + WHERE actionname LIKE 'VACUUM' + and objid = {{ tid }}::oid + ) vacuum_result, + ( + SELECT statime as last_analyze + FROM pg_stat_operations + WHERE actionname LIKE 'ANALYZE' + and objid = {{ tid }}::oid + ) analyze_result; +