当前位置: 首页 > news >正文

PostgreSQL 大数据量(超过50GB)导出方案

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 分别跟模式名.表名 库名,如果省略库名则默认从与用户名同名的库中导出表。

二、大文件导出

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等

优化建议

  1. ​关闭索引和触发器​​:在导出前考虑禁用非关键索引和触发器,导出后再重建

  2. ​调整服务器参数​​:临时增加maintenance_work_mem等内存参数可提高导出性能

  3. ​网络优化​​:如果导出到远程,考虑使用压缩传输

    pg_dump -U username -d database_name -t large_table -Fc | gzip | ssh user@remote "cat > /path/to/backup.gz"
    

http://www.lryc.cn/news/589575.html

相关文章:

  • DeepSDF论文复现1---数据集生成2---原理解析
  • MIPI DSI(五) DBI 和 DPI 格式
  • 生产问题排查-数据库连接池耗尽
  • bytetrack漏检补齐
  • 2025年夏Datawhale AI夏令营机器学习
  • 数据怎么分层?从ODS、DW、ADS三大层一一拆解!
  • Flink Watermark原理与实战
  • omniparser v2 本地部署及制作docker镜像(20250715)
  • 驱动开发系列61- Vulkan 驱动实现-SPIRV到HW指令的实现过程(2)
  • 定时器更新中断与串口中断
  • Claude 背后金主亚马逊亲自下场,重磅发布 AI 编程工具 Kiro 现已开启免费试用
  • CUDA 环境下 `libcuda.so` 缺失问题解决方案
  • 2-Nodejs运行JS代码
  • 基于按键开源MultiButton框架深入理解代码框架(二)(指针的深入理解与应用)
  • css-css执行的三种方式和css选择器
  • 【leetcode】263.丑数
  • 邮件伪造漏洞
  • 再见吧,Windows自带记事本,这个轻量级文本编辑器太香了
  • Rust基础[part4]_基本类型,所有权
  • Java 集合 示例
  • 【Qt】插件机制详解:从原理到实战
  • redisson tryLock
  • HAProxy双机热备,轻松实现负载均衡
  • [Python] -实用技巧6-Python中with语句和上下文管理器解析
  • Hessian矩阵在多元泰勒展开中如何用于构造优化详解
  • 记一次POST请求中URL中文参数乱码问题的解决方案
  • LeetCode 1888. 使二进制字符串字符交替的最少反转次数
  • 整除分块练习题
  • 使用Spring Cloud LoadBalancer报错java.lang.IllegalStateException
  • AI助手指南:从零开始打造Python学习环境(VSCode + Lingma/Copilot + Anaconda + 效率工具包)