gpt4 book ai didi

postgresql - 在 Postgres 10 中自动创建分区

转载 作者:行者123 更新时间:2023-11-29 12:54:26 24 4
gpt4 key购买 nike

我正在尝试通过 BY RANGE (date_created) 在 Postgres 10 中对一个巨大的表进行自动化分区。

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

我是这么想的:

CREATE OR REPLACE FUNCTION cdi.automating_partitions()
RETURNS TABLE(natural_id text, name text, natural_id_numeric text) AS
$func$
DECLARE
formal_table text;
BEGIN
FOR formal_table IN
select '2017-01-01'::date + (n || ' months')::interval months,
'2013-02-01'::date + (n || ' months')::interval monthsplus
from generate_series(0, 12) n
LOOP
RETURN QUERY EXECUTE
'CREATE TABLE cdi.' || 'document' || to_char(months, 'YYYY') || '' || to_char(months, 'MM') || ' PARTITION OF cdi.document
FOR VALUES FROM (''' || to_char(months, 'YYYY') || to_char(months, 'MM') || ''',
''' to_char(monthsplus, 'YYYY') || to_char(monthsplus, 'MM') ''');'
END LOOP;
END
$func$ LANGUAGE plpgsql;

但是我在 (

最佳答案

使用函数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

关于postgresql - 在 Postgres 10 中自动创建分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com