无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

Oracle 兼容的 PG 真的有用嗎?

0
分享至

很多國產數據庫都以 “兼容 Oracle” 作為賣點,說實話,老馮一直都對這件事不感冒。有時候我也會懷疑,PG 去兼容 Oracle 到底是不是一個偽需求—— 改改業務代碼能死嗎?但是最近我真的碰到了一個極端情況,讓我略微改了看法。

一個沒有源碼的 JAR 包

最近老馮接了個小活兒,挺有意思的。某 500 強車企,手里跑著一套 EDB —— 也就是 EnterpriseDB 出品的、帶 Oracle 兼容的 PostgreSQL。版本是 9.1

9.1 是什么概念?2011 年 9 月發布的版本,到今天已經整整 15 年 了。

這套系統跑在某個云平臺上(美國信創云),出過好幾次大故障(500 IOPS 的乞丐云盤跑 22TB 的生產數據庫)。客戶終于忍不了了,找到我說:老馮,幫我們升一下級吧。升級本身不難,但從 9.1 到現在的 PG 18,中間差了十五個大版本,一年一個。這個跨度屬實有點大。

不過真正要命的不是版本跨度,而是他們的應用 —— 沒有源碼了

對,你沒聽錯。就是一個 JAR 包,代碼全寫死在里面了,改不了。更麻煩的是,這個 JAR 包里的 SQL 用了 EDB 提供的 Oracle 兼容語法,比如 SYSDATE

不過有一點還是非常讓人震撼的:除了這一點不兼容(也是因為當年 Oracle 遷移 EDB PG 偷懶,留下了 Oracle 的尾巴)之外,其他的祖傳業務代碼從 15 年前的老 PG 升級到最新的 PG 18,竟然沒有其他不兼容的地方。

為什么 SYSDATE 這么棘手?

SYSDATE 在 Oracle 里是一個內置的關鍵字/變量,用來獲取當前時間戳,類似于 PostgreSQL 里的 current_timestamp

你可能會想:這有什么難的?建個函數不就完了嗎?

CREATE FUNCTION sysdate() RETURNS timestamp(0) AS
$$SELECT clock_timestamp()::timestamp(0) $$ LANGUAGE SQL;

沒那么簡單。問題在于,應用里寫的不是 sysdate() 這種函數調用語法,而是直接用 SYSDATE 這個光禿禿的標識符。在 PostgreSQL 的 Parser(解析器)看來,這個東西既不是函數調用,也不是已知的關鍵字。Parser 直接就不認識它,報語法錯誤。


而且,你無法通過寫擴展來解決這個問題。PostgreSQL 的可擴展性覆蓋了絕大多數場景 —— 你可以自定義類型、操作符、索引方法、存儲引擎、執行邏輯、甚至外部數據源。但唯獨語法,是不允許通過擴展來定制的。 這是 PostgreSQL 可定制性上唯一的遺憾。

要讓 PostgreSQL 認識 SYSDATE 這個 token,你必須去改 Parser 的語法規則文件,也就是要動內核源碼。


如果應用有源碼,這事兒根本不叫事兒 —— 現在用 AI 做個全局替換,把 SYSDATE 改成 clock_timestamp()::timestamp(0),分分鐘搞定。但源碼沒了,JAR 包寫死了,這條路堵死了。

你讓我怎么辦?去反編譯 JAR 包然后改 SQL 字符串字面值?這聽著就不太靠譜。所以你看,臟活累活最后全跑到數據庫這兒來了。

IvorySQL:開源的 Oracle 兼容內核

雖然需求很扯淡,但既然是客戶的活兒,還是要想辦法。

我琢磨了一下,能在 PG 內核層面提供 Oracle 語法兼容的,目前就那么幾家。做得最好的是 EDB,接著用 EDB 就沒這個問題。但 EDB 是商業產品,價格不菲,而且人家本來就準備換開源。

