@@ -7,15 +7,8 @@ CREATE OR REPLACE FUNCTION create_hash_partitions(
77 , partitions_countINTEGER
88) RETURNS VOIDAS
99$$
10- DECLARE
11- rowINTEGER ;
12- qTEXT ;
13- relidINTEGER ;
14- attnumINTEGER ;
15- child_oidINTEGER ;
1610BEGIN
17- relid := relfilenodeFROM pg_classWHERE relname= relation;
18- attnum := pg_attribute .attnum FROM pg_attributeWHERE attrelid= relidAND attname= attribute;
11+ relation := lower (relation);
1912
2013 IF EXISTS (SELECT * FROM pathman_configWHERE relname= relation) THEN
2114 RAISE EXCEPTION' Reltion "%s" has already been partitioned' , relation;
3831 , attribute
3932 , partitions_count
4033 , partnum);
41-
42- -- EXECUTE format('CREATE TABLE %s_%s () INHERITS (%1$s)', relation, partnum);
43- -- child_oid := relfilenode FROM pg_class WHERE relname = format('%s_%s', relation, partnum);
44- -- INSERT INTO pg_pathman_hash_rels (parent, hash, child)
45- -- VALUES (relation, partnum, format('%s_%s', relation, partnum));
4634 END LOOP;
4735INSERT INTO pathman_config (relname, attname, parttype)
4836VALUES (relation, attribute,1 );
5139 PERFORM create_hash_insert_trigger(relation, attribute, partitions_count);
5240/* TODO: вернуть*/
5341-- PERFORM create_hash_update_trigger(relation, attribute, partitions_count);
42+
5443/* Notify backend about changes*/
5544 PERFORM on_create_partitions(relid);
5645END
@@ -80,7 +69,6 @@ DECLARE
8069 CREATE TRIGGER %s_insert_trigger
8170 BEFORE INSERT ON %1$s
8271 FOR EACH ROW EXECUTE PROCEDURE %1$s_hash_insert_trigger_func();' ;
83- relidINTEGER ;
8472 fieldsTEXT ;
8573 fields_formatTEXT ;
8674 insert_stmtTEXT ;
@@ -89,23 +77,21 @@ BEGIN
8977 PERFORM drop_hash_triggers(relation);
9078
9179/* determine fields for INSERT*/
92- relid := relfilenodeFROM pg_classWHERE relname= relation;
9380SELECT string_agg(' NEW.' || attname,' ,' ), string_agg(' $' || attnum,' ,' )
9481FROM pg_attribute
95- WHERE attrelid= relid AND attnum> 0
82+ WHERE attrelid= relation::regclass:: oid AND attnum> 0
9683 INTO fields, fields_format;
9784
9885/* generate INSERT statement for trigger*/
9986 insert_stmt= format(' EXECUTE format(' ' INSERT INTO %s_%%s VALUES (%s)' ' , hash) USING %s;'
10087 , relation
10188 , fields_format
10289 , fields);
103- -- insert_stmt = format('EXECUTE format(''INSERT INTO %s_%%s VALUES (NEW.*)'', hash);', relation);
10490
10591/* format and create new trigger for relation*/
10692 func := format(func, relation, attr, partitions_count, insert_stmt);
10793
108- trigger := format(trigger, relation);
94+ trigger := format(trigger, relation::regclass:: text );
10995 EXECUTE func;
11096 EXECUTE trigger;
11197END
@@ -139,8 +125,8 @@ CREATE OR REPLACE FUNCTION drop_hash_triggers(IN relation TEXT)
139125RETURNS VOIDAS
140126$$
141127BEGIN
142- EXECUTE format(' DROP TRIGGER IF EXISTS %s_insert_trigger ON %1$s' , relation);
143- EXECUTE format(' DROP FUNCTION IF EXISTS %s_hash_insert_trigger_func()' , relation);
128+ EXECUTE format(' DROP TRIGGER IF EXISTS %s_insert_trigger ON %1$s' , relation::regclass:: text );
129+ EXECUTE format(' DROP FUNCTION IF EXISTS %s_hash_insert_trigger_func()' , relation::regclass:: text );
144130-- EXECUTE format('DROP TRIGGER IF EXISTS %s_update_trigger ON %1$s', relation);
145131-- EXECUTE format('DROP FUNCTION IF EXISTS %s_hash_update_trigger_func()', relation);
146132END