Oracle遷移到PostgreSQL問題

2021-08-14 00:20:31 字數 2071 閱讀 6688

**

oracle遷移到postgresql:

使用ora2pg的方案將oracle遷移至pg, 遇到的問題多少與源oracle資料庫有多少與pg不相容的東西成正比。下面是我們遇到的問題簡單總結:

應用程式裡面sqlmap.xml 人工review時的問題發現:

oracle

postgresql

dual表

沒有dual表,可以直接select 1、select user、select ***

時間函式(sysdate)

current_date

current_time

current_timestamp

trunc

trunc/date trunc(時間截斷函式)

sys_guid()

有類似sys_guid的函式uuid_generate_v4,但需要安裝,create extension "uuid-oosp".

nvlpg可以使用coalesce

where rownum < ...

select row_number() over() , * from ***x或者limit

pg匯入ora2pg產生的遷移指令碼時發現的問題:

tables      

default sys_guid();

session# serial# 字段

default uuid_generate_v4;

去掉#partitions  

父表在tables中已建立,建立子表時,由於大小寫問題提示找不到父表。

表名稱區分大小寫,繼承父表時,大小寫改為與父表相同。增加或減少分割槽要修改觸發器函式。

synonyms  

轉換過來的語句類似如下:

create view public.tablename as select * from owner.tablename security definer;

pg中沒有同義詞,自動建立為檢視,轉換過來的檢視名稱與存在的表名相同,需要修改檢視名稱。

security definer不能加到建立語句的後面,可通過授權來控制許可權。

packages   

1、pg中沒有v$session.(oracle原來的packages裡面大多有這個)

select sid, serial# into v_sid, v_serial# from v$session

2、有些轉換過來的語句順序不正確,需要重構。

3、packages自動轉換為function,且function會建立到以原來packages命名的schema下

ora2pg會把oracle裡面的package header轉換為同名的schema

procedures  

1、dbms_output.put_line('成功插入資料!');-->raise notice '%',('成功插入資料!');

2、 dbms_output.put_line(sqlerrm) --- raise notice '%', sqlerrm;

3、表的子查詢必須包圍在圓括弧裡並且必須賦予乙個別名

4、start with connect by 遞迴查詢在pg中with recursive

views   

1、字元型別問題

2、遞迴查詢沒有轉換成功

3、外連線中的「+」號沒有轉換

4、decode函式需要重構

5、coalesce 函式返回值型別不匹配

1、字元型別需要調整。

2、start with connect by 遞迴查詢在pg中with recursive

3、 (+)這樣的外連線寫法需要調整為sql標準的 table1 [left|right|full] outer join table2 on (...);

4、decode函式需要重構成(case when some_column = 'some_value' then 'some_other_value' when ... then ... else 'some_default_value' end ) as some_column;

5、coalesce 函式返回值型別不匹配、需要型別轉換。

Oracle遷移到MySQL總結

日期 2012 06 01 字型 大中小 這兩個星期裡一直都在忙於一件事兒,就是oracle資料庫的遷移問題。沒有做的時候感覺這是一件十分輕鬆的事兒,可是等到實實在在去做去實現的時候,自己傻眼了。這種糾結啊,在這裡先說下遇到的問題 1。資料庫的表結構問題 資料型別不同需要解決varchar2 var...

從Oracle遷移到SQL Server的陷阱

在把oracle查詢轉換為sql server的時候要特別當心一些不容易注意到的問題。我們知道,t sql是sql server的語言引擎,而oracle的語言引擎卻是plsql。這兩種查詢語言都對ansi sql 92標準進行了擴充套件以提供額外的支援力度。你所建立的應用程式幾乎都要用到這些補充特...

Oracle 遷移到 Mycat 簡單測試

linux安裝oracle 比較費時費力,現使用yum安裝oracle rdbms server 11gr2 preinstall包,可全部搞定其餘未安裝的rpm包,解決之間的依賴關係,配置核心引數等等。1 cd etc yum.repos.d 2 獲取配置檔案 wget 3 yum.repos.d...