1.正常導出
導出指定庫
./pg_dump -d test_db -p 2360 > /home/softwares/postgresql/test_db.sql
導出指定表
./pg_dump -p 2360 -U postgres -t test_schema.test_table test_db > /home/softwares/postgresql/m.sql
?-t參數說明,-t test_schema.test_table test_db 分別跟模式名.表名 庫名,如果省略庫名則默認從與用戶名同名的庫中導出表。
導出和導入
pg_dump -p 5432 -U postgresql -d huaxiang -n hx_syn_data -f /mnt/mydik/pgsql/hx_syn_data_schema.sqlpsql -p 5432 -U postgresql -d huaxiang -n hx_syn_data -f /data/hx_syn_data_schema.sql
二、大文件導出
1.?使用pg_dump的自定義格式與并行導出
pg_dump -U username -d database_name -t large_table -Fc -v -j 4 -f large_table.backup
-Fc
:使用自定義格式,支持壓縮和選擇性恢復-j 4
:啟用4個并行工作線程(根據服務器CPU核心數調整)-v
:顯示詳細進度信息
2. 使用目錄格式導出
pg_dump -U username -d dbname -t huge_table -Fd -v -j 8 -f /path/to/directory/pg_dump -U username -d dbname -t huge_table -Fd -j 16 -Z 5 -f /mnt/backup/huge_table_dir
-Fd
:使用目錄格式,每個表一個文件-j 8
:使用8個并行工作線程- 輸出到指定目錄而非單個文件
-Z 5
:啟用Zlib壓縮(級別5,平衡壓縮率和速度)
3. 使用COPY命令分批次導出
對于超大表,可以按條件分批次導出到多個CSV文件:
-- 在psql中執行
\copy (SELECT * FROM large_table WHERE id >= 1 AND id <= 10000000) TO '/path/to/part1.csv' WITH CSV HEADER;
\copy (SELECT * FROM large_table WHERE id >= 10000001 AND id <= 20000000) TO '/path/to/part2.csv' WITH CSV HEADER;
4. 使用pg_bulkload工具
pg_bulkload是專門為大數據量導入設計的工具,但也可以用于高效導出:
pg_bulkload -d database_name -U username -o "TYPE=CSV" -o "FILE=/path/to/output.csv" -t large_table
- 特點 繞過SQL層,直接訪問存儲格式
- 性能顯著高于常規方法
5. 結合split命令分割輸出文件
對于超大導出文件,可以使用Unix的split命令分割:
pg_dump -U username -d database_name -t large_table -F p | split -b 10G - large_table_part_
這將生成多個10GB的文件(large_table_part_aa, large_table_part_ab等
優化建議
??關閉索引和觸發器??:在導出前考慮禁用非關鍵索引和觸發器,導出后再重建
??調整服務器參數??:臨時增加maintenance_work_mem等內存參數可提高導出性能
??網絡優化??:如果導出到遠程,考慮使用壓縮傳輸
pg_dump -U username -d database_name -t large_table -Fc | gzip | ssh user@remote "cat > /path/to/backup.gz"