From 71ec9ef914fce3bd47c25f06b0f59ecf6ab8418a Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Wed, 15 Jun 2016 11:53:58 +0100 Subject: [PATCH] Add stats on Sequences/Functions/Trigger functions collection nodes. Fixes #1299 --- .../databases/schemas/functions/__init__.py | 25 ++++++++++++++++--- .../templates/function/js/functions.js | 3 ++- .../function/pg/sql/9.1_plus/coll_stats.sql | 20 +++++++++++++++ .../function/pg/sql/9.2_plus/coll_stats.sql | 20 +++++++++++++++ .../function/pg/sql/9.5_plus/coll_stats.sql | 20 +++++++++++++++ .../function/ppas/sql/9.1_plus/coll_stats.sql | 20 +++++++++++++++ .../function/ppas/sql/9.2_plus/coll_stats.sql | 20 +++++++++++++++ .../function/ppas/sql/9.5_plus/coll_stats.sql | 20 +++++++++++++++ .../templates/procedure/js/procedures.js | 3 ++- .../ppas/sql/9.1_plus/coll_stats.sql | 20 +++++++++++++++ .../ppas/sql/9.2_plus/coll_stats.sql | 20 +++++++++++++++ .../ppas/sql/9.5_plus/coll_stats.sql | 20 +++++++++++++++ .../trigger_function/js/trigger_functions.js | 3 ++- .../pg/sql/9.1_plus/coll_stats.sql | 20 +++++++++++++++ .../pg/sql/9.2_plus/coll_stats.sql | 20 +++++++++++++++ .../pg/sql/9.5_plus/coll_stats.sql | 20 +++++++++++++++ .../ppas/sql/9.1_plus/coll_stats.sql | 20 +++++++++++++++ .../ppas/sql/9.2_plus/coll_stats.sql | 20 +++++++++++++++ .../ppas/sql/9.5_plus/coll_stats.sql | 20 +++++++++++++++ .../databases/schemas/sequences/__init__.py | 24 +++++++++++++++--- .../templates/sequence/js/sequence.js | 3 ++- .../sequence/sql/9.1_plus/coll_stats.sql | 9 +++++++ 22 files changed, 358 insertions(+), 12 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/coll_stats.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/sql/9.1_plus/coll_stats.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py index 5a68442ef..fc8526833 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py @@ -203,7 +203,7 @@ class FunctionView(PGChildNodeView, DataTypeReader): 'nodes': [{'get': 'node'}, {'get': 'nodes'}], 'sql': [{'get': 'sql'}], 'msql': [{'get': 'msql'}, {'get': 'msql'}], - 'stats': [{'get': 'statistics'}], + 'stats': [{'get': 'statistics'}, {'get': 'statistics'}], 'dependency': [{'get': 'dependencies'}], 'dependent': [{'get': 'dependents'}], 'module.js': [{}, {}, {'get': 'module_js'}], @@ -1296,7 +1296,7 @@ It may have been removed by another user or moved to another schema. return ajax_response(response=sql) @check_precondition - def statistics(self, gid, sid, did, scid, fnid): + def statistics(self, gid, sid, did, scid, fnid=None): """ Statistics @@ -1309,10 +1309,27 @@ It may have been removed by another user or moved to another schema. Returns the statistics for a particular object if fnid is specified """ + + if fnid is not None: + sql = 'stats.sql' + schema_name = None + else: + sql = 'coll_stats.sql' + # Get schema name + status, schema_name = self.conn.execute_scalar( + render_template( + 'schema/pg/9.1_plus/sql/get_name.sql', + scid=scid + ) + ) + if not status: + return internal_server_error(errormsg=schema_name) + status, res = self.conn.execute_dict( render_template( - "/".join([self.sql_template_path, 'stats.sql']), - conn=self.conn, fnid=fnid + "/".join([self.sql_template_path, sql]), + conn=self.conn, fnid=fnid, + scid=scid, schema_name=schema_name ) ) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/js/functions.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/js/functions.js index 882066fab..7e4ffa7fb 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/js/functions.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/js/functions.js @@ -11,7 +11,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { node: 'function', label: '{{ _('Functions') }}', type: 'coll-function', - columns: ['name', 'funcowner', 'description'] + columns: ['name', 'funcowner', 'description'], + hasStatistics: true }); }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/js/procedures.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/js/procedures.js index 24fc33ad0..af6194685 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/js/procedures.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/js/procedures.js @@ -12,7 +12,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Function) { node: 'procedure', label: '{{ _('Procedures') }}', type: 'coll-procedure', - columns: ['name', 'funcowner', 'description'] + columns: ['name', 'funcowner', 'description'], + hasStatistics: true }); }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/coll_stats.sql new file mode 100644 index 000000000..86a0d7be8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/js/trigger_functions.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/js/trigger_functions.js index 8f44f0d7c..5955f1b5b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/js/trigger_functions.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/js/trigger_functions.js @@ -11,7 +11,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { node: 'trigger_function', label: '{{ _('Trigger functions') }}', type: 'coll-trigger_function', - columns: ['name', 'funcowner', 'description'] + columns: ['name', 'funcowner', 'description'], + hasStatistics: true }); }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/coll_stats.sql new file mode 100644 index 000000000..ae5815e9e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/coll_stats.sql @@ -0,0 +1,20 @@ +SELECT + funcname AS {{ conn|qtIdent(_('Name')) }}, + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + schemaname = {{schema_name|qtLiteral}} + AND funcid IN ( + SELECT p.oid + FROM + pg_proc p + JOIN + pg_type typ ON typ.oid=p.prorettype + WHERE + p.proisagg = FALSE + AND typname = 'trigger' + ) +ORDER BY funcname; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py index ea04caf15..d01ba2117 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py @@ -106,7 +106,7 @@ class SequenceView(PGChildNodeView): 'nodes': [{'get': 'node'}, {'get': 'nodes'}], 'sql': [{'get': 'sql'}], 'msql': [{'get': 'msql'}, {'get': 'msql'}], - 'stats': [{'get': 'statistics'}], + 'stats': [{'get': 'statistics'}, {'get': 'statistics'}], 'dependency': [{'get': 'dependencies'}], 'dependent': [{'get': 'dependents'}], 'module.js': [{}, {}, {'get': 'module_js'}] @@ -689,7 +689,7 @@ class SequenceView(PGChildNodeView): ) @check_precondition(action="stats") - def statistics(self, gid, sid, did, scid, seid): + def statistics(self, gid, sid, did, scid, seid=None): """ Statistics @@ -702,10 +702,26 @@ class SequenceView(PGChildNodeView): Returns the statistics for a particular object if seid is specified """ + if seid is not None: + sql = 'stats.sql' + schema_name = None + else: + sql = 'coll_stats.sql' + # Get schema name + status, schema_name = self.conn.execute_scalar( + render_template( + 'schema/pg/9.1_plus/sql/get_name.sql', + scid=scid + ) + ) + if not status: + return internal_server_error(errormsg=schema_name) + status, res = self.conn.execute_dict( render_template( - "/".join([self.template_path, 'stats.sql']), - conn=self.conn, seid=seid + "/".join([self.template_path, sql]), + conn=self.conn, seid=seid, + schema_name=schema_name ) ) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js index b5ee220ab..474f8498d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js @@ -9,7 +9,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { node: 'sequence', label: '{{ _('Sequences') }}', type: 'coll-sequence', - columns: ['name', 'seqowner', 'comment'] + columns: ['name', 'seqowner', 'comment'], + hasStatistics: true }); }; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/sql/9.1_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/sql/9.1_plus/coll_stats.sql new file mode 100644 index 000000000..71d3c7059 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/sql/9.1_plus/coll_stats.sql @@ -0,0 +1,9 @@ +SELECT + relname AS {{ conn|qtIdent(_('Name')) }}, + blks_read AS {{ conn|qtIdent(_('Blocks read')) }}, + blks_hit AS {{ conn|qtIdent(_('Blocks hit')) }} +FROM + pg_statio_all_sequences +WHERE + schemaname = {{ schema_name|qtLiteral }} +ORDER BY relname; \ No newline at end of file