pg_dump
изхвърля всяка дъщерна таблица отделно и независимо от техните родители, така че когато изключите хипертаблица, нейните таблици с парчета ще бъдат изхвърлени. Така наблюдавате, че всички таблици с парчета все още са изхвърлени.
Обърнете внимание, че изключването на хипертаблици и парчета няма да работи за правилното възстановяване на дъмпа в екземпляр на TimescaleDB, тъй като метаданните на TimescaleDB няма да съответстват на действителното състояние на базата данни. TimescaleDB поддържа каталожни таблици с информация за хипертаблици и парчета и те са просто още една потребителска таблица за pg_dump
, така че ще ги изхвърли (което е важно), но когато бъдат възстановени, те ще съдържат всички хипертаблици и парчета, които са били в базата данни преди изхвърлянето.
Така че трябва да изключите данни от таблиците, които искате да изключите (не самите хипертаблици или парчета), което ще намали времето за изхвърляне и възстановяване. Тогава ще е необходимо да премахнете изключените хипертаблици след възстановяването. Изключвате данни от таблица с pg_dump
параметър --exclude-table-data
. Има проблем в репото на TimescaleDB GitHub, което обсъжда как да изключите данни от хипертаблица от дъмп . Проблемът предлага как да генерирате низа за изключване:
SELECT string_agg(format($$--exclude-table-data='%s.%s'$$,coalesce(cc.schema_name,c.schema_name), coalesce(cc.table_name, c.table_name)), ' ')
FROM _timescaledb_catalog.hypertable h
INNER JOIN _timescaledb_catalog.chunk c on c.hypertable_id = h.id
LEFT JOIN _timescaledb_catalog.chunk cc on c.compressed_chunk_id = cc.id
WHERE h.schema_name = <foo> AND h.table_name = <bar> ;
Като алтернатива можете да намерите hypertable_id
и изключете данни от всички таблици на парчета с префикс ID на хипертаблица. Намерете hypertable_id
от каталожна таблица _timescaledb_catalog.hypertable
:
SELECT id
FROM _timescaledb_catalog.hypertable
WHERE schema_name = 'mySchema' AND table_name = 'hyper1';
Да приемем, че id е 2. След това изхвърлете базата данни според инструкциите :
pg_dump -U user -Fc -f TestDB_Backup.bak \
--exclude-table-data='_timescaledb_internal._hyper_2*' TestDB