@@ -35,9 +35,8 @@ SELECT pg_catalog.pg_extension_config_dump('@extschema@.pathman_config', '');
3535 * Copy rows to partitions
3636*/
3737CREATEOR 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 )
4140AS
4241$$
4342DECLARE
@@ -46,14 +45,12 @@ DECLARE
4645cntBIGINT := 0 ;
4746
4847BEGIN
49- relname := @extschema@.validate_relname(p_parent);
50-
5148p_total := 0 ;
5249
5350/* Create partitions and copy rest of the data*/
5451EXECUTE format(' WITH part_data AS (DELETE FROM ONLY %1$s RETURNING *)
5552INSERT INTO %1$s SELECT * FROM part_data' ,
56- relname );
53+ @extschema@.get_schema_qualified_name(parent_relid) );
5754
5855/* Get number of inserted rows*/
5956GET DIAGNOSTICS p_total= ROW_COUNT;
@@ -66,17 +63,17 @@ LANGUAGE plpgsql;
6663 * Disable pathman partitioning for specified relation
6764*/
6865CREATEOR REPLACE FUNCTION @extschema@.disable_partitioning(
69- relation REGCLASS)
66+ parent_relid REGCLASS)
7067RETURNS VOIDAS
7168$$
7269BEGIN
73- relation : = @extschema@.validate_relname(relation );
70+ PERFORM @extschema@.validate_relname(parent_relid );
7471
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 );
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_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
136134INTO 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- 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' ' )
146146RETURNSTEXT 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- 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)
161163RETURNSTEXT AS
162164$$
165+ DECLARE
166+ relnameTEXT ;
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 ISNULL 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
184191FOR recIN (
185192WITH
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 )
188197SELECT a1 .attname name1,a2 .attname name2,a1 .atttypid type1,a2 .atttypid type2
189198FROM a1
190199FULLJOIN a2ON a1 .attnum = a2 .attnum
@@ -211,7 +220,7 @@ DECLARE
211220pg_class_oidoid ;
212221
213222BEGIN
214- pg_class_oid= ' pg_class' ::regclass;
223+ pg_class_oid= ' pg_catalog. pg_class' ::regclass;
215224
216225/* Handle 'DROP TABLE' events*/
217226WITH to_be_deletedAS (
@@ -261,11 +270,10 @@ DECLARE
261270v_recRECORD;
262271v_rowsINTEGER ;
263272v_part_countINTEGER := 0 ;
264- v_relnameTEXT ;
265273conf_num_delINTEGER ;
266274
267275BEGIN
268- v_relname : = @extschema@.validate_relname(parent_relid);
276+ PERFORM @extschema@.validate_relname(parent_relid);
269277
270278/* Drop trigger first*/
271279PERFORM @extschema@.drop_triggers(parent_relid);
@@ -280,7 +288,8 @@ BEGIN
280288END IF;
281289
282290FOR 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)
284293LOOP
285294IF NOT delete_data THEN
286295EXECUTE 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- 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 '
381390LANGUAGE C STRICT;