postgresql - 将分区 LIST 附加到 postgres 11 中的现有表
问题描述
我正在尝试更改表以在 postgres 11 中使用分区 LIST。我已经尝试了几个小时,但我不断收到错误。
我有一张巨大的桌子,客户,带有(client_id,customer_id,value)。
我已经通过将旧表重命名为 clients_old 创建了一个新的空表 clients,然后使用以下命令创建了新表:CREATE TABLE clients( like clients_old including all)
。
从这里开始,我在尝试添加 LIST 分区时被卡住了。
我试图:
ALTER TABLE Clients attach PARTITION BY LIST (client_id) --> fail;
ALTER TABLE Clients attach PARTITION LIST (client_id) --> fail;
ALTER TABLE Clients ADD PARTITION LIST (client_id) --> fail;
我应该使用什么语法来更改表以使用分区?
解决方案
无法将常规表转换为分区表,反之亦然
因此,您不能将现有的非分区表更改为分区表。
您需要创建一个新的分区表(具有不同的名称),创建所有必要的分区,然后将数据从旧表复制到新的分区表。
就像是:
create table clients_partitioned
(
.... all columns ...
)
PARTITION BY LIST (client_id);
然后创建分区:
create table clients_1
partition of clients_partioned
for values in (1,2,3);
create table clients_1
partition of clients_partioned
for values in (4,5,6);
然后复制数据:
insert into clients_partitioned
select *
from clients;
完成后,您可以删除旧表并重命名新表:
drop table clients;
alter table clients_partitioned rename to clients;
不要忘记重新创建外键和索引。