Skip to content

Auto created partition error when using set_init_callback to change partition name #64

@killua001

Description

@killua001
  1. create a callback function:
declare
    v_parent text;
    v_patition text;
    v_rang_min text;
begin
    --RAISE WARNING 'args: %', args;
    v_parent := args->>'parent';
    v_patition := args->>'partition';
    v_rang_min := args->>'range_min';
    --RAISE WARNING 'args: %, %, %', v_parent, v_patition,v_rang_min;
    execute 'alter table '||v_patition||' rename CONSTRAINT pathman_'||v_patition||'_1_check to pathman_'||v_parent||'_'||to_char(v_rang_min::date,'yyyymm')||'_1_check';
    execute 'alter table '||v_patition||' rename to '||v_parent||'_'||to_char(v_rang_min::date,'yyyymm');
end;
$$ language plpgsql;
  1. create a partition table, everythin is OK.
select set_init_callback('t4','part_onemon_callback');
select create_partitions_from_range('t4','a',date'20161001',date'20170101',interval'1 month');
select * from pathman_partition_list where parent = 't4'::regclass;
insert into t4 values ('20161201');
select * from only t4;
  1. insert a values out of range, this will something go wrong.
    insert into t4 values ('20171111');
HINT:  See server log for more details.
LOCATION:  create_partitions_bg_worker, pathman_workers.c:305
  1. error log
2016-11-15 14:17:31.947 CST,,,37704,,582aa87b.9348,2,,2016-11-15 14:17:31 CST,2/718109,24654603,WARNING,01000,"args: {""parent"": ""t4"", ""parttype"": ""2"", ""partition"": ""t4_7"", ""range_max"": ""2017-03-01 00:00:00"", ""range_min"": ""2017-02-01 00:00:00""}",,,,,"SQL statement ""SELECT public.invoke_on_partition_created_callback(parent_relid,
                                                                                                                         v_child_relname::REGCLASS,
                                                                                                                         v_init_callback,
                                                                                                                         start_value,
                                                                                                                         end_value)""
PL/pgSQL function create_single_range_partition(regclass,anyelement,anyelement,text,text) line 75 at PERFORM
SQL statement ""SELECT part::regclass FROM public.create_single_range_partition($1, $2, $3) AS part""",,,,""
2016-11-15 14:17:31.948 CST,,,37704,,582aa87b.9348,3,,2016-11-15 14:17:31 CST,2/718109,24654603,LOG,00000,"create_partitions_internal(): relation ""public.t4_7"" does not exist [37704]",,,,,,,,,""
2016-11-15 14:17:31.981 CST,"postgres","liang",13164,"[local]",582aa128.336c,13,"INSERT",2016-11-15 13:46:16 CST,4/124512,24654602,ERROR,XX000,"Attempt to spawn new partitions of relation ""t4"" failed",,"See server log for more details.",,,,"insert into t4 values ('20171101');",,,"psql"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions