为现有的 Postgres 表创建额外的分区

问题描述 投票:0回答:1

我有一个包含 1T 数据的表,该表有大约 50 个分区。每个分区保存一周的数据。但是,我希望创建额外的分区来保存额外的每周数据。为此,我正在创建一个表并附加到主表。命令如下:

Create table test.2023w327
   partition of test.main_table
      For values from (‘2023-07-03’) To (‘2023-07-10’);

我的问题是这是一种正确的方法。这也会锁定桌子吗?由于该表包含 1T 的数据,因此我还不知道该表需要多少时间。请提出建议。

postgresql database-administration
1个回答
0
投票

是的,这是为范围分区表创建分区的正确方法,除了您忘记将表名(以数字开头)用双引号引起来。但是,它需要对分区表进行短暂的

ACCESS EXCLUSIVE
锁定。

要使用强度较低的锁执行该操作,您可以

-

CREATE TABLE test.part_2023w327 (LIKE test.main_table);
  • 创建与分区表匹配的索引和约束

  • 创建一个检查约束,确保分区键必须是

    NOT NULL
    >= ‘2023-07-03’
    < ‘2023-07-10’

  • ALTER TABLE test.main_table
       ATTACH PARTITION test.2023w327
          FOR VALUES FROM (‘2023-07-03’) TO (‘2023-07-10’);
    
© www.soinside.com 2019 - 2024. All rights reserved.