國內號稱兼容 Oracle 的數據庫倒是一堆,但人家客戶不吃信創這一套。所以 PolarDB-O 也不可能(而且也跟 EDB PG Oracle 兼容有說不清道不明的微妙聯系,據說有些其他國產數據庫也是 EDB 貼牌)。

所以我想了一下,還真就只有 IvorySQL 能干這個事。IvorySQL 是瀚高做的一個開源項目,Apache 2.0 許可證,基于 PostgreSQL 內核提供 Oracle 兼容性 —— 包括 PL/SQL、Oracle 語法、內置函數、數據類型、系統視圖等等。最新的 IvorySQL 5.1 與 PostgreSQL 18.1 保持同步。

這里要說明一下,IvorySQL 的 Oracle 兼容是 SQL 語法層面 的兼容,不是線纜協議兼容。也就是說,客戶端還是用 PostgreSQL 的驅動來連接,但連上之后可以跑 Oracle 風格的 SQL。能理解這里的考慮 —— Oracle 的法務在業界可是臭名昭著的,搞客戶端協議兼容怕是要被告。

而且關鍵的是:IvorySQL 只是一個內核,Pigsty 能把它變成一個完整的 RDS。

高可用、備份恢復、監控、IaC —— 全都和 Pigsty 原生整合。拉起一套這樣生產級的 RDS 服務,使用 IvorySQL 這個 Oracle 兼容的內核,聽起來很復雜,但實際上簡單到令人發指,找臺 Linux 服務器執行:

curl -fsSL https://repo.pigsty.cc/get | bash; cd ~/pigsty
./configure -c ivory # 使用 IvorySQL 配置模板
./deploy.yml

三條命令,一個 Oracle 兼容的 PG RDS 就拉起來了。你要想加從庫,也是一行命令的事情。備份,恢復,高可用, 監控系統,全都預先弄好了!


讓我們來看看,連接 5432 PG 默認端口,使用 Oracle 的 SYSDATE 查詢就報錯了,切換到 1521 Oracle 兼容端口,it works!


總的來說,這套方案相當完美地解決了歷史遺留的 Oracle 兼容應用的問題。這也讓我發現,雖然是一個很冷門的生態位,但確實有用戶有這個需求。反正對老馮來說,這就是很簡單的事情,順手做了也就做了。

這活兒老馮收了 5 萬塊一年。相比 EnterpriseDB 的訂閱費,那簡直不知道要便宜到哪里去了。光買云服務跑這玩意的資源一年都要花幾十萬。當然話又說回來了,老馮也不提供 IvorySQL 的質保。如果 IvorySQL 炸了,你找瀚高去。我只管 Pigsty RDS 不出問題,不過老馮自己覺得呢,IvorySQL 沒有魔改太多,而是做的增量特性,這個還是相對可控的。我在實際安裝使用測試的時候,也還沒遇到過 crash 或者 dump 的情況。而且這年頭,內核爆炸的情況確實已經很罕見了。

Pigsty:一個"元發行版"

說完 IvorySQL 這個案例,順便聊聊 Pigsty 最近在內核這塊干的幾件事。

Babelfish 內核重建。 這是 AWS 出品的 SQL Server 兼容內核。之前老粉為了偷懶,用的是 WiltonDB 打包的版本,但那個包比較老,還停留在 PG15,而且只支持 EL8/EL9 和 Ubuntu 22.04/24.04,缺 Debian 和 EL10 的支持,用起來還要用它的專有倉庫,總感覺差點意思。

所以這次我一不做二不休,讓 Codex 幫我把 Babelfish 的打包流程按 Pigsty 的標準重建了一遍。現在 Babelfish 不再依賴 WiltonDB 的倉庫,直接從 Pigsty 自己的倉庫安裝,全平臺通吃了,版本也升級到 PG 17,使用體驗也更好了。

