轉換工作區

轉換工作區可協助您將來源資料庫中的結構定義和物件,轉換為與目的地資料庫相容的 SQL 語法。本頁面將概述資料庫移轉服務轉換工作區:

某些資料類型不支援 Oracle 遷移作業。詳情請參閱「 資料類型的已知限制」。

確定性程式碼和結構轉換

當您 建立轉換工作區時,資料庫移轉服務會立即使用一組確定性的轉換規則執行初始結構定義轉換作業,將特定 Oracle 資料類型和物件對應至特定 PostgreSQL 資料類型和物件。這項程序支援特定的 Oracle 資料庫物件子集。

確定性的程式碼轉換支援下列 Oracle 資料庫物件:

支援的 Oracle 結構定義元素

  • 限制
  • 索引 (僅限在與資料表相同的結構定義中建立的索引)
  • 具體化檢視表
  • 物件類型 (部分支援)
  • 序列
  • 同義詞
  • 資料表
  • 瀏覽次數

支援的 Oracle 程式碼元素

  • 觸發條件 (僅限資料表層級)
  • 套件
  • 函式
  • 預存程序

互動式 SQL 編輯器

您可以使用互動式 SQL 編輯器,直接在資料庫移轉服務中修改已轉換的 PostgreSQL 語法。您可以使用這項功能修正轉換問題,或調整結構定義以更符合需求。部分物件無法在內建編輯器中修改。

可編輯的 Oracle 物件

轉換來源資料庫程式碼和結構定義後,您可以使用互動式編輯器修改針對特定類型物件產生的 SQL。編輯器支援下列 Oracle 物件:

  • 資料表觸發事件 (需要授權)
  • 具體化檢視表
  • 套件
  • 函式、預存程序
  • 同義詞
  • 瀏覽次數
  • 限制
  • 索引
  • 序列

此外,部分物件會轉換,但無法直接在資料庫移轉服務中編輯。如要修改這類物件,您必須先 套用已轉換的結構定義和程式碼,然後直接在目的地資料庫上執行更新。

不支援編輯的物件:

  • 使用者定義的物件類型
  • 資料表
  • 結構定義

使用 Gemini 加快程式碼和結構定義轉換速度

資料庫移轉服務會將 Gemini for Google Cloud 整合至轉換工作區,協助您在下列領域加快及改善轉換程序:

  • 您可以使用 Gemini 提供的自動轉換功能,強化確定性轉換結果,利用 AI 的強大功能大幅減少 PostgreSQL 程式碼中需要的手動調整次數。

  • 透過轉換輔助程式提供程式碼可解釋性功能:一組專用提示,可協助您進一步瞭解轉換邏輯、提出轉換問題的修正方式,或改善轉換後的程式碼。

  • 透過 Gemini 程式碼轉換建議,加快修正轉換問題的速度:Gemini 模型會在您修正轉換問題時學習,並建議變更工作區中的其他錯誤物件。

如要進一步瞭解 Gemini 轉換功能,請參閱下列頁面:

轉換對應檔案

您可以使用轉換對應檔案自訂轉換邏輯。轉換對應檔案是文字檔,其中包含精確的操作說明 (稱為「轉換指示」),說明 Oracle 物件應如何轉換為 PostgreSQL 物件。

支援的轉換指示

資料庫移轉服務支援下列轉換指示,用於轉換對應檔案:

EXPORT_SCHEMA

EXPORT_SCHEMA 是所有轉換對應檔案的必要指令。資料庫移轉服務需要這項指示,確保來源結構定義會轉換為正確的目的地結構定義。請確認轉換對應檔案包含這行:

EXPORT_SCHEMA 1

SCHEMA

資料庫移轉服務必須能夠判斷哪個結構定義包含應透過轉換指令修改的物件。SCHEMA 指令會對轉換流程做出以下調整:

  • 資料庫移轉服務「只會」轉換這個結構定義。如果您需要在單一轉換工作區中轉換其他結構定義,就必須上傳多個具有不同結構定義的檔案。
  • 檔案中提供的所有其他自訂指示,只會套用至這個特定結構定義中的物件。

請使用下列格式:

SCHEMA SCHEMA_NAME

其中 SCHEMA_NAME 是來源資料庫中的結構定義名稱。

  • 如果您在轉換對應檔案中加入這個指令,所有自訂項目只會套用至這個特定結構定義所包含的物件。如果您想自訂其他結構定義中的物件,就需要建立多個轉換對應檔案,並上傳至轉換工作區。
  • 如果您略過這個指令,就必須為其他轉換指令修改的物件提供明確的結構定義名稱。舉例來說,您需要使用 "SCHEMA_NAME.SOURCE_TABLE_NAME",而非 SOURCE_TABLE_NAME 來設定 REPLACE_TABLES 指令。

DATA_TYPE

