天天看点

《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列五:其它类型

postgresql是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着postgresql的应用越来越广泛,oracle向postgresql数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换。下面根据自己的理解和测试,写了一些数据类型之间的差异以及迁移时的注意事项的文章,不足之处,尚请多多指教。

oracle的内建数据类型中,还有一些其它的类型。不能够归类到字符、数字、时间和大数据类型等。比如raw, rowid, urowid等。在数据迁移的时候,在postgresql中也有与之相对应的类型。

oracle的raw类型主要用于不同的系统之间转移数据的时候。用于保存位串,以字节为单位。作为数据库列的数据类型的时候,最大位数为2000(作为变量的时候,最大位数为32767。因为现在谈论的是数据迁移,所以作为变量的情况就不讨论了)。

postgresql中,可以使用bytea来对应raw类型。

oracle raw

postgresql bytea

oracle的rowid类型代表一条记录在数据库中的物理地址。使用base64编码的字符串表示的物理地址。固定是18位。rowid是oracle中的伪列,也可以定义一个rowid类型的列,但是必须用户自己保证该列的数据有效性。

postgresql中,可以使用char(18)来迁移对象。postgresql中还有一个ctid数据类型, 指的是一条记录位于哪个数据块的哪个位移上面。作用和rowid类似。但是用的是数字对,数据迁移时,不能够使用它对oracle的rowid进行迁移。

oracle rowid

postgresql char(18)

oracle的urowid类型支持oracle的物理rowid和逻辑rowid,在索引组织表(index organization table,简称为iot)中的rowid,就是逻辑rowid。并且支持非oracle数据库的表的rowid。也就是支持所有类型的rowid。最大长度是4000。

postgresql中,可以使用varchar来迁移对象。

oracle urowid

postgresql varchar

oracle的build-in类型里面的这几种特殊的数据类型,在数据迁移中是比较简单的。在向postgresql数据库进行数据迁移的时候只要选对数据类型,应该就可以正确的迁移过来。

参考文档:

postgresql 9.4.4 中文手册:字符类型,二进制类型,对象标识符类型

database sql language reference:data types

<a href="http://docs.oracle.com/cd/e11882_01/server.112/e41084/sql_elements001.htm#i45441">http://docs.oracle.com/cd/e11882_01/server.112/e41084/sql_elements001.htm#i45441</a>