用于备份的命令
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超表吗?
发布于 2020-10-22 10:22:08
在TimescaleDB中,超表是一个空表,数据存储在称为块的子表中。使用\d+命令可以在psql中看到超表的结构
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时也会打印此通知,但这是无害的。
您应该检查实际的转储输出,以确保子表实际上已被转储。
https://stackoverflow.com/questions/64478510
复制相似问题