Cloudberry 數倉內核。 既然做了 Babelfish,我也順手把 Apache Cloudberry(基于 Greenplum 7 的開源數倉)也打包了。之前 1.6 版本的時候起碼還提供 EL8/EL9 的 RPM 包,結果 2.0 到現在等了好幾個月,都沒有二進制產物,問了也是說暫時沒這個計劃。

所以我也干脆自己上了,Codex 一把梭,把 EL 8-10,Debian 12/13 ,Ubuntu 22/24 x86_64/ARM64 總共 14 個 Linux 平臺上的 RPM/DEB 包都打好了。這其實是個挺復雜的大活兒,但 Codex 在那兒"糊"了半天,跑了各種集成測試和單元測試,還弄了幾個 Patch 才在 EL10/Debian13 上跑通,最后總算搞定了。


除此之外,OrioleDB 更新到 Beta 14。Percona PGTDE 更新到 18.1。

所以你看,這就是 Pigsty 好玩的地方 —— 它不僅僅是一個 PostgreSQL 發行版,它是一個 元發行版。你不僅可以在原生的 PG 上使用 450 多個擴展插件,而且就連 PG 這個內核本身都是可以替換的。

你可以根據需求,愛用什么內核就用什么內核:

?想要 Oracle 兼容 → IvorySQL 內核,還有 Polar-O 內核?想要 SQL Server 兼容 → Babelfish 內核?想要 MongoDB 兼容 → DocumentDB 擴展 + FerretDB?想要 極致 OLTP 性能 → OrioleDB 內核?想要 透明數據加密 → PGTDE 內核?想要 分布式水平擴展 → Citus 內核?想要 數據倉庫 → Cloudberry 內核

而無論你選哪個內核,Pigsty 提供的監控、高可用、備份恢復、IaC 能力都是一樣的。內核可以換,平臺的能力不變。 這才是發行版該干的事。


特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
起底日本抹黑中國流水線:利用AI批量生成“中國人不文明”等內容!自2015年以來,已投入超560億日元預算對華展開輿論抹黑

起底日本抹黑中國流水線:利用AI批量生成“中國人不文明”等內容!自2015年以來,已投入超560億日元預算對華展開輿論抹黑

每日經濟新聞
2026-05-14 15:09:59
暗黑界2025排行榜:新王登基,世代交替!

暗黑界2025排行榜:新王登基,世代交替!

吃瓜黨二號頭目
2026-05-15 10:12:00
隨著衛冕冠軍3-1,沙特聯最新積分榜出爐

隨著衛冕冠軍3-1,沙特聯最新積分榜出爐

側身凌空斬
2026-05-15 05:43:43
漢語是犧牲了什么,才成為世界最緊湊、最高效的語言?

漢語是犧牲了什么,才成為世界最緊湊、最高效的語言?

瓜哥的動物日記
2026-05-13 00:58:37
中印沖突再度升級!冰冷現實刺眼:中國越克制,印度越步步緊逼!

中印沖突再度升級!冰冷現實刺眼:中國越克制,印度越步步緊逼!

小樾說歷史
2026-05-14 12:20:38
人大代表:建議將機關企事業單位工齡滿30年的帶薪年假延長到20天

人大代表:建議將機關企事業單位工齡滿30年的帶薪年假延長到20天

細說職場
2026-05-14 15:42:32
連特朗普的兒媳婦都考慮到了!國宴結束后,我國專門安排了女保鏢

連特朗普的兒媳婦都考慮到了!國宴結束后,我國專門安排了女保鏢

阿龍聊軍事
2026-05-15 05:43:23
6456億元創新高!上市銀行2025年分紅分化,大行穩坐“王座”、中小行冷暖不均

6456億元創新高!上市銀行2025年分紅分化,大行穩坐“王座”、中小行冷暖不均

紅星新聞
2026-05-15 12:34:25
司機曬出一筆10年未支付的訂單,讓乘客無地自容:趕緊把錢補回去

司機曬出一筆10年未支付的訂單,讓乘客無地自容:趕緊把錢補回去

