您可以将数据从自托管 Timescale 迁移到 TimescaleDB 托管服务,并自动化您最常见的操作任务。

TimescaleDB 托管服务创建一个名为 defaultdb 的数据库和一个名为 tsdbadmin 的默认用户帐户。您可以使用 Web 控制台,通过 UsersDatabases 选项卡创建其他用户和数据库。

您可以在 TimescaleDB 托管服务中切换不同的计划大小。但是,在转储过程中,请选择与当前分配的计划具有相同存储大小或稍大的计划大小。这允许您在迁移过程中限制停机时间,并拥有足够强大的 Timescale 计划。

警告

根据您的数据库大小和网络速度,迁移可能需要很长时间。在此期间,转储过程中发生的任何新写入都不会包含在内。为了防止数据丢失,请在开始转储过程之前关闭对旧数据库服务器的所有写入。尝试在不关闭先前服务器上的写入并同时运行转储的情况下进行冷运行迁移。这可以估算转储过程所需的时间。它还可以帮助您在不给客户造成停机的情况下练习实际操作。

确保您已拥有

  • 安装了 PostgreSQL pg_dumppg_restore 实用程序。
  • 安装了用于连接 PostgreSQL 的客户端。这些说明使用 psql,但任何客户端都可以。
  • 在 TimescaleDB 托管服务中创建了一个新的空数据库。有关更多信息,请参阅 安装 TimescaleDB 托管服务。为您的数据库配置足够的空间来容纳所有数据。
  • 检查您是否在 TimescaleDB 托管服务和源数据库上运行相同的主要 PostgreSQL 版本。有关升级 PostgreSQL 的信息,请参阅 自托管 TimescaleDB 的升级说明TimescaleDB 托管服务
  • 检查您是否在 TimescaleDB 托管服务和源数据库上运行相同的主要 TimescaleDB 版本。有关更多信息,请参阅 升级 Timescale 部分
注意

为了加快迁移速度,请压缩您的数据。您可以压缩当前未插入、更新或删除数据的任何块。完成迁移后,您可以根据正常操作的需要解压缩块。有关压缩和解压缩的更多信息,请参阅 压缩

  1. 使用您的源数据库连接详细信息,将源数据库中的所有数据转储到 dump.bak 文件中。如果提示您输入密码,请使用您的源数据库凭据,为了避免权限错误,请包含 --no-owner 标志

    pg_dump -U <SOURCE_DB_USERNAME> -W \
    -h <SOURCE_DB_HOST> -p <SOURCE_DB_PORT> --no-owner -Fc -v \
    -f dump.bak <SOURCE_DB_NAME>
  2. 在命令提示符下,使用您的 TimescaleDB 托管服务连接详细信息,将从 dump.bak 文件转储的数据恢复到您的 TimescaleDB 托管服务数据库中。要从多个数据库迁移,您可以重复一个接一个地转储或加载数据库的过程。 --jobs 选项指定用于并发转储和恢复数据库的 CPU 数量。

    pg_restore -d 'postgres://CLICK_TO:REVEAL_PASSWORD@demo.demoproject.timescaledb.io:19335/defaultdb?sslmode=require' --jobs 4 dump.bak
  3. 连接到您的新数据库,并通过在整个数据集上运行 ANALYZE 来更新您的表统计信息

    psql 'postgres://CLICK_TO:REVEAL_PASSWORD@demo.demoproject.timescaledb.io:19335/defaultdb?sslmode=require'
    defaultdb=> ANALYZE;

如果在迁移过程中看到这些错误,您可以安全地忽略它们。迁移仍然会成功发生。

  1. 使用 pg_dump 时出错

    pg_dump: warning: there are circular foreign-key constraints on this table:
    pg_dump: hypertable
    pg_dump: You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints.
    pg_dump: Consider using a full dump instead of a --data-only dump to avoid this problem.
    pg_dump: NOTICE: hypertable data are in the chunks, no data will be copied
    DETAIL: Data for hypertables are stored in the chunks of a hypertable so COPY TO of a hypertable will not copy any data.
    HINT: Use "COPY (SELECT * FROM <hypertable>) TO ..." to copy all data in hypertable, or copy each chunk individually.
  2. 使用 pg_restore 时出错

    pg_restore: while PROCESSING TOC:
    pg_restore: from TOC entry 4142; 0 0 COMMENT EXTENSION timescaledb
    pg_restore: error: could not execute query: ERROR: must be owner of extension timescaledb
    Command was: COMMENT ON EXTENSION timescaledb IS 'Enables scalable inserts and complex queries for time-series data';

关键词

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