簡體   English   中英

針對多個數據庫系統測試SQL查詢

[英]Testing SQL queries against multiple database systems

我參與了一個從Oracle到PostgreSQL的遷移項目,並且我正在尋找一種方法來自動測試從Oracle語法轉換為PostgreSQL的大量查詢。 假設數據已成功遷移,因此無需檢查。 我可以使用Perl或Python從頭開始破解解決方案,但是可能會有更簡單的方法。 我當時在看數據庫測試框架,如Test :: DBUnut或pgTap,但是它們假設用戶提供了要驗證的結果,而在我的情況下,這些結果是從我們要從其遷移的數據庫中獲得的。 問題是,是否存在現有的特定於數據庫的工具或測試框架來對舊(Oracle)數據庫和新(PostgreSQL)數據庫執行查詢,獲取結果並進行比較,從而突出顯示差異以及過程中可能發生的任何錯誤?

如何創建在不同模式(一個Oracle,另一個PostgreSQL)上運行相應查詢的JUnit項目?

或者,您可以創建兩個簡單的Maven項目(每個供應商一個),每個項目將使用SQL插件來運行查詢(以相同的順序將其粘貼到pom.xml中)。 您以后可以使用支持Maven(Hudson?)的持續集成服務器來自動執行這些測試,並設置計划的執行時間。

祝好運!

我最終寫了一個自定義工具來對兩個數據庫運行查詢,並使用python psycopg2和cx_oracle收集結果。 比較它們只是計算每行的哈希值,並檢查oracle行是否存在於postgresql行的哈希中。 有兩個陷阱:

  • 從Oracle / PostgreSQL轉換為python時,浮點數會降低精度。 在驅動程序中使用特定於類型的掛鈎(請參閱文檔),以確保將它們轉換為十進制,而不是浮點數。

  • 試圖一次只從兩個數據庫中讀取一行,比較它的值然后繼續前進,這很誘人。 但是,除非將SQL結果顯式排序(使用ORDER BY),否則將無法使用。 不幸的是,一次讀取所有結果意味着您需要大量內存來進行產生大量行的查詢。

  • 需要區分在兩個數據庫上產生相等結果的查詢與產生0行的查詢。 應該檢查后者,如果查詢包含參數,則應修改其值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM