pg_dump
zrzuca każdą tabelę podrzędną osobno i niezależnie od jej rodziców, więc po wykluczeniu hipertabeli jej tabele fragmentów nadal będą zrzucane. W ten sposób widzisz, że wszystkie tabele porcji są nadal zrzucane.
Należy zauważyć, że wykluczenie hipertabeli i fragmentów nie będzie działać w celu prawidłowego przywrócenia zrzutu do wystąpienia TimescaleDB, ponieważ metadane TimescaleDB nie będą zgodne z rzeczywistym stanem bazy danych. TimescaleDB utrzymuje tabele katalogu z informacjami o hipertabelach i porcjach i są one po prostu kolejnymi tabelami użytkownika dla pg_dump
, więc je zrzuci (co jest ważne), ale po przywróceniu będą zawierać wszystkie hipertabele i porcje, które znajdowały się w bazie danych przed zrzutem.
Musisz więc wykluczyć dane z tabel, które chcesz wykluczyć (nie hipertabele lub same porcje), co skróci czas zrzutu i przywrócenia. Wtedy konieczne będzie usunięcie wykluczonych hipertabeli po przywróceniu. Wykluczasz dane z tabeli za pomocą pg_dump
parametr --exclude-table-data
. W repozytorium TimescaleDB GitHub występuje problem, który omawia, jak wykluczyć dane hipertabeli ze zrzutu . Problem sugeruje, jak wygenerować ciąg wykluczający:
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> ;
Alternatywnie możesz znaleźć hypertable_id
i wykluczyć dane ze wszystkich tabel porcji poprzedzonych identyfikatorem hipertabeli. Znajdź hypertable_id
z tabeli katalogu _timescaledb_catalog.hypertable
:
SELECT id
FROM _timescaledb_catalog.hypertable
WHERE schema_name = 'mySchema' AND table_name = 'hyper1';
Załóżmy, że identyfikator to 2. Następnie zrzuć bazę danych zgodnie z instrukcjami :
pg_dump -U user -Fc -f TestDB_Backup.bak \
--exclude-table-data='_timescaledb_internal._hyper_2*' TestDB