pg_dump
membuang setiap tabel anak secara terpisah dan independen dari orang tuanya, sehingga ketika Anda mengecualikan hypertable, tabel potongannya akan tetap dibuang. Dengan demikian Anda mengamati semua tabel potongan masih dibuang.
Perhatikan bahwa mengecualikan hypertable dan potongan tidak akan berfungsi untuk memulihkan dump dengan benar ke instans TimescaleDB, karena metadata TimescaleDB tidak akan cocok dengan keadaan database yang sebenarnya. TimescaleDB memelihara tabel katalog dengan informasi tentang hypertables dan chunks dan mereka hanyalah tabel pengguna lain untuk pg_dump
, jadi itu akan membuangnya (yang penting), tetapi ketika dipulihkan, mereka akan berisi semua hypertable dan potongan, yang ada di database sebelum dump.
Jadi, Anda perlu mengecualikan data dari tabel yang ingin Anda kecualikan (bukan hypertables atau chunks itu sendiri), yang akan mengurangi waktu dump dan restore. Maka perlu untuk menghapus hypertable yang dikecualikan setelah pemulihan. Anda mengecualikan data tabel dengan pg_dump
parameter --exclude-table-data
. Ada masalah dalam repo GitHub TimescaleDB, yang mendiskusikan cara mengecualikan data hypertable dari dump . Masalah ini menyarankan cara membuat string pengecualian:
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> ;
Atau, Anda dapat menemukan hypertable_id
dan mengecualikan data dari semua tabel potongan yang diawali dengan id hypertable. Temukan hypertable_id
dari tabel katalog _timescaledb_catalog.hypertable
:
SELECT id
FROM _timescaledb_catalog.hypertable
WHERE schema_name = 'mySchema' AND table_name = 'hyper1';
Katakanlah id adalah 2. Kemudian dump database sesuai petunjuk :
pg_dump -U user -Fc -f TestDB_Backup.bak \
--exclude-table-data='_timescaledb_internal._hyper_2*' TestDB