這篇文章談到的是database級別的備份
pg_dump備份, 有多個參數和選項
我想到的一個場景它沒有滿足:
備份A庫BschemaC表,
輸出的sql文件 或 歸檔文件中 create 和 copy 的目標 是B . C
恢復時, 我想恢復到B2.C
, 這個地方就無解,
數據少, 文本還能替換,數據多到文件打不開怎么辦
既然我們提前考慮到了這種情況, 就盡量提前規避
我總結的備份步驟如下:
第一步: 無論如何, 不管是備份database, 還是schema, 都要先備份結構, trigger, function ,table,
因為它們之間可能存在依賴關系, 避免恢復數據時事務失敗, 不必要的vaccum
-s參數意味着只備份結構, 不備份data
pg_dump --host=localhost --port=6000 --username=demo2 --dbname=demo2 --schema=public -s
--file=C:\Users\zhangtianxiao\Documents\pgsql\t_b.sql
第二步: 備份數據, 備份數據可以具體到database, schema, table級別,
當整個庫, 整個schema, 又或是某張表, 總體數據量太多, 整體備份會耗時很久,
我們可以分別備份,恢復
-s參數意味着只備份數據, 不備份結構
pg_dump --host=localhost --port=6000 --username=demo2 --dbname=demo2 --schema=public
-t t_b -a --file=C:\Users\zhangtianxiao\Documents\pgsql\t_b.sql
恢復數據:
pg_dump中備份的sql 或 歸檔文件中 create 和 copy 的目標已經是 schema_name + table_name,
所以這里只需要提供dbname
psql --host=localhost --port=6000 --username=demo2 db_name < C:\Users\zhangtianxiao\Documents\pgsql\t_b.sql