PostgreSQL 大对象导出报错问题分析
1、前言
在处理用户问题过程遇到一个问题。用户通过pg_dump导出 bytea 对象时,当行的大小超过 1G时,会报错:
[v8r6c5b41@dbhost01 ~]$ sys_dump -t t1_bytea -f 1.dmp -U system testsys_dump: error: Dumping the contents of table "t1_bytea" failed: PQgetResult() failed.sys_dump: error: Error message from server: ERROR: invalid memory alloc request size 1298083843sys_dump: error: The command was: COPY public.t1_bytea (id1, id2) TO stdout;
我们知道,bytea 类型最大存储是 1G ,因此,实际的存储不可能超过1G。 那怎么会有这个问题了?
2、问题复现
构造两个二进制的数据文件:
[root@dbhost01 dbdata]# ls -l *tar
-rw-r--r-- 1 root root 649041920 May 19 17:15 1.tar
-rw-r--r-- 1 root root 1734932480 May 19 19:12 2.tar
创建测试表:
create table t1_bytea(id1 bytea,id2 bytea) ;
插入数据:
--单个字段长度超 1G , 报错
test=# insert into t1_bytea(id1) values(sys_read_binary_file('/dbdata/2.tar'));
ERROR: requested length too large
--单个字段不超过 1G, 但两个字段总大小超过 1G , 报错。
test=# insert into t1_bytea values(sys_read_binary_file('/dbdata/1.tar'),sys_read_binary_file('/dbdata/1.tar'));
ERROR: invalid memory alloc request size 1298083896
--先insert 单个字段,再 update 另一个字段,使得总大小超过 1G , 这种情况下不报错。
test=# insert into t1_bytea(id1) values(sys_read_binary_file('/dbdata/1.tar'));
INSERT 0 1
test=# update t1_bytea set id2=sys_read_binary_file('/dbdata/1.tar');
UPDATE 1
--insert select 方式不影响
test=# insert into t1_bytea select * from t1_bytea;
INSERT 0 1
验证导出数据:
[v8r6c5b41@dbhost01 ~]$ sys_dump -t t1_bytea -f 1.dmp -U system test
sys_dump: error: Dumping the contents of table "t1_bytea" failed: PQgetResult() failed.
sys_dump: error: Error message from server: ERROR: invalid memory alloc request size 1298083843
sys_dump: error: The command was: COPY public.t1_bytea (id1, id2) TO stdout;
3、结论分析
1、不仅列的大小有 1G 的限制,行的大小也有 1G 的限制;
2、插入数据时,如果一行的数据超过 1G , 则不允许插入;
3、通过 insert 小于 1G 的数据,后续再通过update,可以使得整行数据超过 1G。这也是上述 pg_dump 报错的根本原因。
PostgreSQL 大对象导出报错问题分析的更多相关文章
- 数据泵导出报错ORA-31693 ORA-02354 ORA-01466
		1.Oracle数据泵导出schema时有报错: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - P ... 
- @Autowired报错原因分析和4种解决方案!
		上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 IDEA 报错,但程序却能正常的执行,那这其中的原因又是为何?  报错原因分析 报错的原因 ... 
- [转]ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义
		http://blog.csdn.net/qq_19524879/article/details/51313205 ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义 ... 
- 黄聪:Wordpress、PHP使用POST数据过大导致MySQL server has gone away报错原因分析
		错误原因: 当POST的数据超过 max_allowed_packet 就会报 MySQL server has gone away 的错误. 1.查看当前Mysql的 max_allowed_pac ... 
- MySQL server has gone away报错原因分析/
		在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高. 程序中报错: MySQL server has gone away 是什么意思? 如何避免? 因此,感觉有必要总结一 ... 
- saltstack配置安装的一些关键步骤及安装时各种报错的分析
		以下其他仅做参考,官方网址才是安装重点:http://docs.saltstack.cn/topics/installation/rhel.html 与安装相关的一些文档或资料: 一.linux服务器 ... 
- MySQL server has gone away报错原因分析及解决办法
		原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ... 
- nuxtjs在vue组件中使用window对象编译报错的解决方法
		我们知道nuxtjs是做服务端渲染的,他有很多声明周期是运行在服务端的,以及正常的vue声明周期mounted之前均是在服务端运行的,那么服务端是没有比如window对象的location.navag ... 
- 数据库数据导入/导出报错:无法在只读列“Id”中插入数据。
		本文仅供小白参考,大佬请随意...... 本例是:从vs 2017自带的localDB数据库的数据---导出到---->Sql Server 2008中的相应数据库中 1. 导出数据库: 2. ... 
随机推荐
- node环境下怎样优化引入多文件(实现自动化)
			const mocks = [];function getJsonFiles(jsonPath) {function findJsonFile(path) {let files = fs.readdi ... 
- 实现领域驱动设计 - 使用ABP框架  - 创建实体
			用例演示 - 创建实体 本节将演示一些示例用例并讨论可选场景. 创建实体 从实体/聚合根类创建对象是实体生命周期的第一步.聚合/聚合根规则和最佳实践部分建议为Entity类创建一个主构造函数,以保证创 ... 
- SAP 实例 12  List Box with Value List from PBO Module
			REPORT demo_dynpro_dropdown_listbox. DATA: name TYPE vrm_id, list TYPE vrm_values, value LIKE LINE O ... 
- 学习笔记-JDBC连接数据库操作的步骤
			前言 这里我就以JDBC连接数据库操作查询的步骤作以演示,有不到之处敬请批评指正! 一.jdbc连接简要步骤 1.加载驱动器. 2.创建connection对象. 3.创建Statement对象. 4 ... 
- 抓包整理外篇——————autoResponder、composer 、statistics [ 三]
			前言 经过了前文的介绍的部分已经能够为自己抓包提供一个舒适的环境了,但是舒服的拿到我们的包后,可能有些需求还是难以搞定,fiddler 提供了我们一些其他模块,让我们工作轻松,请往下看. 正文 aut ... 
- 深度学习基础-基于Numpy的感知机Perception构建和训练
			1. 感知机模型 感知机Perception是一个线性的分类器,其只适用于线性可分的数据. f(x) = sign(w.x + b) 其试图在所有线性可分超平面构成的假设空间中找 ... 
- github碰到的问题
			下载问题 自己编译一下 mvn clear mvn compile mvn package 自己编译之后的文件,然后解压即可,第一次自己傻傻的,直接用源码跑,少报错! 项目预览问题 添加1s即可 下载 ... 
- 基于图的深度优先搜索策略(耿7.10)--------西工大noj
			 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ... 
- scrollTop实例
			<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ... 
- AI智能剪辑,仅需2秒一键提取精彩片段
			如今短视频已成为人们娱乐社交的主要形式,很多用户也开始由观众逐渐转变为短视频制作传播者,然而复杂的视频剪辑工具却令他们望而止步.如何才能降低短视频制作剪辑门槛,让更多无经验者也能制作出优质的短视频内容 ... 