網約車觀察室
2026-05-15 09:55:11
女子凌晨推搡武警后續!全網社死僅開胃菜,動手那刻,性質就變了

女子凌晨推搡武警后續!全網社死僅開胃菜,動手那刻,性質就變了

攬星河的筆記
2026-05-14 15:04:04
第一次和男友同居:我直接驚呆了,原來男女私下可愛到犯規

第一次和男友同居:我直接驚呆了,原來男女私下可愛到犯規

那年秋天
2026-05-15 09:00:11
又一專坑中國年輕人的網紅翻車:“新型騙局”,早該被曝光了

又一專坑中國年輕人的網紅翻車:“新型騙局”,早該被曝光了

小椰子專欄
2026-05-14 13:09:10
科學家發現胰腺癌致命弱點:受損線粒體成治療新靶點

科學家發現胰腺癌致命弱點:受損線粒體成治療新靶點

報錯免疫體
2026-05-14 12:28:09
張柏芝為19歲兒子選國產新車,母愛選擇顯心意

張柏芝為19歲兒子選國產新車,母愛選擇顯心意

街上的行人很刺眼
2026-05-15 02:59:23
武統、和統都沒希望了?臺軍事專家曾言:中國已經走上了第3條路

武統、和統都沒希望了?臺軍事專家曾言:中國已經走上了第3條路

別吵吵
2026-05-15 08:35:17
2-0!姆巴佩無視噓聲送助攻,貝林厄姆定勝局,皇馬拒絕主場爆冷

2-0!姆巴佩無視噓聲送助攻,貝林厄姆定勝局,皇馬拒絕主場爆冷

我的護球最獨特
2026-05-15 05:28:08
中央5臺直播乒乓球時間表:5月15日CCTV5播國乒!梁靖崑獲重獎!

中央5臺直播乒乓球時間表:5月15日CCTV5播國乒!梁靖崑獲重獎!

等等talk
2026-05-15 10:59:29
西地那非(偉哥)使用指南:時機、忌口、禁忌,一個都不能錯

西地那非(偉哥)使用指南:時機、忌口、禁忌,一個都不能錯

白宸侃片
2026-05-15 11:19:54
別以為購物卡查不出來,紀委如何查出收受購物卡的?

別以為購物卡查不出來,紀委如何查出收受購物卡的?

吃貨的分享
2026-05-15 04:33:14
女子稱關閉支付功能后,180多萬元凌晨莫名通過支付寶捐給慈善機構;支付寶:賬密是用戶透露出去的

女子稱關閉支付功能后,180多萬元凌晨莫名通過支付寶捐給慈善機構;支付寶:賬密是用戶透露出去的

大風新聞
2026-05-14 18:15:39
2026-05-15 14:20:49
老馮云數 incentive-icons
老馮云數
數據庫老司機,云計算泥石流,PostgreSQL大法師
179文章數 55關注度
往期回顧 全部

科技要聞

兩年聯姻一地雞毛,傳蘋果OpenAI瀕臨決裂

頭條要聞

特朗普訪華"二號位"系美國駐華大使 其曾受超規格禮遇

頭條要聞

特朗普訪華"二號位"系美國駐華大使 其曾受超規格禮遇

體育要聞

德約科維奇買的球隊,從第6級聯賽升入法甲

娛樂要聞

方媛回應住男生單人間:女孩的配得感

財經要聞

特朗普的北京時刻

汽車要聞

雙零重力座椅/AI智能體/調光天幕 啟境GT7內飾發布

態度原創

數碼
時尚
教育
本地
公開課

數碼要聞

單臺9.8PB!戴爾將40塊245TB 鎧俠SSD塞進一臺2U服務器:一臺頂一套豪宅

冰涼一夏 | 比沒穿還舒服,這些貼身衣物我囤了5件

教育要聞

趕緊看!2026山東三模試題+答案!

本地新聞

用蘇繡的方式,打開江西婺源

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版