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

相关推荐
IvorySQL10 小时前
PostgreSQL 日报|恢复期 COPY TO 未日志表修复(10 月 21 日)
数据库·postgresql·区块链
贝猫说python11 小时前
大模型比赛2.3智能体开发(工具调用智能问答助手)
数据库·oracle
许彰午13 小时前
28-ORA-01110数据文件读取错误
数据库·oracle
凯凯姜13 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
猫咪很可爱13 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP15 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner15 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈16 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶16 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全16 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全