您可以使用這個指示詞,在 Oracle 和 PostgreSQL 語法之間明確對應任何支援的資料類型。這個指令會預期以半形逗號分隔的對應項目清單。整個定義必須在單一行中提供,但您可以在設定檔中加入多個 DATA_TYPE 指示詞。請使用下列格式:

DATA_TYPE ORACLE_DATA_TYPE1:PGSQL_DATA_TYPE1
DATA_TYPE ORACLE_DATA_TYPE2:PGSQL_DATA_TYPE2...

其中 ORACLE_DATA_TYPEPGSQL_DATA_TYPE 是您在遷移作業中使用的 Oracle 和 PostgreSQL 版本支援的資料類型。如需支援版本的相關資訊,請參閱 情境總覽

範例

DATA_TYPE REAL:double precision,SMALLINT:integer

如要進一步瞭解 Oracle 和 PostgreSQL 資料類型,請參閱:

MODIFY_TYPE

MODIFY_TYPE 指示詞可讓您控制資料庫遷移服務將來源資料表中的特定資料欄轉換為哪種資料類型。這個指令會預期以逗號分隔的對應項目清單。整個定義必須在單一行中提供,但您可以在設定檔中加入多個 MODIFY_TYPE 指示詞。請使用下列格式:

MODIFY_TYPE SOURCE_TABLE_NAME1:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE
MODIFY_TYPE SOURCE_TABLE_NAME2:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE...

其中:

  • SOURCE_TABLE_NAME 是資料表的名稱,其中包含您要變更資料類型的資料欄。
  • COLUMN_NAME 是您要自訂轉換對應的資料欄名稱。
  • EXPECTED_END_RESULT_DATA_TYPE 是您希望轉換的資料欄使用的 PostgreSQL 資料類型。

範例

MODIFY_TYPE events:dates_and_times:DATETIME,users:pseudonym:TEXT

PG_INTEGER_TYPE

根據預設,資料庫遷移服務會將 NUMBER(p,s) 類型轉換為 PostgreSQL DECIMAL(p,s) 類型。

您可以使用 PG_INTEGER_TYPE 指令修改這項行為。將其值設為 1,並強制將所有具有精確度和比例 (NUMBER(p,s)) 類型的 NUMBER 轉換為 PostgreSQL smallintintegerbigint 類型,具體取決於精確度位數。

請在轉換對應檔案中加入下列設定:

PG_INTEGER_TYPE 1

PG_NUMERIC_TYPE

如果您想要將所有具有精確度和比例 (NUMBER(p,s)) 類型的 NUMBER 轉換為 PostgreSQL realfloat 類型 (取決於精確度位數的數量),請將此指示設為 1

如果您將這個指示設為 0NUMBER(p,s) 值會保留原始值,並使用內部 PostgreSQL 資料類型。

請在轉換對應檔案中加入下列設定:

PG_NUMERIC_TYPE 1

DEFAULT_NUMERIC

對於沒有精確度的 NUMBER,預設轉換會變更,視您是否也使用 PG_INTEGER_TYPE 指示語而定:

  • 如果您使用 PG_INTEGER 指示詞,沒有精確度的 NUMBER 會轉換為 DECIMAL 值。
  • 如果您使用 PG_INTEGER 指示詞,沒有精確度的 NUMBER 會轉換為 BIGINT 值。

您可以修改這項行為,並使用 DEFAULT_NUMERIC 指示詞,指定應為沒有指定精確度點的 NUMBER 類型使用哪種資料類型。請使用下列格式:

DEFAULT_NUMERIC POSTGRESQL_NUMERIC_DATA_TYPE

其中 POSTGRESQL_NUMERIC_DATA_TYPE 是下列其中一個值:integersmallintbigint

範例

DEFAULT_NUMERIC integer

REPLACE_COLS

您可以使用 REPLACE_COLS 指令,重新命名已轉換架構中的資料欄。這個指令會預期以逗號分隔的對應項目清單。請使用下列格式:

REPLACE_COLS SOURCE_TABLE_NAME1(SOURCE1_TABLE1_COLUMN_NAME1:DESTINATION_TABLE1_COLUMN_NAME1,SOURCE_TABLE1_COLUMN_NAME2:DESTINATION_TABLE1_COLUMN_NAME2),SOURCE_TABLE_NAME2(SOURCE_TABLE2_COLUMN_NAME1:DESTINATION_TABLE2_COLUMN_NAME1,SOURCE_TABLE2_COLUMN_NAME2:DESTINATION_TABLE2_COLUMN_NAME2)...

其中:

  • SOURCE_TABLE_NAME 是包含要變更名稱的資料欄的資料表名稱。
  • SOURCE_COLUMN_NAME 是您要變更名稱的來源資料欄名稱。
  • DESTINATION_COLUMN_NAME 是您要用於轉換後結構定義的資料欄的新名稱。

範例

REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)

REPLACE_TABLES

您可以使用 REPLACE_TABLES 指令重新命名資料表,或將資料表移至新的結構定義。這個指令會預期以空格分隔的對應項目清單。如要進一步瞭解各項用途的語法,請展開下列各節。

