比较 Oracle、Postgres 和 SQLite 中的 CLOB、BLOB 值
Comparing CLOB, BLOB values in Oracle, Postgres and SQLite
这涉及比较两个不同数据库架构中的 table。要求是遍历一组已知的 table 并确保两个模式中的 table 数据相同。目前我们正在 Oracle 上执行类似的操作,查询如下:
每个 table;
SELECT COUNT(*) FROM (SELECT * FROM SCHEMA1.MY_TABLE MINUS (SELECT * FROM SCHEMA2.MY_TABLE));
但是上面的查询在涉及到大对象时在oracle中有一个限制:
ERROR at line 1: ORA-00932: inconsistent datatypes: expected - got BLOB
显然,当涉及大型对象 detailed here 时,Oracle 中的所有集合操作都存在限制。它可以通过使用 DB 特定函数来克服,例如 dbms_lob.compare
.
由于我对 Postgres 和 SQLite 的了解有限,所以我想知道;
- 当涉及到 LOB 值时,在 Postgres 和 SQLite 中使用联合、减号或相交等集合运算符是否有类似的限制?
- 如果有限制,是否有任何数据库特定函数应该用于 LOB 比较?
在PostgreSQL/SQLite中,text
/TEXT
和bytea
/BLOB
数据类型的行为就像较小的值一样,可以正常比较。
这涉及比较两个不同数据库架构中的 table。要求是遍历一组已知的 table 并确保两个模式中的 table 数据相同。目前我们正在 Oracle 上执行类似的操作,查询如下:
每个 table;
SELECT COUNT(*) FROM (SELECT * FROM SCHEMA1.MY_TABLE MINUS (SELECT * FROM SCHEMA2.MY_TABLE));
但是上面的查询在涉及到大对象时在oracle中有一个限制:
ERROR at line 1: ORA-00932: inconsistent datatypes: expected - got BLOB
显然,当涉及大型对象 detailed here 时,Oracle 中的所有集合操作都存在限制。它可以通过使用 DB 特定函数来克服,例如 dbms_lob.compare
.
由于我对 Postgres 和 SQLite 的了解有限,所以我想知道;
- 当涉及到 LOB 值时,在 Postgres 和 SQLite 中使用联合、减号或相交等集合运算符是否有类似的限制?
- 如果有限制,是否有任何数据库特定函数应该用于 LOB 比较?
在PostgreSQL/SQLite中,text
/TEXT
和bytea
/BLOB
数据类型的行为就像较小的值一样,可以正常比较。