pgsql导出导入超过50G数据、解决方法

一、遇到的问题: 

最近要迁移服务器,文件、图片、视频都好说,最后到pgsql了导出就88G大的纯sql300G,还是压缩后的

 源文件快1个T了,

遇到问题,导出的时候时间一长就超时。。。。导致导出失败,时间够了....导出的文件太大。。。服务器硬盘又满了。。。。。,大表能导出了,但是纯sql超过100G就导入失败,不是超时,就是编码不对,一导导一天,一个报错全白费,就从头来。。。。。哎,没经验呀。经过各种坑,最后导入成功,分享一下成功经验。

二、总结经验:大文件导出

 先测试命令

 pg_dump -p 5432 -U postgresql -d huaxiang -n hx_syn_data -Fd -j 32 -Z 5 -f /mnt/mydik/pgsql/hx_syn_data_dir/ 

 2.1导出 

使用 nohup 防止超时  直接使用pg_dump,记得配置全局的环境变量,

nohup pg_dump -p 5432 -U postgresql -d huaxiang -n hx_syn_data -Fd -j 32 -Z 5 -f /mnt/mydik/pgsql/hx_syn_data_dir/ > pg_dump.log 2>&1 &
  • -p:端口
  • -U:用户 postgresql
  • -d:数据库 根据自己实际情况改
  • -n:数据库中的模式
  • -Fd:使用目录格式,每个表一个文件
  • -j 32:使用32个并行工作线程   
  • -Z 5:压缩
  • 输出到指定目录而非单个文件
  • -Z 5:启用Zlib压缩(级别5,平衡压缩率和速度

导出之后一个表一个文件,还有一个toc.dat文件

# 查看pg_dump进程是否仍在运行 ps aux | grep pg_dump

# 检查是否有僵尸进程 top -b -n 1 | grep defunct

2.2然后是导入

 pg_restore -p 5432 -U postgresql -d huaxiang  -n hx_syn_data  -j 32 -Fd /mnt/mydik/pgsql/hx_syn_data_dir/

我的通过上面的就导出,导入成功了。

-----------------------------------------------------如果数据源超过1T可以使用下面的方案

分批次导出大表

# 先导出结构 ./pg_dump -p 5432 -U postgresql -d huaxiang -n hx_syn_data -s -Fd -j 8 -f /mnt/mydik/pgsql/hx_syn_data_structure/ # 然后按表分批导出数据 for table in $(psql -p 5432 -U postgresql -d huaxiang -c "\dt hx_syn_data.*" -At | cut -d'|' -f2); do ./pg_dump -p 5432 -U postgresql -d huaxiang -t hx_syn_data.$table -a -Fd -j 2 -f /mnt/mydik/pgsql/hx_syn_data_data/${table}_data/ done

然后是导入

 pg_restore -p 5432 -U postgresql -d huaxiang  -n hx_syn_data  -j 32 -Fd /mnt/mydik/pgsql/hx_syn_data_dir/

导入的时候也非常快,我的导出13G也就十几秒。
 

 

将 PostgreSQL 数据库中的数据导入到人大金仓数据库(Kingbase)中,需要考虑到人大金仓是基于 PostgreSQL 的国产数据库,因此在语法和工具支持上具有一定的兼容性,但仍需要注意两者之间的差异。 ### 数据导入流程 #### 1. 数据导出 首先需要从 PostgreSQL导出数据,可以使用 `pg_dump` 工具进行数据导出。该工具支持导出表结构、数据以及索引等信息,推荐分阶段导出以方便后续修改。 - **导出表结构** ```bash ./pg_dump -h <host> -p <port> -U <user> -d <db_name> -n <schema_name> --section=pre-data > /opt/bak/schema_table.dmp ``` - **导出数据** ```bash ./pg_dump -h <host> -p <port> -U <user> -d <db_name> -n <schema_name> --section=data > /opt/bak/schema_data.dmp ``` - **导出索引** ```bash ./pg_dump -h <host> -p <port> -U <user> -d <db_name> -n <schema_name> --section=post-data > /opt/bak/schema_index.dmp ``` #### 2. 修改导出文件 由于人大金仓在某些语法和系统表命名上与标准 PostgreSQL 存在差异,需要对导出SQL 文件进行一定的修改: - **插件名称替换**:将 PostgreSQL 中的插件名称替换为人大金仓支持的对应名称。 - **系统表与模式替换**:将 `pg_` 前缀替换为 `sys_`,例如 `pg_class` 替换为 `sys_class`。 - **所有者信息修改**:将 `Owner: user` 或 `OWNER TO user` 的语句调整为人大金仓支持的格式。 #### 3. 数据导入 完成文件修改后,可以使用人大金仓的客户端工具(如 `ksql`)将数据导入目标数据库。 - **导入表结构** ```bash ksql -h <host> -p <port> -U <user> -d <db_name> -f /opt/bak/schema_table.dmp ``` - **导入数据** ```bash ksql -h <host> -p <port> -U <user> -d <db_name> -f /opt/bak/schema_data.dmp ``` - **导入索引** ```bash ksql -h <host> -p <port> -U <user> -d <db_name> -f /opt/bak/schema_index.dmp ``` ### 注意事项 - **字符集与大小写敏感**:在创建数据库时,需确保字符集和大小写敏感设置与源数据库一致。 - **模式管理**:PostgreSQL 中一个数据库可以包含多个模式,而人大金仓也支持多模式管理,导入前需确保目标数据库中已创建相应的模式。 - **工具兼容性**:人大金仓的命令行工具 `ksql` 与 PostgreSQL 的 `psql` 类似,但在某些参数上可能有所不同,需参考官方文档进行调整。 - **备份与恢复策略**:可使用人大金仓提供的原生备份工具进行定期备份,确保数据安全。 ### 示例脚本 以下是一个简化版的备份脚本示例,用于从 PostgreSQL 导出数据并准备导入人大金仓: ```bash # 导出表结构 pg_dump "host=${DATABASE_IP} port=${DATABASE_PORT} user=${DATABASE_USER} dbname=${DATABASE_NAME} password=${DATABASE_PASSWORD}" --section=pre-data -f ${BACKUP_DIR}/schema_table.sql # 导出数据 pg_dump "host=${DATABASE_IP} port=${DATABASE_PORT} user=${DATABASE_USER} dbname=${DATABASE_NAME} password=${DATABASE_PASSWORD}" --section=data -f ${BACKUP_DIR}/schema_data.sql # 导出索引 pg_dump "host=${DATABASE_IP} port=${DATABASE_PORT} user=${DATABASE_USER} dbname=${DATABASE_NAME} password=${DATABASE_PASSWORD}" --section=post-data -f ${BACKUP_DIR}/schema_index.sql # 修改导出文件(示例替换) sed -i 's/pg_/sys_/g' ${BACKUP_DIR}/schema_table.sql sed -i 's/Owner: postgres/Owner: kingbase/g' ${BACKUP_DIR}/schema_table.sql ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

舰长115

码字不易如果觉得还不错谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值