如何从远程 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中插入数据。
我有一个远程不断增长的 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中插入数据。