@@ -423,6 +423,10 @@ BEGIN
423423 v_attname := attname FROM @extschema@.pathman_config
424424 WHERE relname::regclass = p_parent;
425425
426+ IF v_attname IS NULL THEN
427+ RAISE EXCEPTION ' Table % is not partitioned' , quote_ident(p_parent::TEXT );
428+ END IF;
429+
426430 SELECT * INTO v_plain_schema, v_plain_relname
427431 FROM @extschema@.get_plain_schema_and_relname(p_parent);
428432
@@ -494,9 +498,15 @@ BEGIN
494498 FROM pg_inherits
495499 WHERE inhrelid = v_child_relid;
496500
497- SELECT attname, parttype INTO v_attname, v_part_type
501+ SELECT attname, parttype
498502 FROM @extschema@.pathman_config
499- WHERE relname::regclass = v_parent_relid::regclass;
503+ WHERE relname::regclass = v_parent_relid::regclass
504+ INTO v_attname, v_part_type;
505+
506+ IF v_attname IS NULL THEN
507+ RAISE EXCEPTION ' Table % is not partitioned' ,
508+ quote_ident(v_parent_relid::regclass::text );
509+ END IF;
500510
501511 SELECT * INTO v_plain_schema, v_plain_relname
502512 FROM @extschema@.get_plain_schema_and_relname(p_partition);
@@ -591,9 +601,15 @@ BEGIN
591601 RAISE EXCEPTION ' Cannot merge partitions having different parents' ;
592602 END IF;
593603
594- SELECT attname, parttype INTO v_attname, v_part_type
604+ SELECT attname, parttype
595605 FROM @extschema@.pathman_config
596- WHERE relname::regclass = v_parent_relid1::regclass;
606+ WHERE relname::regclass = v_parent_relid1::regclass
607+ INTO v_attname, v_part_type;
608+
609+ IF v_attname IS NULL THEN
610+ RAISE EXCEPTION ' Table % is not partitioned' ,
611+ quote_ident(v_parent_relid1::regclass::text );
612+ END IF;
597613
598614 /* Check if this is RANGE partition */
599615 IF v_part_type != 2 THEN
@@ -637,8 +653,14 @@ DECLARE
637653 v_child_relname TEXT ;
638654 v_check_name TEXT ;
639655BEGIN
640- SELECT attname INTO v_attname FROM @extschema@.pathman_config
641- WHERE relname::regclass = p_parent_relid::regclass;
656+ SELECT attname FROM @extschema@.pathman_config
657+ WHERE relname::regclass = p_parent_relid::regclass
658+ INTO v_attname;
659+
660+ IF v_attname IS NULL THEN
661+ RAISE EXCEPTION ' Table % is not partitioned' ,
662+ quote_ident(p_parent_relid::regclass::text );
663+ END IF;
642664
643665 SELECT * INTO v_plain_schema, v_plain_relname
644666 FROM @extschema@.get_plain_schema_and_relname(p_part1);
@@ -694,16 +716,22 @@ CREATE OR REPLACE FUNCTION @extschema@.append_range_partition(
694716RETURNS TEXT AS
695717$$
696718DECLARE
697- v_attname TEXT ;
698- v_atttype TEXT ;
699- v_part_name TEXT ;
700- v_interval TEXT ;
719+ v_attname TEXT ;
720+ v_atttype TEXT ;
721+ v_part_name TEXT ;
722+ v_interval TEXT ;
701723BEGIN
702724 /* Prevent concurrent partition creation */
703725 PERFORM @extschema@.acquire_partitions_lock();
704726
705- SELECT attname, range_interval INTO v_attname, v_interval
706- FROM @extschema@.pathman_config WHERE relname::regclass = p_relation;
727+ SELECT attname, range_interval
728+ FROM @extschema@.pathman_config
729+ WHERE relname::regclass = p_relation
730+ INTO v_attname, v_interval;
731+
732+ IF v_attname IS NULL THEN
733+ RAISE EXCEPTION ' Table % is not partitioned' , quote_ident(p_relation::TEXT );
734+ END IF;
707735
708736 v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
709737
@@ -770,8 +798,15 @@ BEGIN
770798 /* Prevent concurrent partition creation */
771799 PERFORM @extschema@.acquire_partitions_lock();
772800
773- SELECT attname, range_interval INTO v_attname, v_interval
774- FROM @extschema@.pathman_config WHERE relname::regclass = p_relation;
801+ SELECT attname, range_interval
802+ FROM @extschema@.pathman_config
803+ WHERE relname::regclass = p_relation
804+ INTO v_attname, v_interval;
805+
806+ IF v_attname IS NULL THEN
807+ RAISE EXCEPTION ' Table % is not partitioned' , quote_ident(p_relation::TEXT );
808+ END IF;
809+
775810 v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
776811
777812 EXECUTE format(' SELECT @extschema@.prepend_partition_internal($1, $2, $3, ARRAY[]::%s[])' , v_atttype)
@@ -946,7 +981,14 @@ BEGIN
946981 , p_relation);
947982
948983 /* Set check constraint */
949- v_attname := attname FROM @extschema@.pathman_config WHERE relname::regclass = p_relation;
984+ v_attname := attname
985+ FROM @extschema@.pathman_config
986+ WHERE relname::regclass = p_relation;
987+
988+ IF v_attname IS NULL THEN
989+ RAISE EXCEPTION ' Table % is not partitioned' , quote_ident(p_relation::TEXT );
990+ END IF;
991+
950992 v_cond := @extschema@.get_range_condition(v_attname, p_start_value, p_end_value);
951993
952994 /* Plain partition name and schema */
@@ -1072,7 +1114,7 @@ $$ LANGUAGE plpgsql;
10721114 * Creates an update trigger
10731115 */
10741116CREATE OR REPLACE FUNCTION @extschema@.create_range_update_trigger(
1075- IN relation TEXT )
1117+ IN relation REGCLASS )
10761118RETURNS TEXT AS
10771119$$
10781120DECLARE
@@ -1107,8 +1149,7 @@ DECLARE
11071149 num INTEGER := 0 ;
11081150 attr TEXT ;
11091151BEGIN
1110- relation := @extschema@.validate_relname(relation);
1111- relid := relation::regclass::oid ;
1152+ relid := relation::oid ;
11121153 SELECT string_agg(attname, ' , ' ),
11131154 string_agg(' OLD.' || attname, ' , ' ),
11141155 string_agg(' NEW.' || attname, ' , ' ),
@@ -1123,7 +1164,14 @@ BEGIN
11231164 att_val_fmt,
11241165 att_fmt;
11251166
1126- attr := attname FROM @extschema@.pathman_config WHERE relname = relation;
1167+ attr := attname
1168+ FROM @extschema@.pathman_config
1169+ WHERE relname::regclass = relation;
1170+
1171+ IF attr IS NULL THEN
1172+ RAISE EXCEPTION ' Table % is not partitioned' , quote_ident(relation::TEXT );
1173+ END IF;
1174+
11271175 EXECUTE format(func, relation, attr, 0 , att_val_fmt,
11281176 old_fields, att_fmt, new_fields);
11291177 FOR rec in (SELECT * FROM pg_inherits WHERE inhparent = relation::regclass::oid )
@@ -1215,7 +1263,6 @@ CREATE OR REPLACE FUNCTION @extschema@.append_partitions_on_demand_internal(
12151263RETURNS OID AS
12161264$$
12171265DECLARE
1218- v_relation TEXT ;
12191266 v_cnt INTEGER := 0 ;
12201267 i INTEGER := 0 ;
12211268 v_part TEXT ;
@@ -1227,11 +1274,16 @@ DECLARE
12271274 v_next_value p_new_value%TYPE;
12281275 v_is_date BOOLEAN ;
12291276BEGIN
1230- v_relation := @extschema@.validate_relname(p_relid::regclass::text );
1231-
12321277 /* get attribute name and interval */
1233- SELECT attname, range_interval INTO v_attname, v_interval
1234- FROM @extschema@.pathman_config WHERE relname = v_relation;
1278+ SELECT attname, range_interval
1279+ FROM @extschema@.pathman_config
1280+ WHERE relname::regclass = p_relid::regclass
1281+ INTO v_attname, v_interval;
1282+
1283+ IF v_attname IS NULL THEN
1284+ RAISE EXCEPTION ' Table % is not partitioned' ,
1285+ quote_ident(p_relid::regclass::text );
1286+ END IF;
12351287
12361288 v_min := @extschema@.get_min_range_value(p_relid::regclass::oid , p_new_value);
12371289 v_max := @extschema@.get_max_range_value(p_relid::regclass::oid , p_new_value);
0 commit comments