@@ -35,9 +35,8 @@ SELECT pg_catalog.pg_extension_config_dump('@extschema@.pathman_config', '');
3535 * Copy rows to partitions
3636 */
3737CREATE 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 )
4140AS
4241$$
4342DECLARE
@@ -46,14 +45,12 @@ DECLARE
4645 cnt BIGINT := 0 ;
4746
4847BEGIN
49- relname := @extschema@.validate_relname(p_parent);
50-
5148 p_total := 0 ;
5249
5350 /* Create partitions and copy rest of the data */
5451 EXECUTE format(' WITH part_data AS (DELETE FROM ONLY %1$s RETURNING *)
5552 INSERT INTO %1$s SELECT * FROM part_data' ,
56- relname );
53+ @extschema@.get_schema_qualified_name(parent_relid) );
5754
5855 /* Get number of inserted rows */
5956 GET DIAGNOSTICS p_total = ROW_COUNT;
@@ -66,17 +63,17 @@ LANGUAGE plpgsql;
6663 * Disable pathman partitioning for specified relation
6764 */
6865CREATE OR REPLACE FUNCTION @extschema@.disable_partitioning(
69- relation REGCLASS)
66+ parent_relid REGCLASS)
7067RETURNS VOID AS
7168$$
7269BEGIN
73- relation : = @extschema@.validate_relname(relation );
70+ PERFORM @extschema@.validate_relname(parent_relid );
7471
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 );
7774
7875 /* Notify backend about changes */
79- PERFORM on_remove_partitions(relation::regclass:: integer );
76+ PERFORM @extschema@. on_remove_partitions(parent_relid );
8077END
8178$$
8279LANGUAGE plpgsql;
@@ -131,41 +128,51 @@ CREATE OR REPLACE FUNCTION @extschema@.get_plain_schema_and_relname(
131128AS
132129$$
133130BEGIN
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
136134 INTO schema, relname;
137135END
138136$$
139137LANGUAGE plpgsql;
140138
141139/*
142- * Validates relation name. It must be schema qualified
140+ * Returns schema-qualified name for table
143141 */
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 ' ' )
146146RETURNS TEXT AS
147147$$
148148BEGIN
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 );
150154END
151155$$
152156LANGUAGE plpgsql;
153157
154158/*
155- * Returns schema-qualified name for table
159+ * Validates relation name. It must be schema qualified
156160 */
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)
161163RETURNS TEXT AS
162164$$
165+ DECLARE
166+ relname TEXT ;
167+
163168BEGIN
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;
169176END
170177$$
171178LANGUAGE plpgsql;
@@ -183,8 +190,10 @@ DECLARE
183190BEGIN
184191 FOR rec IN (
185192 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 )
188197 SELECT a1 .attname name1, a2 .attname name2, a1 .atttypid type1, a2 .atttypid type2
189198 FROM a1
190199 FULL JOIN a2 ON a1 .attnum = a2 .attnum
@@ -211,7 +220,7 @@ DECLARE
211220 pg_class_oid oid ;
212221
213222BEGIN
214- pg_class_oid = ' pg_class' ::regclass;
223+ pg_class_oid = ' pg_catalog. pg_class' ::regclass;
215224
216225 /* Handle 'DROP TABLE' events */
217226 WITH to_be_deleted AS (
@@ -261,11 +270,10 @@ DECLARE
261270 v_rec RECORD;
262271 v_rows INTEGER ;
263272 v_part_count INTEGER := 0 ;
264- v_relname TEXT ;
265273 conf_num_del INTEGER ;
266274
267275BEGIN
268- v_relname : = @extschema@.validate_relname(parent_relid);
276+ PERFORM @extschema@.validate_relname(parent_relid);
269277
270278 /* Drop trigger first */
271279 PERFORM @extschema@.drop_triggers(parent_relid);
@@ -280,7 +288,8 @@ BEGIN
280288 END IF;
281289
282290 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)
284293 LOOP
285294 IF NOT delete_data THEN
286295 EXECUTE format(' WITH part_data AS (DELETE FROM %s RETURNING *)
@@ -376,6 +385,6 @@ LANGUAGE C STRICT;
376385/*
377386 * Get parent of pg_pathman's partition.
378387 */
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 '
381390LANGUAGE C STRICT;
0 commit comments