sql >> Databáze >  >> RDS >> PostgreSQL

pg_dump s --exclude-table stále obsahuje tyto tabulky v příkazech COPY na pozadí, které spouští?

pg_dump vypíše každou podřízenou tabulku samostatně a nezávisle na jejich rodičích, takže když vyloučíte hypertabulku, její tabulky bloků budou stále vypisovány. Tak vidíte, že všechny tabulky bloků jsou stále vypisovány.

Všimněte si, že vyloučení hypertabulek a bloků nebude fungovat pro správné obnovení výpisu do instance TimescaleDB, protože metadata TimescaleDB nebudou odpovídat skutečnému stavu databáze. TimescaleDB udržuje katalogové tabulky s informacemi o hypertabulkách a blocích a jsou to jen další uživatelské tabulky pro pg_dump , takže je vypíše (což je důležité), ale když budou obnoveny, budou obsahovat všechny hypertabulky a bloky, které byly v databázi před výpisem.

Musíte tedy vyloučit data z tabulek, které chcete vyloučit (nikoli samotné hypertabulky nebo bloky), což zkrátí dobu výpisu a obnovení. Poté bude nutné po obnovení zahodit vyloučené hypertabulky. Data tabulky vyloučíte pomocí pg_dump parametr --exclude-table-data . V úložišti TimescaleDB GitHub došlo k problému, který pojednává o tom, jak vyloučit hypertabulková data z výpisu . Problém navrhuje, jak vygenerovat řetězec vyloučení:

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> ;

Případně můžete najít hypertable_id a vyloučit data ze všech tabulek bloků s předponou hypertable id. Najděte hypertable_id z katalogové tabulky _timescaledb_catalog.hypertable :

SELECT id
FROM _timescaledb_catalog.hypertable
WHERE schema_name = 'mySchema' AND table_name = 'hyper1';

Řekněme, že id je 2. Poté vypište databázi podle pokynů :

pg_dump -U user -Fc -f TestDB_Backup.bak \
  --exclude-table-data='_timescaledb_internal._hyper_2*' TestDB 



  1. Testování jednotek příkazy DDL, které musí být v transakci

  2. Nastavení cesty ke třídě pro uloženou proceduru Java v Oracle

  3. Objednat ve skupině podle?

  4. Jak propojit databázi MySQL s projektem Objective-c?