PostgreSQL大对象操作办法

大对象操作办法:

1.在PG中创建N个大对象,一个大对象即为一个OID。

select lo_create(0); //返回大对象的oid。

2.-- 写入数据到大对象,此处数据应该是上面导出的一行的列的二进制值

SELECT lo_write(large_object, 'Hello, Large Object!');

1.导出每个二进制的值,针对每个值建个大对象。

2.在原始表中把bytea字段改成OID类型。

//假设这是一个图像表,有一个字段名字,一个字段图像数据。这个oid类型就是一个大对象。

CREATE TABLE image(name text, raster oid);

//那么往图像里插入数据时,针对大对象字段就该调用函数lo_import,这是本地的文件导入进去:

INSERT INTO image VALUES('image1', lo_import('/tmp/screenshot.png'));

其实执行lo_import就会在pg里面生成大对象,这个大对象有自己的oid,底层是一个单独的数据文件,和表文件的存储隔离开来的。

可以通过select * from FROM pg_largeobject查询到这个大对象的一些信息。

所以针对那种表,有多少行记录意味着也就有多少大对象,且需要将表的那个字段的值,最好先搞下来再导入。

postgres=# INSERT INTO image VALUES('image1', lo_import('/tmp/screenshot.png'));

INSERT 0 1

postgres=# SELECT loid, COUNT(page no) FROM pg_largeobject GROUP BY loid;

loid | count

-------±------

24598 | 25

(1 row)

postgres=# SELECT raster, lo_export(raster, '/tmp/screenshot-e.png') FROM image WHERE name = 'image1';

raster | lo_export

--------±----------

24598 | 1

(1 row)

postgres=# ! md5sum /tmp/screenshot.png /tmp/screenshot-e.png

dc51d60215f547a897d4d73beba65ded /tmp/screenshot.png

dc51d60215f547a897d4d73beba65ded /tmp/screenshot-e.png

相关推荐
白帽攻防录1 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭2 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课2 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司2 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk3 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea4 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)4 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk5 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录6 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说7 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大