【问题标题】:How to drop the oldest entries from a remote TimescaleDb, maintaining the full local backup of the database?如何从远程 TimescaleDb 中删除最旧的条目,维护数据库的完整本地备份?
【发布时间】:2020-05-12 04:54:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: database postgresql time-series backup timescaledb


    【解决方案1】:

    所以我决定逐块传输旧数据。

    首先,我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 将数据插入本地数据库。

    【讨论】:

    • SELECT show_chunks(older_than => interval '1 day'); 不起作用,它还需要表名。
    【解决方案2】:

    (这里是TimescaleDB的人)

    这里有两种主要方法:

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

    答案在某种程度上取决于您的数据/数据库的复杂程度。

    如果您希望将数据主要归档在单个超表中,我会推荐后者:使用show_chunks 确定哪些块在某个范围内,计算它们范围内的选择并将数据写入任何位置,并且然后在相同的范围内执行drop_chunks

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多