在雲原生資料庫PolarDB PostgreSQL版(相容Oracle) 2.0版本(以下簡稱PolarDB)2024年4月至2024年9月的開發週期中,PolarDB在相容性、安全性、遷移能力以及驅動工具等多個方面實現了顯著提升。本文將簡要總結PolarDB在過去半年內各個領域的進展和改進。
更新日誌
核心相容性提升
以下僅為核心相容性提升,詳細的核心版本更新記錄請參考PolarDB PostgreSQL版(相容Oracle)2.0版本更新說明。
內建對象
支援類似
number()的用法,並引入帶引號的函數調用方式(如"TO_CHAR"),作為對大小寫功能的擴充,更好地相容原生SQL中的函數調用習慣。支援對行類型的
IS NULL和IS NOT NULL判斷,確保與Oracle的行為相容。增強對
DBA_OBJECTS視圖中的同義字、表分區、包及其體、類型及其體、上下文、目錄、語言、操作符、任務和隊列的支援,以及DBA_INDEXES視圖中的索引類型和nls_parameters視圖,提升視圖的使用相容性。修複
CHAR類型因語義差異引起的迴流Oracle失敗問題。修複
has_schema_privilege系列函數的不相容問題,不會因內建對象而返回錯誤。修複視圖顯示包含對象名稱時不應包含Schema的問題,解決通過視圖名稱過濾對象失敗的問題。
修複
timestamptz類型轉換為date類型時小數點未截斷的問題。修複
information_schema.parameters視圖中顯示預存程序參數預設值的問題。修複
information_schema內多個視圖無法顯示date類型的問題。修複
DBA_SOURCE視圖中預存程序定義資訊被截斷的問題。
SQL文法
支援對
EDITIONTABLE相關關鍵字的支援,擴充結構遷移過程中的相容情境。支援在使用
DISTINCT和ORDER BY關鍵字時的多種特殊情境,滿足對於Oracle中非SQL標準用法的需求。支援
TO_DATE輸入日期文字和指定日期格式不嚴格匹配情境的相容,提升NVL和CONVERT函數返回時間類型時的相容性。支援一元操作符
'+'返回結果類型與Oracle相容。支援新增同義字忽略大小寫功能,提升Oracle相容性。
支援在
SELECT語句中將關鍵字作為表別名,進一步增強Oracle相容性。支援在大小寫交替的情境下忽略大小寫,以滿足非標準SQL用法的相容需求。
支援通過
ALTER SESSION設定交易隔離等級。支援
LIKE2、LIKE4和LIKEC操作符。支援
IS NaN和IS INFINITE判斷。支援視窗函數的
DISTINCT操作。修複當
b為單一記錄列表時,運算式where a in b的語義與Oracle不一致的問題,以增強Oracle相容性。修複更新同義字時出現的
RTE(Range Table Entry)找不到問題。修複一系列函數綁定參數的缺陷,提升系統穩定性。
DDL
支援
CREATE PROFILE功能,提供密碼複用次數、時間與密碼驗證函數等全新功能,顯著提升資料庫安全性。支援
ALTER TABLE ... RENAME在修改表列名時,可選使用COLUMN關鍵字。支援
CREATE CONTEXT使用INITIALIZED語句,進一步提升相容性。支援在
PUBLIC SCHEMA下建立PUBLIC同義字。支援
PACKAGE和TYPE BODY的同義字。支援
MODIFY COLUMN文法,實現與Oracle的相容。支援通過
DROP AGGREGATE方式刪除彙總函式,提升相容性。支援
DROP文法中的FORCE關鍵字。
分區表
支援自動添加分區表索引功能,當需要建立全域索引時,支援不顯式使用
GLOBAL的調用方式。支援在分區表的觸發器中使用
REFERENCING OLD文法。修複分區表建立過程中的相關穩定性問題。
包
支援包變數作為包函數參數的預設值。
支援
CREATE OR REPLACE PACKAGE BODY功能。支援在
Package Body中使用前向聲明來聲明私人函數,提升相容性。支援
DBMS_LOB包中缺失的函數和包變數。
PL/SQL
支援在函數中進行事務提交,並支援在
SECURE DEFINER狀態下的函數提交。修複一系列語句級事務、自治事務等穩定性缺陷。
支援在包未執行個體化的情況下,通過
cursor % attribute訪問包中遊標的屬性。修複觸發器函式宣告段中使用
:new/:old報錯的問題。修複當預存程序包含
out refcursor且參數為NULL時,內部其他遊標使用報錯的問題。修複同義字傳給觸發器時的錯誤
objectAdress。修複DDL邏輯複製建立的事件觸發程序導致建立外部表格報錯的問題。
集合類型
支援集合類型
TABLE運算式的COLUMN_VALUE偽列。支援通過
record.field().field方式直接存取record中集合類型的欄位。支援使用
collection_type % type功能。
用戶端和驅動相容
PolarDB-Tools
PolarDB-Tools的功能迭代主要集中在修複用法不相容問題,提升工具對資料的相容性。具體改進包括:
修複PSQL中使用綁定冒號參數的相容性問題。
修複OnCommitRollback功能的相容性問題。
JDBC
JDBC於2024年9月2日更新至V45.4.0.10.4版本,相較於歷史版本,此次更新的主要內容包括:
修複了PL塊中綁定不正確的問題。為減小對效能的影響,已預設關閉該功能。
支援在同一類型內部進行隱式轉換,允許字元類型(如VARCHAR、CHAR)與數字類型(如NUMERIC、INTEGER、DOUBLE)作為INOUT參數相互轉換。
驅動中元資訊的
getDatabaseProductName()函數的傳回值更新為“POLARDB2 Database Compatible with Oracle”。修複了在MyBatis中,當對象實體的註冊類型為Timestamp時,資料庫無法正確推斷參數類型的問題。
.NET
.NET於2024年9月18日更新至V8.0.4.1版本,至此,PolarDB的.NET系列驅動已全面支援.NET 2.0、.NET 3.5、.NET 4.0、.NET 5.0、.NET 6.0、.NET 7.0、.NET 8.0,以及netcoreapp3.1、netstandard2.0和netstandard2.1等多個版本。相較於歷史版本,本次 .NET驅動在功能上有以下顯著提升:
支援V8.0.4.1版本,相容.NET 6.0、.NET 7.0 和 .NET 8.0版本。
允許不帶$$符號執行PL/SQL預存程序。
新增對Oracle文法相容 2.0版本中64位日期格式的識別支援。
修複了有關DBMS內建對象識別的元資訊問題。
修正了因ROWID導致的類型讀取錯誤。
pgAdmin4
PolarDB於2024年8月26日發布了相容pgAdmin4的版本,該版本可在Windows系統上部署,專為PolarDB中的PL/SQL調試而設計。
引入PL/SQL預存程序的調試功能。
PolarDBO Flink CDC
PolarDBO Flink CDC基於社區Postgres CDC適配,用於讀取資料庫全量快照資料和變更資料。主要功能包括:
全面支援Flink產品的各類型與PolarDB PostgreSQL版(相容Oracle) 2.0類型之間的雙向映射。
實現64位DATE在邏輯複製鏈路中的適配,確保秒級精度。
DTS遷移
ADAM評估
ADAM評估最新版本主要提升遷移相容性評估的準確性,同時保持與PolarDB文法更新的同步。以下是此次升級的主要改進:
提高ADAM評估中內建包和內建對象識別的準確性。
增強了文法樹對部分關鍵字的識別能力。
DTS結構遷移
在此開發週期內,PolarDB與DTS的協作顯著提升,主要體現在以下幾個方面:
新增增量資料後的序列同步功能。
提升結構遷移相容性,適配大小寫問題,修複索引遷移和分區表適配中的相關問題。
修複DATE類型的相容性問題,並改進了對字元類型NaN的處理。