@@ -49,24 +49,24 @@ TO public;
49
49
/*
50
50
* Check if current user can alter/drop specified relation
51
51
*/
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;
54
54
55
55
/*
56
56
* Check user permissions. If permission denied then throw an error.
57
57
*/
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;
60
60
61
61
/*
62
62
* Row security policy to restrict partitioning operations to owner and
63
63
* superusers only
64
64
*/
65
65
CREATE POLICY deny_modificationON @extschema@.pathman_config
66
- FOR ALL USING (can_manage_relation (partrel));
66
+ FOR ALL USING (check_security_policy (partrel));
67
67
68
68
CREATE POLICY deny_modificationON @extschema@.pathman_config_params
69
- FOR ALL USING (can_manage_relation (partrel));
69
+ FOR ALL USING (check_security_policy (partrel));
70
70
71
71
CREATE POLICY allow_selectON @extschema@.pathman_config FORSELECT USING (true);
72
72
@@ -129,7 +129,7 @@ CREATE OR REPLACE FUNCTION @extschema@.pathman_set_param(
129
129
RETURNS VOIDAS
130
130
$$
131
131
BEGIN
132
- PERFORM @extschema@.check_permissions(relation);
132
+ -- PERFORM @extschema@.check_permissions(relation);
133
133
134
134
EXECUTE format(' INSERT INTO @extschema@.pathman_config_params
135
135
(partrel, %1$s) VALUES ($1, $2)
@@ -336,7 +336,7 @@ CREATE OR REPLACE FUNCTION @extschema@.disable_pathman_for(
336
336
RETURNS VOIDAS
337
337
$$
338
338
BEGIN
339
- PERFORM @extschema@.check_permissions(parent_relid);
339
+ -- PERFORM @extschema@.check_permissions(parent_relid);
340
340
341
341
DELETE FROM @extschema@.pathman_configWHERE partrel= parent_relid;
342
342
PERFORM @extschema@.drop_triggers(parent_relid);
468
468
LANGUAGE plpgsql;
469
469
470
470
/*
471
- * DDL trigger thatdeletes entry from pathman_config table.
471
+ * DDL trigger thatremoves entry from pathman_config table.
472
472
*/
473
473
CREATEOR REPLACE FUNCTION @extschema@.pathman_ddl_trigger_func()
474
474
RETURNS event_triggerAS
475
475
$$
476
476
DECLARE
477
477
objrecord;
478
478
pg_class_oidoid ;
479
+ relidsregclass[];
479
480
BEGIN
480
481
pg_class_oid= ' pg_catalog.pg_class' ::regclass;
481
482
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 );
490
491
491
492
/* 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);
499
494
END
500
495
$$
501
496
LANGUAGE plpgsql;
@@ -530,7 +525,7 @@ DECLARE
530
525
v_relkindCHAR ;
531
526
532
527
BEGIN
533
- PERFORM @extschema@.check_permissions(parent_relid);
528
+ -- PERFORM @extschema@.check_permissions(parent_relid);
534
529
535
530
/* Drop trigger first*/
536
531
PERFORM @extschema@.drop_triggers(parent_relid);