我正在研究將應用程序從Oracle轉換爲擁有數據庫中所有業務邏輯的Postrges。目前有一個非常大的包含約200個公共常量變量。 Postgres不支持包級變量,所以我在討論如何轉換它。我看到兩種可能性,但需要一些意見關於哪個好(他們似乎都非常討厭):Oracle中的包級別常量到Postgres的轉換
- 將每個變量返回一個靜態值的函數。這似乎是最有可能的,但它看起來非常醜陋。
- 製作一張表。這個問題在於它們主要被其他包/功能使用。還有一個混合類型(數字與varchars)。
任何想法?
我正在研究將應用程序從Oracle轉換爲擁有數據庫中所有業務邏輯的Postrges。目前有一個非常大的包含約200個公共常量變量。 Postgres不支持包級變量,所以我在討論如何轉換它。我看到兩種可能性,但需要一些意見關於哪個好(他們似乎都非常討厭):Oracle中的包級別常量到Postgres的轉換
任何想法?
我會選擇1,應該相當容易編寫一個腳本來自動爲你做這個,然後你保持包儘可能接近它的原始定義。
我想混合兩個選項。爲便於添加新的選項或修改的,易於使用的
create table package_options (option_name text, option_value text)
,並返回一個功能在查詢:選項將被保存在一個表
create function get_option(text) returns text as
$$ select option_value from package_options where option_name=$1 $$
language sql stable;
也可能有get_int_option(text)
,轉換價值int等
您還可以添加option_type
列和一些約束,這將檢查類型的有效性。
當你的問題出現時,我正在採取一種性能方法與接口方法。
根據您的數據庫使用情況,使用選項2可能會導致數據庫中出現熱點。這裏有一個更極端的情況 - 假設你有5000個用戶登錄系統,這反過來導致你的代碼被觸發,然後依次選擇你的package_options表。在任何特定時刻,您可能會有數千名用戶擊中該表。
這可能是一個問題,它可能不會PG處理併發,所以只有測試才能證明什麼。您必須測試才能確定,但在考慮該方法時應謹記。我也會測試你的選項1的情況,看看除了作爲一個簡單的界面來管理和使用之外,哪個更好。考慮到測試所需的測試會相對簡單,爲什麼不測試它,所以你不會因爲使用場景的糟糕選擇而陷入困境。
我打算試試這個選項,主要是因爲所有依賴它的軟件包只有很小的變化。 – chotchki 2009-10-25 15:24:10