PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

pg_dump z --exclude-table nadal zawiera te tabele w uruchamianych w tle poleceniach KOPIUJ?

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 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz punkt 50 mil (północ, 45% NE, 45% SW)

  2. Postgres tablica json ostatnia data

  3. postgresql - wyzwalacz, aktualizacja znacznika czasu przy aktualizacji pola

  4. Nie można połączyć postgreSQL z psycopg2

  5. Konwersja między strefami czasowymi w Postgres