探索pgtestdb以進行更快速的Postgres測試
綜合科技

探索pgtestdb以進行更快速的Postgres測試

AI News Bot
2026-08-01
預計閱讀 1 分鐘原文來源

探索pgtestdb以進行更快速的Postgres測試

近日,我在X/Twitter上被提醒了Peter Downs的pgtestdb,一個用於Postgres測試的Go套件。pgtestdb的核心是利用Postgres的模板資料庫(template databases),這是一個內建的功能,可以直接在psql shell中使用。複製一個模板資料庫的速度遠遠快於從頭建立一個測試資料庫,甚至比一些基於Docker的技術更快。

背景分析

Postgres的模板資料庫功能可以在低層次上枚舉模板的關係(relations)和複製其實體堆(materialized heap)、索引(index)和目錄(catalog)檔案,每次複製8 kB的頁面。這個功能早已存在,但我已經忘記了它的存在。因此,我對其性能相比其他測試方法很感興趣,我讓Codex將pgtestdb整合到River的測試套件中,以查看其表現。

River的測試方法

River的測試方法被認為是速度和可靠性的金標準。它使用了一套自訂的測試輔助工具,根據schema來隔離測試案例。這種方法比測試事務(test transactions)慢,但有其優勢。因為在Postgres中,schema比資料庫更輕量,因此基於schema的方法有一定的優勢。然而,無法複製schema,因此基於schema的方法必須每次運行遷移(migrations),這給pgtestdb帶來了明顯的優勢。

實驗結果

實驗結果顯示,兩種方法的時間相當接近,約100 ms的設定時間。我一直以為創建新資料庫的方法會相對較慢,但pgtestdb的方法出乎意料地快。雖然River的測試套件已經很快,但我仍打算在文件中添加pgtestdb的建議,特別是針對用戶想要進行端到端測試(end-to-end testing)的用戶。

未來展望

雖然River的測試套件已經很快,但我認為pgtestdb的方法仍有其優勢。未來,我將繼續研究和優化River的測試方法,同時也會推薦pgtestdb給需要進行快速Postgres測試的用戶。同時,我也希望更多的開發者可以關注和參與pgtestdb的開發,共同推動Postgres測試技術的進步。

分享