Postgresql

如何在 Postgres 中的非基於時間的列上創建自動分區?

  • December 2, 2020

我想在類型為 的列上創建一個分區serial。基於散列的分區在這裡似乎很合適。但據我了解,我需要自己創建所有分區(基於剩餘部分)。有沒有辦法使用像 pg-partman 這樣的自動擴展來創建所有分區(比如 10 個分區)?

Postgres 沒有內置任何東西來執行“自動分區創建”,因此您要麼需要編寫一個小腳本來自動化該過程,要麼使用像 pg_partman 這樣的工具(如果它支持)。

psql您可以使用這樣的查詢來生成語句,create table然後使用以下命令執行它\g

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;
$$
;

未測試!

當然,您可以將 PL/pgSQL 循環放入函式或過程中,並使用您想要的分區數呼叫它。

引用自:https://dba.stackexchange.com/questions/280720