在 Postgresql 中存档旧数据

Kin*_*her 9 postgresql archiving

我目前期待有人就我将要推进的数据库归档过程向我提出建议。

我有数据库 (DB-1),它有 2 个非常大的表,一个表有 25 GB 的数据,另一个是 20 GB 的数据。即使我有索引,这也会导致主要的性能问题。

因此,我们考虑使用以下过程归档旧数据,

  1. 从现有数据库 (DB-1) 克隆一个新数据库 (DB-2)。
  2. 从 DB-1 中删除旧数据,因此它将只有最近 2 年的记录。如果我需要旧数据可以连接 DB-2。
  3. 每个月应该将旧数据从 DB-1 移动到 DB-2,并从 DB-1 中删除移动的行。

a_h*_*ame 12

那是错误的做法。

您正在寻找的是partitioning

您可以创建每个覆盖一年的范围分区。要删除旧数据,您只需删除不再需要的年份的分区。

如果由于某些原因需要保留数据,您也可以将分区从表中分离。然后数据仍然“散布”,但不会出现在(分区)表中。您可以直接查询(分离的)分区以访问该数据。如果您有多个磁盘,您甚至可以将该(分离的)分区移动到较慢的硬盘以释放快速磁盘上的空间。

但是您甚至可能会发现单独分区可能已经提高了性能,但这在很大程度上取决于您的查询。

请注意,您应该为此使用 Postgres 11,因为在旧版本中分区并不是那么复杂。

  • 如果表 A 对表 B 具有外键依赖关系,但在不同年份创建了行,该怎么办? (2认同)