gpt4 book ai didi

postgresql - 无法使用 pg_dump PostgreSQL 备份超表 TimescaleDB 数据库

转载 作者:行者123 更新时间:2023-12-04 16:25:47 34 4
gpt4 key购买 nike

用于备份的命令

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: 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 willnot copy any data.


Reference Image:
有什么建议可以备份 TimescaleDB 超表?

最佳答案

在 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 会打印一条通知,指出您正在尝试转储一个空的 super 表。
这样做的原因是,如果您仅使用 COPY 直接转储超表,它根本不会转储任何数据,了解这一点很有用,否则很容易出错。由于无法区分您运行 COPY 的情况直接在单个表上并使用 pg_dump (转储所有表),当您使用 pg_dump 时也会打印此通知,但它是无害的。
您应该检查实际转储输出以查看子表是否已实际转储。

关于postgresql - 无法使用 pg_dump PostgreSQL 备份超表 TimescaleDB 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64478510/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com