changeset 5391:1dd63a2405bc extented-report

Fixed remaining TODO for refreshing materialized views within a procedure with owner rights.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 03 Jul 2021 00:43:25 +0200
parents 90fc90148ef8
children 014dc3219bdb
files schema/reports.sql schema/updates/1453/01.update_dqr_stats.sql schema/version.sql
diffstat 3 files changed, 36 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/schema/reports.sql	Fri Jul 02 18:56:59 2021 +0200
+++ b/schema/reports.sql	Sat Jul 03 00:43:25 2021 +0200
@@ -68,18 +68,22 @@
     WHERE bid.objnam = bn.objnam
     GROUP BY bn.cc, d.ym, bid.objnam;
 
-
--- Config update statement
-
--- TODO
---
---  INSERT INTO sys_admin.stats_updates
---    VALUES ('Data quality report',
---            'REFRESH MATERIALIZED VIEW waterway.dqr_bottleneck_stats;
---             REFRESH MATERIALIZED VIEW waterway.dqr_gauge_stats;');
---
--- THIS DOES _NOT_ WORK!
--- To make this work we need a wrapper function with owner rights for
+-- We need a wrapper procedure with owner rights for
 -- the refresh, as (from the PGSQL manual): "REFRESH MATERIALIZED VIEW
 -- completely replaces the contents of a materialized view. To execute
 -- this command you must be the owner of the materialized view.""
+
+CREATE OR REPLACE PROCEDURE sys_admin.update_dqr_stats()
+LANGUAGE plpgsql AS $$
+BEGIN
+    EXECUTE 'REFRESH MATERIALIZED VIEW waterway.dqr_bottleneck_stats';
+    EXECUTE 'REFRESH MATERIALIZED VIEW waterway.dqr_gauge_stats';
+END;
+$$ SECURITY DEFINER;
+
+GRANT EXECUTE ON PROCEDURE sys_admin.update_dqr_stats() TO sys_admin;
+
+-- Config update statement
+INSERT INTO sys_admin.stats_updates
+    VALUES ('Data quality report',
+            'CALL sys_admin.update_dqr_stats();');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schema/updates/1453/01.update_dqr_stats.sql	Sat Jul 03 00:43:25 2021 +0200
@@ -0,0 +1,19 @@
+-- We need a wrapper procedure with owner rights for
+-- the refresh, as (from the PGSQL manual): "REFRESH MATERIALIZED VIEW
+-- completely replaces the contents of a materialized view. To execute
+-- this command you must be the owner of the materialized view.""
+
+CREATE OR REPLACE PROCEDURE sys_admin.update_dqr_stats()
+LANGUAGE plpgsql AS $$
+BEGIN
+    EXECUTE 'REFRESH MATERIALIZED VIEW waterway.dqr_bottleneck_stats';
+    EXECUTE 'REFRESH MATERIALIZED VIEW waterway.dqr_gauge_stats';
+END;
+$$ SECURITY DEFINER;
+
+GRANT EXECUTE ON PROCEDURE sys_admin.update_dqr_stats() TO sys_admin;
+
+-- Config update statement
+INSERT INTO sys_admin.stats_updates
+    VALUES ('Data quality report',
+            'CALL sys_admin.update_dqr_stats();');
--- a/schema/version.sql	Fri Jul 02 18:56:59 2021 +0200
+++ b/schema/version.sql	Sat Jul 03 00:43:25 2021 +0200
@@ -1,1 +1,1 @@
-INSERT INTO gemma_schema_version(version) VALUES (1452);
+INSERT INTO gemma_schema_version(version) VALUES (1453);