操作bytea类型
来源:互联网 发布:华为网络机顶盒插上u盘 编辑:程序博客网 时间:2024/05/16 06:42
如果想要在PostgreSQL中存储二进制数据,例如存储Word、Excel文档,图片文件等,可以使用bytea类型的列。bytea类型是PostgreSQL特有的存储二进制数据的字段类型,与SQL标准中的BLOB和BINARY LARGE OBJECT类型异曲同工。这在PostgreSQL文档的bytea类型介绍中有所说明。
接下来先说说如何向表中插入、更新bytea数据。
PostgreSQL允许在SQL命令中包含bytea类型的数据,以便能够使用INSERT向表中插入含有二进制数据的记录,使用UPDATE和调用与bytea类型相关的函数更新和操作bytea类型数据。二进制数据是一个字节序列,然而SQL命令是文本字符串,怎样在SQL中写入二进制数据呢?答案很简单,把每一个字节转换成对应的三位十进制数字的八进制数字符串表示,以双斜线做为前缀,即0x00表示为\\000、0x2C表示为\\02C、0xFF表示为\\377,并按照bytea类型的要求在字符串前端的单引号外注明E。举例如下:
INSERT INTO table1 (fileid, filename, content)VALUES (1, 'filename.doc', E'\\000\\001\\002');
INSERT INTO table1 (fileid, filename, content)VALUES (2, 'anotherfile.jpg', E'\\000\\377');
UPDATE table1 SET content = E'\\000\\000\\000'WHERE fileid = 1;
UPDATE table1 SET content = content || E'\\377\\377\\377'WHERE fileid = 2;
可以在INSERT INTO中包含整个文件的bytea类型字符串,也可以像上面第四行那样,分块追加。对于短小的二进制数据,在命令控制台中编辑SQL命令也未尝不可。但是如果要存储一个图片文件或者Word文档之类的大型二进制数据的时候,就需要借助数据访问借口,或者自己写一个字节转换程序,直接操作SQL语句。
插入bytea数据后可以使用SELECT语句获取它。如下所示:
SELECT content FROM table1;
在命令控制台中,我们会看到以输入时的字符串格式输出二进制数据,这是PostgreSQL做的转换。在Python中使用psycopg2模块,执行上述SELECT语句后能够获得原始的二进制字节字符串,可以直接写入二进制文件。
顺便说明一下。对于字节的转换,PostgreSQL的文档说的非常详细,按照零字节、单引号、斜线,以及字符的可打印性分别作了讨论。原因是需要逃逸单引号和斜线字符,另外可打印字符可以不作转换,直接出现。
- 操作bytea类型
- JAVA存取PostgreSQL二进制类型bytea
- Postgres bytea类型 转换及查看方法
- postgreSQL 操作符不存在: character = bytea
- MFC中读写postgres数据库bytea类型着重处
- 如何向postgreSQL中添加bytea类型的大对象数据
- postgresql图片等二进制数据的存储(copy命令,bytea类型)
- 如何向postgreSQL中添加bytea类型的大对象数据
- PostgreSQL:bytea字段读取结果错误
- 操作image类型数据
- SQL 操作时间类型
- JAVA时间类型操作
- 矩阵类型及其操作
- Oracle 操作日期类型
- 类型转换操作符
- Java日期类型操作
- 类型转换 数值操作
- SQL类型操作集合
- jetty报错: Open quote is expected for attribute "{1}" associated with an element type "BORDER".
- Plus One
- Text Justification
- Sqrt(x)
- struts2的登录和退出
- 操作bytea类型
- Have Vim check automatically if the file has changed externally
- 用matlab为modelsim生成数据源(VHDL)
- cocos2d-x 实战 Dots ( 一 ) – 搭建主界面
- 小测Hyper Estraier性能
- 熬之滴水穿石:Servlet--Web万物之源(6)
- 黑马程序员-七千面试题交通管理系统
- 程序员:选择效率,还是选择质量?
- struts2生成session的方法:ActionContext.getContext().getSession()