PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

pg_dump dengan --exclude-table masih menyertakan tabel-tabel itu di latar belakang SALIN perintah yang dijalankannya?

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 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pelanggaran indeks unik selama pembaruan

  2. Mengumumkan Barman 1.0, Manajer Pencadangan dan Pemulihan untuk PostgreSQL

  3. Optimalkan kueri dengan OFFSET di meja besar

  4. Postgres:pilih jumlah nilai dan kemudian jumlahkan ini lagi

  5. Mengapa NULL tidak dapat dikonversi ke null JSON di postgreSQL?