您可以使用原生 PostgreSQL pg_dumppg_restore 命令备份和恢复每个启用了 TimescaleDB 的自托管 PostgreSQL 数据库。这也适用于压缩超表,您无需在开始之前解压缩数据块。

如果您正在使用 pg_dump 定期备份,请确保跟踪您正在运行的 PostgreSQL 和 TimescaleDB 的版本。有关更多信息,请参阅转储和恢复数据库时版本不匹配

本页向您展示如何

您还可以在不同版本的 TimescaleDB 之间升级

  • 要备份的源数据库和要恢复的目标数据库。
  • 在您的迁移机器上安装 psqlpg_dump PostgreSQL 客户端工具。

您可以使用 pg_dumppsql 备份和恢复整个数据库。

在终端中

  1. 设置您的连接字符串

    这些变量保存用于备份的源数据库和用于恢复的目标数据库的连接信息

    export SOURCE=postgres://<user>:<password>@<source host>:<source port>/<db_name>
    export TARGET=postgres://<user>:<password>@<source host>:<source port>
  2. 备份您的数据库

    pg_dump -d "$SOURCE" \
    -Fc -f <db_name>.bak

    您可能会在 pg_dump 运行时看到一些错误。请参阅自托管 TimescaleDB 故障排除,以检查它们是否可以安全地忽略。

  3. 从备份恢复您的数据库

    1. 连接到您的目标数据库

      psql -d "$TARGET"
    2. 创建一个新的数据库并启用 TimescaleDB

      CREATE DATABASE <restoration database>;
      \c <restoration database>
      CREATE EXTENSION IF NOT EXISTS timescaledb;
    3. 使您的数据库处于正确的恢复状态

      SELECT timescaledb_pre_restore();
    4. 恢复数据库

      pg_restore -Fc -d <restoration database> <db_name>.bak
    5. 使您的数据库恢复正常运行

      SELECT timescaledb_post_restore();

      请勿将 pg_restore-j 选项一起使用。此选项无法正确恢复 TimescaleDB 目录。

pg_dump 提供了允许您指定要备份的表或模式的标志。但是,使用这些标志意味着转储缺少 TimescaleDB 理解它们之间关系所需的必要信息。即使您显式指定了超表及其所有组成数据块,转储仍然不包含在恢复时重新创建超表所需的所有信息。

要备份单个超表,请备份数据库模式,然后仅备份您需要的表。您也可以使用此方法备份单个普通表。

在终端中
  1. 设置您的连接字符串

    这些变量保存用于备份的源数据库和用于恢复的目标数据库的连接信息

    export SOURCE=postgres://<user>:<password>@<source host>:<source port>/<db_name>
    export TARGET=postgres://<user>:<password>@<source host>:<source port>/<db_name>
  2. 备份数据库模式和单个表

    1. 备份超表模式

      pg_dump -s -d $SOURCE --table <table-name> > schema.sql
    2. 将超表数据备份到 CSV 文件

      对于每个要备份的超表

      psql -d $SOURCE \
      -c "\COPY (SELECT * FROM <table-name>) TO <table-name>.csv DELIMITER ',' CSV"
  3. 将模式恢复到目标数据库

    psql -d $TARGET < schema.sql
  4. 从备份恢复超表

    对于每个要备份的超表

    1. 重新创建超表

      psql -d $TARGET -c "SELECT create_hypertable(<table-name>, <partition>)"

      当您创建新的超表时,您不需要使用与源数据库中存在的参数相同的参数。如果需要,这可以为您提供重新组织超表的好机会。例如,您可以更改分区键、分区数或数据块间隔大小。

    2. 恢复数据

      psql -d $TARGET -c "\COPY <table-name> FROM <table-name>.csv CSV"

      PostgreSQL 中的标准 COPY 命令是单线程的。如果您有大量数据,可以使用 timescaledb-parallel-copy 加速复制。

最佳实践是一次备份和恢复一个数据库。但是,如果您拥有安装了 TimescaleDB 的 PostgreSQL 实例的超级用户访问权限,则可以使用 pg_dumpall 备份集群中的所有 PostgreSQL 数据库,包括所有数据库共有的全局对象,即数据库角色、表空间和权限授予。您可以使用 psql 恢复 PostgreSQL 实例。有关更多信息,请参阅PostgreSQL 文档

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页