Postgresql
如何在 Postgres 中的非基於時間的列上創建自動分區?
我想在類型為 的列上創建一個分區
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 循環放入函式或過程中,並使用您想要的分區數呼叫它。