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;
+

Reply via email to