@@ -35,9 +35,8 @@ SELECT pg_catalog.pg_extension_config_dump('@extschema@.pathman_config', '');
35
35
* Copy rows to partitions
36
36
*/
37
37
CREATE OR REPLACE FUNCTION @extschema@.partition_data(
38
- p_parent REGCLASS,
39
- p_invalidate_cache_on_error BOOLEAN DEFAULT FALSE,
40
- OUT p_total BIGINT )
38
+ parent_relid REGCLASS,
39
+ OUT p_total BIGINT )
41
40
AS
42
41
$$
43
42
DECLARE
@@ -46,14 +45,12 @@ DECLARE
46
45
cnt BIGINT := 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
CREATE OR REPLACE FUNCTION @extschema@.disable_partitioning(
69
- relation REGCLASS)
66
+ parent_relid REGCLASS)
70
67
RETURNS VOID AS
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_config WHERE partrel = relation ;
76
- PERFORM @extschema@.drop_triggers(relation );
72
+ DELETE FROM @extschema@.pathman_config WHERE 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_class WHERE 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
- CREATE OR REPLACE FUNCTION @extschema@.validate_relname(
145
- cls REGCLASS)
142
+ CREATE OR REPLACE FUNCTION @extschema@.get_schema_qualified_name(
143
+ cls REGCLASS,
144
+ delimiter TEXT DEFAULT ' .' ,
145
+ suffix TEXT DEFAULT ' ' )
146
146
RETURNS TEXT 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
- CREATE OR REPLACE FUNCTION @extschema@.get_schema_qualified_name(
158
- cls REGCLASS,
159
- delimiter TEXT DEFAULT ' _' ,
160
- suffix TEXT DEFAULT ' ' )
161
+ CREATE OR REPLACE FUNCTION @extschema@.validate_relname(
162
+ cls REGCLASS)
161
163
RETURNS TEXT AS
162
164
$$
165
+ DECLARE
166
+ relname TEXT ;
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 IS NULL 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 rec IN (
185
192
WITH
186
- a1 AS (select * from pg_attribute where attrelid = relation1 and attnum > 0 ),
187
- a2 AS (select * from pg_attribute where attrelid = relation2 and attnum > 0 )
193
+ a1 AS (select * from pg_catalog .pg_attribute
194
+ where attrelid = relation1 and attnum > 0 ),
195
+ a2 AS (select * from pg_catalog .pg_attribute
196
+ where attrelid = relation2 and attnum > 0 )
188
197
SELECT a1 .attname name1, a2 .attname name2, a1 .atttypid type1, a2 .atttypid type2
189
198
FROM a1
190
199
FULL JOIN a2 ON a1 .attnum = a2 .attnum
@@ -211,7 +220,7 @@ DECLARE
211
220
pg_class_oid oid ;
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_deleted AS (
@@ -261,11 +270,10 @@ DECLARE
261
270
v_rec RECORD;
262
271
v_rows INTEGER ;
263
272
v_part_count INTEGER := 0 ;
264
- v_relname TEXT ;
265
273
conf_num_del INTEGER ;
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_rec IN (SELECT inhrelid::regclass::text AS tbl
283
- FROM pg_inherits WHERE 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
- CREATE OR REPLACE FUNCTION @extschema@.parent_of_partition (REGCLASS)
380
- RETURNS REGCLASS AS ' pg_pathman' , ' parent_of_partition '
388
+ CREATE OR REPLACE FUNCTION @extschema@.get_parent_of_partition (REGCLASS)
389
+ RETURNS REGCLASS AS ' pg_pathman' , ' get_parent_of_partition_pl '
381
390
LANGUAGE C STRICT;
0 commit comments