如何从远程 TimescaleDb 中删除最旧的条目,维护数据库的完整本地备份?

How to drop the oldest entries from a remote TimescaleDb, maintaining the full local backup of the database?

我有一个远程不断增长的 TimescaleDb 数据库。我只想保留该 Db 中的最新条目,将其余数据备份到本地驱动器,以在服务器上实现恒定的 Db 大小。

我想在从这些备份在本地保留和重建基础之前进行完整 pg_dump 备份。

此外,我可以使用 WAL-E 创建连续副本,以某种方式忽略远程数据库上的删除。

实现该目标的最有效方法是什么?

(TimescaleDB 人在这里)

这里主要有两种方法:

  • 使用 WAL-E 或 pgBackRest 等备份系统将数据持续复制到其他来源(如 S3)。
  • 将您对 TimescaleDB drop_chunks 的使用与您的数据提取过程相结合。

答案在某种程度上取决于您的 data/database 的复杂程度。

如果您希望将数据主要存档在单个超表中,我会推荐后者:使用 show_chunks 确定哪些块在特定范围内,计算 select范围并将数据写入任何地方,然后在相同范围内执行drop_chunks

所以我决定一个块一个块地传输旧数据。

首先,我SELECT show_chunks(older_than => interval '1 day'); 确定符合保留条件的块。

接下来,我使用 \copy _timescaledb_internal.name_of_the_chunk_n to 'chunk_n.csv' csv 对选定的块进行迭代。之后,我使用 rsync 将 csv 备份移动到本地驱动器。

最后,我设置了远程数据库的浅表副本(手动,知道 bug),并使用 timescaledb-parallel-copy -skip-header --db-name db_name --table table_name --file /path/to/chunk_n --workers 2 --reporting-period 10s 向本地Db中插入数据。