我想按日期范围对1M +行的表进行分区。如何在不需要太多停机时间或丢失数据的风险的情况下完成这项工作?以下是我正在考虑的策略,但愿意接受建议:
1.现有的表是主表,子表继承它。随着时间的推移,数据从主数据库移动到子数据库,但是有一段时间内某些数据在主表中,而某些数据在子表中。
2.创建一个新的主表和子表。在子表中的现有表中创建数据副本(因此数据将驻留在两个位置)。一旦子表具有最新数据,请将所有插入更改为指向新主表并删除现有表。
答案 0 :(得分:-1)
首先,您必须问自己,是否真的需要表分区。通过分区文档:
https://www.postgresql.org/docs/9.6/static/ddl-partitioning.html
请记住这个非常重要的分区数据信息(来自上面的链接)
只有当一张桌子出现时,这些好处通常才有价值 否则会非常大。表格将受益的确切点 从分区取决于应用程序,虽然经验法则 是表的大小应该超过的物理内存 数据库服务器。
您可以使用此SQL
检查表的大小SELECT pg_size_pretty(pg_database_size(<table_name>))
如果遇到性能问题,请尝试重新索引或重新评估索引。检查你的postgres日志以进行自动吸尘。
1m +行不需要分区。