在Postgres 10中自动创建分区

时间:2017-10-17 10:24:58

标签: postgresql date plpgsql partitioning dynamic-sql

我试图通过BY RANGE(date_created)在一个巨大的表格中自动化Postgres 10中的分区。

我注意到没有自动创建分区表,因此我想编写一个过程来自动创建这些表。

我在想这样的事情:

0

但是我接近语法错误(

1 个答案:

答案 0 :(得分:1)

将函数format()execute结合使用,以获得清晰易读的代码,例如:

do $do$
declare
    d date;
begin
    for d in
        select generate_series(date '2017-01-01', date '2017-12-01', interval '1 month')
    loop
    execute format($f$
        create table cdi.document%s%s partition of cdi.document
        for values from (%L) to (%L)
        $f$, 
        to_char(d, 'YYYY'), to_char(d, 'MM'), d, d+ interval '1 month');
    end loop;
end 
$do$

我使用了anonymous code block因为create table ...没有产生任何结果。但是,如果要编写函数,请注意该函数应返回void而不使用RETURN QUERY