create or replace function create_partion_table(tablename varchar,cur_date date)
returns text as $tablename$
declare
month_val integer;
cur_year integer ;
first_day date ;
last_day date ;
partition_table_name text:='';
begin
month_val = extract(MONTH from cur_date::date)::int;
cur_year = extract(YEAR from cur_date::date);
first_day =(date_trunc('month',cur_date::date))::date;
last_day = date_trunc('month',cur_date::date)+ interval '1 month' - interval '1 day';
if(month_val < 10) then
partition_table_name = (tablename||'_'||cur_year||'0'||month_val);
else
partition_table_name = (tablename||'_'||cur_year||month_val);
end if ;
execute format('create table IF NOT EXISTS %s ( check (date_key >= %L and date_key<= %L ) ) inherits(%s)', partition_table_name,first_day::date,last_day::date,tablename);
return partition_table_name;
end;
$tablename$ LANGUAGE plpgsql;
select create_partion_table('ods_ess_cln_ori_drivertask_tb','2021-12-12'::date)
用postgres创建对应的分区表