@@ -35,9 +35,8 @@ SELECT pg_catalog.pg_extension_config_dump('@extschema@.pathman_config', '');
35
35
* Copy rows to partitions
36
36
*/
37
37
CREATEOR REPLACE FUNCTION @extschema@.partition_data(
38
- p_parentREGCLASS,
39
- p_invalidate_cache_on_errorBOOLEAN DEFAULT FALSE,
40
- OUT p_totalBIGINT )
38
+ parent_relidREGCLASS,
39
+ OUT p_totalBIGINT )
41
40
AS
42
41
$$
43
42
DECLARE
@@ -46,14 +45,12 @@ DECLARE
46
45
cntBIGINT := 0 ;
47
46
48
47
BEGIN
49
- relname := @extschema@.validate_relname(p_parent);
50
-
51
48
p_total := 0 ;
52
49
53
50
/* Create partitions and copy rest of the data*/
54
51
EXECUTE format(' WITH part_data AS (DELETE FROM ONLY %1$s RETURNING *)
55
52
INSERT INTO %1$s SELECT * FROM part_data' ,
56
- relname );
53
+ @extschema@.get_schema_qualified_name(parent_relid) );
57
54
58
55
/* Get number of inserted rows*/
59
56
GET DIAGNOSTICS p_total= ROW_COUNT;
@@ -66,17 +63,17 @@ LANGUAGE plpgsql;
66
63
* Disable pathman partitioning for specified relation
67
64
*/
68
65
CREATEOR REPLACE FUNCTION @extschema@.disable_partitioning(
69
- relation REGCLASS)
66
+ parent_relid REGCLASS)
70
67
RETURNS VOIDAS
71
68
$$
72
69
BEGIN
73
- relation : = @extschema@.validate_relname(relation );
70
+ PERFORM @extschema@.validate_relname(parent_relid );
74
71
75
- DELETE FROM @extschema@.pathman_configWHERE partrel= relation ;
76
- PERFORM @extschema@.drop_triggers(relation );
72
+ DELETE FROM @extschema@.pathman_configWHERE partrel= parent_relid ;
73
+ PERFORM @extschema@.drop_triggers(parent_relid );
77
74
78
75
/* Notify backend about changes*/
79
- PERFORM on_remove_partitions(relation::regclass:: integer );
76
+ PERFORM@extschema@. on_remove_partitions(parent_relid );
80
77
END
81
78
$$
82
79
LANGUAGE plpgsql;
@@ -131,41 +128,51 @@ CREATE OR REPLACE FUNCTION @extschema@.get_plain_schema_and_relname(
131
128
AS
132
129
$$
133
130
BEGIN
134
- SELECT relnamespace::regnamespace,pg_class .relname
135
- FROM pg_classWHERE oid = cls::oid
131
+ SELECT pg_catalog .pg_class .relnamespace::regnamespace,
132
+ pg_catalog .pg_class .relname
133
+ FROM pg_catalog .pg_class WHERE oid = cls::oid
136
134
INTO schema, relname;
137
135
END
138
136
$$
139
137
LANGUAGE plpgsql;
140
138
141
139
/*
142
- *Validates relation name. It must be schema qualified
140
+ *Returns schema-qualified name for table
143
141
*/
144
- CREATEOR REPLACE FUNCTION @extschema@.validate_relname(
145
- clsREGCLASS)
142
+ CREATEOR REPLACE FUNCTION @extschema@.get_schema_qualified_name(
143
+ clsREGCLASS,
144
+ delimiterTEXT DEFAULT' .' ,
145
+ suffixTEXT DEFAULT' ' )
146
146
RETURNSTEXT AS
147
147
$$
148
148
BEGIN
149
- RETURN @extschema@.get_schema_qualified_name(cls,' .' );
149
+ RETURN (SELECT quote_ident(relnamespace::regnamespace::text )||
150
+ delimiter||
151
+ quote_ident(relname|| suffix)
152
+ FROM pg_catalog .pg_class
153
+ WHERE oid = cls::oid );
150
154
END
151
155
$$
152
156
LANGUAGE plpgsql;
153
157
154
158
/*
155
- *Returns schema-qualified name for table
159
+ *Validates relation name. It must be schema qualified
156
160
*/
157
- CREATEOR REPLACE FUNCTION @extschema@.get_schema_qualified_name(
158
- clsREGCLASS,
159
- delimiterTEXT DEFAULT' _' ,
160
- suffixTEXT DEFAULT' ' )
161
+ CREATEOR REPLACE FUNCTION @extschema@.validate_relname(
162
+ clsREGCLASS)
161
163
RETURNSTEXT AS
162
164
$$
165
+ DECLARE
166
+ relnameTEXT ;
167
+
163
168
BEGIN
164
- RETURN (SELECT quote_ident(relnamespace::regnamespace::text )||
165
- delimiter||
166
- quote_ident(relname|| suffix)
167
- FROM pg_class
168
- WHERE oid = cls::oid );
169
+ relname= @extschema@.get_schema_qualified_name(cls);
170
+
171
+ IF relname ISNULL THEN
172
+ RAISE EXCEPTION' Relation %s does not exist' , cls;
173
+ END IF;
174
+
175
+ RETURN relname;
169
176
END
170
177
$$
171
178
LANGUAGE plpgsql;
@@ -183,8 +190,10 @@ DECLARE
183
190
BEGIN
184
191
FOR recIN (
185
192
WITH
186
- a1AS (select * from pg_attributewhere attrelid= relation1and attnum> 0 ),
187
- a2AS (select * from pg_attributewhere attrelid= relation2and attnum> 0 )
193
+ a1AS (select * from pg_catalog .pg_attribute
194
+ where attrelid= relation1and attnum> 0 ),
195
+ a2AS (select * from pg_catalog .pg_attribute
196
+ where attrelid= relation2and attnum> 0 )
188
197
SELECT a1 .attname name1,a2 .attname name2,a1 .atttypid type1,a2 .atttypid type2
189
198
FROM a1
190
199
FULLJOIN a2ON a1 .attnum = a2 .attnum
@@ -211,7 +220,7 @@ DECLARE
211
220
pg_class_oidoid ;
212
221
213
222
BEGIN
214
- pg_class_oid= ' pg_class' ::regclass;
223
+ pg_class_oid= ' pg_catalog. pg_class' ::regclass;
215
224
216
225
/* Handle 'DROP TABLE' events*/
217
226
WITH to_be_deletedAS (
@@ -261,11 +270,10 @@ DECLARE
261
270
v_recRECORD;
262
271
v_rowsINTEGER ;
263
272
v_part_countINTEGER := 0 ;
264
- v_relnameTEXT ;
265
273
conf_num_delINTEGER ;
266
274
267
275
BEGIN
268
- v_relname : = @extschema@.validate_relname(parent_relid);
276
+ PERFORM @extschema@.validate_relname(parent_relid);
269
277
270
278
/* Drop trigger first*/
271
279
PERFORM @extschema@.drop_triggers(parent_relid);
@@ -280,7 +288,8 @@ BEGIN
280
288
END IF;
281
289
282
290
FOR v_recIN (SELECT inhrelid::regclass::text AS tbl
283
- FROM pg_inheritsWHERE inhparent::regclass= parent_relid)
291
+ FROM pg_catalog .pg_inherits
292
+ WHERE inhparent::regclass= parent_relid)
284
293
LOOP
285
294
IF NOT delete_data THEN
286
295
EXECUTE format(' WITH part_data AS (DELETE FROM %s RETURNING *)
@@ -376,6 +385,6 @@ LANGUAGE C STRICT;
376
385
/*
377
386
* Get parent of pg_pathman's partition.
378
387
*/
379
- CREATEOR REPLACE FUNCTION @extschema@.parent_of_partition (REGCLASS)
380
- RETURNS REGCLASSAS ' pg_pathman' ,' parent_of_partition '
388
+ CREATEOR REPLACE FUNCTION @extschema@.get_parent_of_partition (REGCLASS)
389
+ RETURNS REGCLASSAS ' pg_pathman' ,' get_parent_of_partition_pl '
381
390
LANGUAGE C STRICT;