@@ -49,24 +49,24 @@ TO public;
4949/*
5050 * Check if current user can alter/drop specified relation
5151*/
52- CREATEOR REPLACE FUNCTION @extschema@.can_manage_relation (relation regclass)
53- RETURNS BOOLAS ' pg_pathman' ,' can_manage_relation ' LANGUAGE C STRICT;
52+ CREATEOR REPLACE FUNCTION @extschema@.check_security_policy (relation regclass)
53+ RETURNS BOOLAS ' pg_pathman' ,' check_security_policy ' LANGUAGE C STRICT;
5454
5555/*
5656 * Check user permissions. If permission denied then throw an error.
5757*/
58- CREATEOR REPLACE FUNCTION @extschema@.check_permissions(relation regclass)
59- RETURNS BOOLAS ' pg_pathman' ,' check_permissions' LANGUAGE C STRICT;
58+ -- CREATE OR REPLACE FUNCTION @extschema@.check_permissions(relation regclass)
59+ -- RETURNS BOOL AS 'pg_pathman', 'check_permissions' LANGUAGE C STRICT;
6060
6161/*
6262 * Row security policy to restrict partitioning operations to owner and
6363 * superusers only
6464*/
6565CREATE POLICY deny_modificationON @extschema@.pathman_config
66- FOR ALL USING (can_manage_relation (partrel));
66+ FOR ALL USING (check_security_policy (partrel));
6767
6868CREATE POLICY deny_modificationON @extschema@.pathman_config_params
69- FOR ALL USING (can_manage_relation (partrel));
69+ FOR ALL USING (check_security_policy (partrel));
7070
7171CREATE POLICY allow_selectON @extschema@.pathman_config FORSELECT USING (true);
7272
@@ -129,7 +129,7 @@ CREATE OR REPLACE FUNCTION @extschema@.pathman_set_param(
129129RETURNS VOIDAS
130130$$
131131BEGIN
132- PERFORM @extschema@.check_permissions(relation);
132+ -- PERFORM @extschema@.check_permissions(relation);
133133
134134EXECUTE format(' INSERT INTO @extschema@.pathman_config_params
135135(partrel, %1$s) VALUES ($1, $2)
@@ -336,7 +336,7 @@ CREATE OR REPLACE FUNCTION @extschema@.disable_pathman_for(
336336RETURNS VOIDAS
337337$$
338338BEGIN
339- PERFORM @extschema@.check_permissions(parent_relid);
339+ -- PERFORM @extschema@.check_permissions(parent_relid);
340340
341341DELETE FROM @extschema@.pathman_configWHERE partrel= parent_relid;
342342PERFORM @extschema@.drop_triggers(parent_relid);
468468LANGUAGE plpgsql;
469469
470470/*
471- * DDL trigger thatdeletes entry from pathman_config table.
471+ * DDL trigger thatremoves entry from pathman_config table.
472472*/
473473CREATEOR REPLACE FUNCTION @extschema@.pathman_ddl_trigger_func()
474474RETURNS event_triggerAS
475475$$
476476DECLARE
477477objrecord;
478478pg_class_oidoid ;
479+ relidsregclass[];
479480BEGIN
480481pg_class_oid= ' pg_catalog.pg_class' ::regclass;
481482
482- /* Handle 'DROP TABLE' events */
483- WITH to_be_deleted AS (
484- SELECT cfg . partrel AS rel FROM pg_event_trigger_dropped_objects()AS events
485- JOIN @extschema@.pathman_configAS cfgON cfg .partrel ::oid = events .objid
486- WHERE events .classid = pg_class_oid
487- )
488- DELETE FROM @extschema@. pathman_config
489- WHERE partrel IN ( SELECT rel FROM to_be_deleted );
483+ /* Find relids to remove from config */
484+ SELECT array_agg( cfg . partrel ) INTO relids
485+ FROM pg_event_trigger_dropped_objects()AS events
486+ JOIN @extschema@.pathman_configAS cfgON cfg .partrel ::oid = events .objid
487+ WHERE events .classid = pg_class_oid;
488+
489+ /* Cleanup pathman_config*/
490+ DELETE FROM @extschema@.pathman_config WHERE partrel = ANY(relids );
490491
491492/* Cleanup params table too*/
492- WITH to_be_deletedAS (
493- SELECT cfg .partrel AS relFROM pg_event_trigger_dropped_objects()AS events
494- JOIN @extschema@.pathman_config_paramsAS cfgON cfg .partrel ::oid = events .objid
495- WHERE events .classid = pg_class_oid
496- )
497- DELETE FROM @extschema@.pathman_config_params
498- WHERE partrelIN (SELECT relFROM to_be_deleted);
493+ DELETE FROM @extschema@.pathman_config_paramsWHERE partrel= ANY(relids);
499494END
500495$$
501496LANGUAGE plpgsql;
@@ -530,7 +525,7 @@ DECLARE
530525v_relkindCHAR ;
531526
532527BEGIN
533- PERFORM @extschema@.check_permissions(parent_relid);
528+ -- PERFORM @extschema@.check_permissions(parent_relid);
534529
535530/* Drop trigger first*/
536531PERFORM @extschema@.drop_triggers(parent_relid);