天天看點

《卸甲筆記》-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>