Mercurial > gemma
view schema/updates/1425/01.inline_utm_covers.sql @ 5014:388947a3050d
Inline SQL function in row level security policies
This prevents the inner function current_user_area_utm() from being
called once per entry. It's now just called once per statement in
a SubPlan node. Performance impact is significant for statements affecting
many entries.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 13 Mar 2020 14:09:32 +0100 |
parents | |
children |
line wrap: on
line source
ALTER POLICY responsibility_area ON waterway.bottlenecks USING (staging_done OR (SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))) WITH CHECK ((SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); ALTER POLICY responsibility_area ON waterway.sounding_results USING (staging_done OR (SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))) WITH CHECK ((SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); ALTER POLICY responsibility_area ON waterway.fairway_dimensions USING (staging_done OR (SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))) WITH CHECK ((SELECT ST_Covers(a, ST_Transform(CAST(area AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); ALTER POLICY responsibility_area_insert ON waterway.waterway_axis WITH CHECK ((SELECT ST_Covers(a, ST_Transform(CAST(wtwaxs AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); ALTER POLICY responsibility_area_update ON waterway.waterway_axis USING ((SELECT ST_Covers(a, ST_Transform(CAST(wtwaxs AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); ALTER POLICY responsibility_area_delete ON waterway.waterway_axis USING ((SELECT ST_Covers(a, ST_Transform(CAST(wtwaxs AS geometry), ST_SRID(a))) FROM users.current_user_area_utm() AS a (a))); DROP FUNCTION users.utm_covers;