【发布时间】:2020-07-24 15:11:56
【问题描述】:
我是 postgreSQL 的新手,我正在做一个项目,要求我将所有超过 6 个月的分区移动到旧表中,以便对表的查询更快。我有 10 年数据的分区表。
假设 myTable 是具有当前 6 个月数据的表,并且 myTable_legacy 将包含 6 个月以上的所有数据长达 10 年。该表按月范围分区
我在网上研究并无法得出结论的问题是
我目前正在完成这些步骤之前的测试,我使用下面的链接作为我的实验室测试的参考,并且在执行实际迁移之前。
How to migrate an existing Postgres Table to partitioned table as transparently as possible?
create table myTable(
forDate date not null,
key2 int not null,
value int not null
) partition by range (forDate);
create table myTable_legacy(
forDate date not null,
key2 int not null,
value int not null
) partition by range (forDate);
1)每日申请查询将仅针对当前6个月的数据。是否有必要将超过 6 个月的数据移动到新分区以获得更好的查询响应。我在网上进行了研究,但找不到任何与此相关的确凿证据。
2)如果性能会更好,如何将旧分区从 myTable 移动到 myTable_legacy。根据我的研究,我可以看到我们在 PostgreSQL 中没有交换分区的选项。
任何帮助或指导都会帮助我进一步满足要求。
当我尝试将分区附加到 mytable_legacy 时,出现错误
alter table mytable detach partition mytable_200003;
alter table mytable_legacy attach partition mytable_200003
for values from ('2003-03-01') to ('2003-03-30');
结果:
错误:某些行违反了分区约束
SQL 状态:23514
分区内容:
select * from mytable_200003;
"2000-03-02" 1 19
"2000-03-30" 15 8
【问题讨论】: