使用日期列的周数对数据库进行分区

Partition DB using the weeknumber of date column

所以我想将我的 Postgres (v11) 数据库分成几个分区。我已经想出如何通过使用我的日期范围来做到这一点。

CREATE TABLE test(
some_id  int,
some_date date,
some_value int,
) PARTITION BY RANGE (some_date);

但是我想根据日期的周数进行分区。我尝试了以下代码但没有成功:

CREATE TABLE test(
some_id  int,
some_date date,
some_value int,
) PARTITION BY DATE_PART('week', some_date);

有人知道吗?

这仍然是范围分区,您只是使用一个整数范围。 (列表分区在这里也可以很好地工作。)这是一个显示年度分区的缩写示例 - IRL,您将有 52 个分区,涵盖第 1-52 周,而不是我在这里显示的第 1、2、3-52 周。

testdb=# CREATE TABLE test(                                                     some_id  int,
some_date date,
some_value int
) PARTITION BY range(DATE_PART('week', some_date));
CREATE TABLE
testdb=# create table test_week01 partition of test for values from (1) to (2);
CREATE TABLE
testdb=# create table test_week02 partition of test for values from (2) to (3);
CREATE TABLE
testdb=# create table test_week_rest partition of test for values from (3) to (MAXVALUE);
CREATE TABLE
testdb=# insert into test select 1, '2022-01-03', 2;
INSERT 0 1
testdb=# insert into test select 3, '2022-01-10', 4;
INSERT 0 1
testdb=# insert into test select 5, '2022-05-01', 6;
INSERT 0 1
testdb=# select tableoid::regclass, * from test;
    tableoid    | some_id | some_date  | some_value 
----------------+---------+------------+------------
 test_week01    |       1 | 2022-01-03 |          2
 test_week02    |       3 | 2022-01-10 |          4
 test_week_rest |       5 | 2022-05-01 |          6
(3 rows)