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;