pg_dump
dumpt elke onderliggende tabel afzonderlijk en onafhankelijk van hun ouders, dus als u een hypertabel uitsluit, worden de chunk-tabellen nog steeds gedumpt. Zo zie je dat alle chunk-tabellen nog steeds worden gedumpt.
Houd er rekening mee dat het uitsluiten van hypertabellen en chunks niet werkt om de dump correct te herstellen in een TimescaleDB-instantie, aangezien TimescaleDB-metagegevens niet overeenkomen met de werkelijke status van de database. TimescaleDB onderhoudt catalogustabellen met informatie over hypertabellen en chunks en het zijn gewoon andere gebruikerstabellen voor pg_dump
, dus het zal ze dumpen (wat belangrijk is), maar wanneer ze worden hersteld, zullen ze alle hypertabellen en chunks bevatten, die zich vóór de dump in de database bevonden.
U moet dus gegevens uitsluiten van de tabellen die u wilt uitsluiten (niet hypertables of chunks zelf), wat de dump- en hersteltijd verkort. Dan is het nodig om de uitgesloten hypertabellen na het herstel te verwijderen. U sluit tabelgegevens uit met pg_dump
parameter --exclude-table-data
. Er is een probleem in de TimescaleDB GitHub-repo, die bespreekt hoe hypertabelgegevens van een dump kunnen worden uitgesloten . Het probleem geeft aan hoe u de tekenreeks voor uitsluiten kunt genereren:
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> ;
Als alternatief kunt u hypertable_id
. vinden en sluit gegevens uit van alle chunk-tabellen die zijn voorafgegaan door de hypertable-id. Zoek hypertable_id
uit catalogustabel _timescaledb_catalog.hypertable
:
SELECT id
FROM _timescaledb_catalog.hypertable
WHERE schema_name = 'mySchema' AND table_name = 'hyper1';
Laten we zeggen dat de id 2 is. Dump vervolgens de database volgens de instructies :
pg_dump -U user -Fc -f TestDB_Backup.bak \
--exclude-table-data='_timescaledb_internal._hyper_2*' TestDB