我有一张包含 1b 行的表,并且该表还在不断增长。目前,我使用 pg_partman 按月进行分区。有很多仅针对当前或前几个月的选择查询。是否可以将“旧”分区移动到另一台服务器?因此,理想情况下,我希望有一台服务器(功能强大且磁盘速度快)只包含最近的分区,另一台服务器(便宜)包含其他分区。我应该使用 postgres_fdw 扩展来链接分区吗?实现这种方案的良好做法是什么?
我有一张包含 1b 行的表,并且该表还在不断增长。目前,我使用 pg_partman 按月进行分区。有很多仅针对当前或前几个月的选择查询。是否可以将“旧”分区移动到另一台服务器?因此,理想情况下,我希望有一台服务器(功能强大且磁盘速度快)只包含最近的分区,另一台服务器(便宜)包含其他分区。我应该使用 postgres_fdw 扩展来链接分区吗?实现这种方案的良好做法是什么?
如果只是关于(昂贵的)快速磁盘,并且您可以随意将多个磁盘连接到系统,那么请添加一个大的、便宜的磁盘并在那里创建一个
TABLESPACE
。然后使用一个简单的ALTER TABLE
语句重新定位旧分区:表上的索引(如果有)必须单独移动。
对象是物理移动的。这会在持续时间内获取
ACCESS EXCLUSIVE
锁定。如果这不是一个选项(并且您知道分区上没有并发写入!),您可以选择在后台复制表并重新创建索引 - 如果您仍想为旧分区创建索引?(您可以FILLFACTOR
在重新创建时将索引设置为 100。)然后ALTER TABLE DETACH PARTITION
/ALTER TABLE ATTACH PARTITION
。阅读手册中的细则以简化此过程。速度较慢,但没有实时分区上的独占锁定。并且当以这种方式重写时,所有膨胀都会从表和索引中删除。仍然是单个服务器,分区表保持完整,只有您选择的分区才能获得快速磁盘。
可以将外部表附加为分区。但这比添加 更脆弱
TABLESPACE
。