选择不同的字节(或 Blob)
TLDR:在我看来,PostgreSQL 在处理distinct
和BLOB
类似字段时比 Oracle 具有更舒适的行为。我不是一个狂热的 Oracle 用户,至少不像我对 PostgreSQL 那样多。
最近几天,我发现我的一个应用程序存在问题:在
BLOB
向 Oracle 表中添加一列后,一些自动查询开始失败。一开始并不是那么简单,找出问题所在,但本质上我使用的ORM是生成一个带有distinct
子句的查询,而且似乎 Oracle 在涉及BLOB
或一个CLOB
字段。让我们看一个例子:
blobby
表格由一个varchar2
description
字段和一个bdata
类型的字段BLOB
。SQL> select distinct bdata, description from blobby;select distinct bdata, description from blobby *ERROR at line 1:ORA-00932: inconsistent datatypes: expected - got BLOB
复制
报告的错误对我来说有点模糊:ORA-00932:不一致的数据类型:预期 - 得到 BLOB没有向我提供足够的信息来了解系统期望的类型。但是,看到
BLOB
最后一部分让我对问题进行了推理。但是,一开始,我什至无法重现该问题,因为如果您不指定显式列列表,则相同的查询会起作用:
SQL> select distinct * from blobby;...6 rows selected.
复制
即使使用不同类型的强制转换,我也无法使查询工作,所以我猜当列被显式列出时,Oracle 无法处理查询。这就是问题所在:许多 ORM,包括我正在使用的 ORM,都会生成查询,其中所有列都被作为输出字段询问,因此 Oracle 拒绝运行查询。
PostgreSQL 怎么样?
我很好奇 PostgreSQL 如何处理相同的情况,假设BLOB
可以翻译成一个bytea
字段。testdb=> create table blobby( pk int generated always as identity,description text, bdata bytea, primary key( pk ) );testdb=> insert into blobby( description ) select 'Record ' || v fromgenerate_series( 1, 5 ) v;INSERT 0 5testdb=> \lo_import myfile.pdflo_import 50626testdb=> update blobby set bdata = lo_get( 50626 );UPDATE 5testdb=> \o test.csvtestdb=> \aOutput format is unaligned.testdb=> \f ';'Field separator is ";".testdb=> select distinct bdata, description from blobby;-- same as select distinct * from blobby% ls -1hs test.csv23M test.csv
复制
尽管是创建和填充表的初始部分,正如您可以看到
SELECT
使用显式列列表或通配符的作品。结论
我没有任何结论,我不责怪一个产品或另一个。他们只是在几乎相同的背景下表现不同。我最喜欢 PostgreSQL 方法,它看起来更自然。而且,Oracle 的错误信息在我看来很晦涩!
文章Select Distinct Bytea (or Blob) 已由Luca Ferrari 于 2021 年 8 月 4 日发布
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
王炸!OGG 23ai 终于支持从PostgreSQL备库抽取数据了
曹海峰
414次阅读
2025-03-09 12:54:06
玩一玩系列——玩玩login_hook(一款即将停止维护的PostgreSQL登录插件)
小满未满、
380次阅读
2025-03-08 18:19:28
明明想执行的SQL是DELETE、UPDATE,但为什么看到的是SELECT(FDW的实现原理解析)
小满未满、
361次阅读
2025-03-19 23:11:26
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
314次阅读
2025-03-20 09:50:36
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
204次阅读
2025-03-20 15:31:04
套壳论
梧桐
201次阅读
2025-03-09 10:58:17
命名不规范,事后泪两行
xiongcc
188次阅读
2025-03-13 14:26:08
PG vs MySQL 执行计划解读的异同点
进击的CJR
128次阅读
2025-03-21 10:50:08
版本发布| IvorySQL 4.4 发布
IvorySQL开源数据库社区
120次阅读
2025-03-13 09:52:33
宝藏PEV,助力你成为SQL优化高手
xiongcc
116次阅读
2025-03-09 23:34:23