PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

pg_dump с --exclude-table все още включва тези таблици във фоновите команди COPY, които изпълнява?

pg_dump изхвърля всяка дъщерна таблица отделно и независимо от техните родители, така че когато изключите хипертаблица, нейните таблици с парчета ще бъдат изхвърлени. Така наблюдавате, че всички таблици с парчета все още са изхвърлени.

Обърнете внимание, че изключването на хипертаблици и парчета няма да работи за правилното възстановяване на дъмпа в екземпляр на TimescaleDB, тъй като метаданните на TimescaleDB няма да съответстват на действителното състояние на базата данни. TimescaleDB поддържа каталожни таблици с информация за хипертаблици и парчета и те са просто още една потребителска таблица за pg_dump , така че ще ги изхвърли (което е важно), но когато бъдат възстановени, те ще съдържат всички хипертаблици и парчета, които са били в базата данни преди изхвърлянето.

Така че трябва да изключите данни от таблиците, които искате да изключите (не самите хипертаблици или парчета), което ще намали времето за изхвърляне и възстановяване. Тогава ще е необходимо да премахнете изключените хипертаблици след възстановяването. Изключвате данни от таблица с pg_dump параметър --exclude-table-data . Има проблем в репото на TimescaleDB GitHub, което обсъжда как да изключите данни от хипертаблица от дъмп . Проблемът предлага как да генерирате низа за изключване:

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

Като алтернатива можете да намерите hypertable_id и изключете данни от всички таблици на парчета с префикс ID на хипертаблица. Намерете hypertable_id от каталожна таблица _timescaledb_catalog.hypertable :

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

Да приемем, че id е 2. След това изхвърлете базата данни според инструкциите :

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. Cloud SQL Postgres Не е намерен подходящ драйвер за jdbc:postgres://google/

  2. Таблица като аргумент на функция на PostgreSQL

  3. Postgresql:Добавяне на елемент в обекти на json масив

  4. SQLAlchemy, Declarative, PostgreSQL:не може да създава таблици

  5. org.postgresql.util.PSQLException:Индексът на колоната е извън диапазона:3, брой колони:2