重新命名資料表

如要重新命名已轉換結構定義中的資料表,請使用下列格式:

REPLACE_TABLES SOURCE_TABLE_NAME1:DESTINATION_TABLE_NAME1 SOURCE_TABLE_NAME2:DESTINATION_TABLE_NAME2

其中:

  • SOURCE_TABLE_NAME 是您要在轉換後的結構定義中重新命名的來源資料表名稱。
  • DESTINATION_TABLE_NAME 是您要在轉換後的結構定義中使用的資料表新名稱。

範例

REPLACE_TABLES "events:login_events" "users:platform_users"

在結構定義之間移動資料表

您可以使用這個指令,在結構定義之間移動資料表,方法是將結構定義前置字串新增至新資料表名稱。無論您如何在整個轉換檔案中使用 SCHEMA 指令,都可以使用這個機制。例如:

REPLACE_TABLES "events:NEW_SCHEMA_NAME.login_events"
    

用於自訂資料類型的別名

使用轉換指示詞修改資料庫移轉服務轉換不同資料類型的方式 (例如使用 DATA_TYPE MODIFY_TYPE PG_NUMERIC_TYPE 指示詞) 時,您可以使用別名取代來源 SQL 資料類型。

展開下列部分,即可查看資料庫移轉服務支援的資料類型別名清單。

資料類型別名

別名 已轉換為 PostgreSQL 類型
bigintint8 BIGINT
boolboolean BOOLEAN
bytea BYTEA
charcharacter CHAR
character varyingvarchar VARCHAR
date DATE
decimalnumeric DECIMAL
double precisionfloat8 DOUBLE PRECISION
realfloat4 REAL
intintegerint4 INTEGER
int2 SMALLINT
interval INTERVAL
json JSON
smallint SMALLINT
text TEXT
time TIME
timestamp TIMESTAMP
timestamptz TIMESTAMPTZ
timetz TIMETZ
uuid UUID
XML XML

轉換對應檔案範例

請參閱以下轉換對應檔案範例,其中使用所有支援的結構定義轉換指示:

EXPORT_SCHEMA 1
SCHEMA root

PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC integer
DATA_TYPE NUMBER(4\,0):integer
MODIFY_TYPE events:dates_and_times:TIMESTAMP
REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)
REPLACE_TABLES events:login_events users:platform_users

使用這個檔案的結果如下:

  • EXPORT_SCHEMA 1 是必要指令。
  • SCHEMA root 會對轉換流程做出以下調整:
    • 資料庫移轉服務只會針對 root 結構定義中的實體執行轉換作業。系統不會轉換其他結構定義。
    • 此檔案中的所有其他自訂指示,只會套用至 root 結構定義中定義的資料欄和資料類型。
  • PG_INTEGER_TYPE 1 會讓資料庫遷移服務將 root 結構定義中表格中的所有 Oracle 數值資料類型轉換為 PostgreSQL 專屬類型,而非 ANSI 可攜式數值類型。
  • DEFAULT_NUMERIC 會讓資料庫移轉服務將沒有指定精確度點的 NUMBER 值轉換為 PostgreSQL INTEGER 類型。這項設定僅適用於 root 結構定義中資料表中的 NUMBER 值。
  • DATA_TYPE NUMBER(4\,0):integer 會讓資料庫移轉服務將特定 NUMBER(4,0) 值轉換為 PostgreSQL INTEGER
  • MODIFY_TYPE 指示會讓資料庫移轉服務將 events 來源資料表 dates_and_times 欄中的資料轉換為 PostgreSQL DATETIME 類型,不受實際來源欄格式影響。
  • REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname) 會讓資料庫移轉服務在轉換後的結構定義中重新命名下列資料欄:
    • 來源 events 資料表中的 dates_and_times 欄會在轉換後的結構定義中,改名為同一個資料表中的 event_dates
    • 來源 users 資料表中的 pseudonym 欄會在轉換後的結構定義中,改名為同一個資料表中的 nickname
    重新命名作業只會套用至 root 結構定義中的 eventsusers 資料表。
  • REPLACE_TABLES events:login_events users:platform_users 會在轉換後的結構定義中重新命名下列資料表:
    • events 資料表已重新命名為 login_events
    • users 資料表已重新命名為 platform_users
    重新命名作業只會套用至 root 結構定義中的 eventsusers 資料表。

舊版轉換工作區

舊版轉換工作區是舊版轉換工作區的一種,功能較為受限。舊版轉換工作區不支援 Gemini 強化轉換功能或互動式 SQL 編輯器。您只能使用這些檔案,透過 Ora2Pg 遷移工具轉換來源結構定義。

我們不建議您使用舊版轉換工作區進行遷移。如果您的情境需要使用舊版轉換工作區,請參閱 使用舊版轉換工作區

後續步驟

如要瞭解如何使用轉換工作區,請參閱: