select format('create table %I partition of my_table for values with (modulus 10, remainder %s);', 'my_table_p'||to_char(g.i, 'FM00'), g.i)
from generate_series(0,9) as g(i)
\g
否则只需使用一个do块:
do
$$
declare
l_sql text;
begin
for i in 0..9 loop
l_sql := format('create table %I partition of my_table for values with (modulus 10, remainder %s)', 'my_table_p'||to_char(i, 'FM00'), i);
execute l_sql;
end loop;
end;
$$
;
Postgres 没有内置任何东西来执行“自动分区创建”,因此您要么需要编写一个小脚本来自动化该过程,要么使用像 pg_partman 这样的工具(如果它支持)。
psql
您可以使用这样的查询来生成语句,create table
然后使用以下命令运行它\g
:否则只需使用一个
do
块:未测试!
当然,您可以将 PL/pgSQL 循环放入函数或过程中,并使用您想要的分区数调用它。