From 9b3c8f07ff3f7938696723405dc9c7b43dde4252 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Wed, 11 Sep 2019 10:25:49 +0530 Subject: [PATCH] Doc: Update PL/pgSQL sample function in plpgsql.sgml. The example used to explain 'Looping Through Query Results' uses pseudo-materialized views. Replace it with a more up-to-date example which does the same thing with actual materialized views, which have been available since PostgreSQL 9.3. In the passing, change '%' as format specifier instead of '%s' as is used in other examples in plpgsql.sgml. Reported-by: Ian Barwick Author: Ian Barwick Reviewed-by: Amit Kapila Backpatch-through: 9.4 Discussion: https://postgr.es/m/9a70d393-7904-4918-c97c-649f6d114b6a@2ndquadrant.com --- doc/src/sgml/plpgsql.sgml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index bf4a28f7cd..70bcce700b 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -2437,19 +2437,29 @@ END LOOP label ; resulting from the query and the loop body is executed for each row. Here is an example: -CREATE FUNCTION cs_refresh_mviews() RETURNS integer AS $$ +CREATE FUNCTION refresh_mviews() RETURNS integer AS $$ DECLARE mviews RECORD; BEGIN - RAISE NOTICE 'Refreshing materialized views...'; + RAISE NOTICE 'Refreshing all materialized views...'; - FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP + FOR mviews IN + SELECT n.nspname AS mv_schema, + c.relname AS mv_name, + pg_catalog.pg_get_userbyid(c.relowner) AS owner + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) + WHERE c.relkind = 'm' + ORDER BY 1 + LOOP - -- Now "mviews" has one record from cs_materialized_views + -- Now "mviews" has one record with information about the materialized view - RAISE NOTICE 'Refreshing materialized view %s ...', quote_ident(mviews.mv_name); - EXECUTE format('TRUNCATE TABLE %I', mviews.mv_name); - EXECUTE format('INSERT INTO %I %s', mviews.mv_name, mviews.mv_query); + RAISE NOTICE 'Refreshing materialized view %.% (owner: %)...', + quote_ident(mviews.mv_schema), + quote_ident(mviews.mv_name), + quote_ident(mviews.owner); + EXECUTE format('REFRESH MATERIALIZED VIEW %I.%I', mviews.mv_schema, mviews.mv_name); END LOOP; RAISE NOTICE 'Done refreshing materialized views.';