首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用TimescaleDB PostgreSQL备份超表PostgreSQL

无法使用TimescaleDB PostgreSQL备份超表PostgreSQL
EN

Stack Overflow用户
提问于 2020-10-22 08:43:58
回答 1查看 3.9K关注 0票数 9

用于备份命令

代码语言:javascript
复制
C:\Program Files\PostgreSQL\12\bin>pg_dump  -h localhost -U postgres -p 5432  -Fc -f "D:\Database Backup\temp_10.bak" GESEMS_Performace_Test.

错误:

pg_dump:注意:超表数据在块中,不会复制任何数据。详细信息:超表的数据存储在超表的块中,因此,对超表的复制不会复制任何数据。

有什么建议来备份TimescaleDB超表吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 10:22:08

在TimescaleDB中,超表是一个空表,数据存储在称为块的子表中。使用\d+命令可以在psql中看到超表的结构

代码语言:javascript
复制
postgres=# \d+ devices
                                          Table "public.devices"
 Column |           Type           | Collation | Nullable | Default | Storage | Stats target | Description 
--------+--------------------------+-----------+----------+---------+---------+--------------+-------------
 time   | timestamp with time zone |           | not null |         | plain   |              | 
 device | integer                  |           | not null |         | plain   |              | 
 temp   | double precision         |           |          |         | plain   |              | 
Indexes:
    "devices_pkey" PRIMARY KEY, btree ("time", device)
    "devices_device_time_idx" btree (device, "time" DESC)
    "devices_time_idx" btree ("time" DESC)
Triggers:
    ts_insert_blocker BEFORE INSERT ON devices FOR EACH ROW EXECUTE FUNCTION _timescaledb_internal.insert_blocker()
Child tables: _timescaledb_internal._dist_hyper_1_10_chunk,
              _timescaledb_internal._dist_hyper_1_11_chunk,
              _timescaledb_internal._dist_hyper_1_12_chunk,
              _timescaledb_internal._dist_hyper_1_13_chunk,
              _timescaledb_internal._dist_hyper_1_14_chunk,
              _timescaledb_internal._dist_hyper_1_15_chunk,
              _timescaledb_internal._dist_hyper_1_1_chunk,
              _timescaledb_internal._dist_hyper_1_2_chunk,
              _timescaledb_internal._dist_hyper_1_3_chunk,
              _timescaledb_internal._dist_hyper_1_4_chunk,
              _timescaledb_internal._dist_hyper_1_5_chunk,
              _timescaledb_internal._dist_hyper_1_6_chunk,
              _timescaledb_internal._dist_hyper_1_7_chunk,
              _timescaledb_internal._dist_hyper_1_8_chunk,
              _timescaledb_internal._dist_hyper_1_9_chunk

使用PostgreSQL pg_dump转储表时,它将分别转储父表和子表的内容。还原转储时,它将同时填充超表(父表)和块(子表)。

由于pg_dump在转储时使用标准的COPY命令提取表的内容,所以TimescaleDB会打印一个通知,说明您正在尝试转储一个超表,该超表是空的。

这样做的原因是,如果您只使用COPY直接转储超表,那么它根本不会转储任何数据,这一点很有用,因为否则很容易出错。由于无法区分直接在单个表上运行COPY的情况和使用pg_dump (转储所有表)的情况,所以在使用pg_dump时也会打印此通知,但这是无害的。

您应该检查实际的转储输出,以确保子表实际上已被转储。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64478510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档