@@ -7,15 +7,8 @@ CREATE OR REPLACE FUNCTION create_hash_partitions(
7
7
, partitions_countINTEGER
8
8
) RETURNS VOIDAS
9
9
$$
10
- DECLARE
11
- rowINTEGER ;
12
- qTEXT ;
13
- relidINTEGER ;
14
- attnumINTEGER ;
15
- child_oidINTEGER ;
16
10
BEGIN
17
- relid := relfilenodeFROM pg_classWHERE relname= relation;
18
- attnum := pg_attribute .attnum FROM pg_attributeWHERE attrelid= relidAND attname= attribute;
11
+ relation := lower (relation);
19
12
20
13
IF EXISTS (SELECT * FROM pathman_configWHERE relname= relation) THEN
21
14
RAISE EXCEPTION' Reltion "%s" has already been partitioned' , relation;
38
31
, attribute
39
32
, partitions_count
40
33
, 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));
46
34
END LOOP;
47
35
INSERT INTO pathman_config (relname, attname, parttype)
48
36
VALUES (relation, attribute,1 );
51
39
PERFORM create_hash_insert_trigger(relation, attribute, partitions_count);
52
40
/* TODO: вернуть*/
53
41
-- PERFORM create_hash_update_trigger(relation, attribute, partitions_count);
42
+
54
43
/* Notify backend about changes*/
55
44
PERFORM on_create_partitions(relid);
56
45
END
@@ -80,7 +69,6 @@ DECLARE
80
69
CREATE TRIGGER %s_insert_trigger
81
70
BEFORE INSERT ON %1$s
82
71
FOR EACH ROW EXECUTE PROCEDURE %1$s_hash_insert_trigger_func();' ;
83
- relidINTEGER ;
84
72
fieldsTEXT ;
85
73
fields_formatTEXT ;
86
74
insert_stmtTEXT ;
@@ -89,23 +77,21 @@ BEGIN
89
77
PERFORM drop_hash_triggers(relation);
90
78
91
79
/* determine fields for INSERT*/
92
- relid := relfilenodeFROM pg_classWHERE relname= relation;
93
80
SELECT string_agg(' NEW.' || attname,' ,' ), string_agg(' $' || attnum,' ,' )
94
81
FROM pg_attribute
95
- WHERE attrelid= relid AND attnum> 0
82
+ WHERE attrelid= relation::regclass:: oid AND attnum> 0
96
83
INTO fields, fields_format;
97
84
98
85
/* generate INSERT statement for trigger*/
99
86
insert_stmt= format(' EXECUTE format(' ' INSERT INTO %s_%%s VALUES (%s)' ' , hash) USING %s;'
100
87
, relation
101
88
, fields_format
102
89
, fields);
103
- -- insert_stmt = format('EXECUTE format(''INSERT INTO %s_%%s VALUES (NEW.*)'', hash);', relation);
104
90
105
91
/* format and create new trigger for relation*/
106
92
func := format(func, relation, attr, partitions_count, insert_stmt);
107
93
108
- trigger := format(trigger, relation);
94
+ trigger := format(trigger, relation::regclass:: text );
109
95
EXECUTE func;
110
96
EXECUTE trigger;
111
97
END
@@ -139,8 +125,8 @@ CREATE OR REPLACE FUNCTION drop_hash_triggers(IN relation TEXT)
139
125
RETURNS VOIDAS
140
126
$$
141
127
BEGIN
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 );
144
130
-- EXECUTE format('DROP TRIGGER IF EXISTS %s_update_trigger ON %1$s', relation);
145
131
-- EXECUTE format('DROP FUNCTION IF EXISTS %s_hash_update_trigger_func()', relation);
146
132
END