從Oracle 11遷移到Postgres 9.5時,不必更改與數據庫相關的代碼(這意味着函數和視圖超出圖片範圍和處理大型數據集的觸發器太昂貴了)?將虛擬列從oracle遷移到postgres
存在類似的問題:Computed/calculated columns in PostgreSQL但該解決方案無助於遷移方案。
從Oracle 11遷移到Postgres 9.5時,不必更改與數據庫相關的代碼(這意味着函數和視圖超出圖片範圍和處理大型數據集的觸發器太昂貴了)?將虛擬列從oracle遷移到postgres
存在類似的問題:Computed/calculated columns in PostgreSQL但該解決方案無助於遷移方案。
如果您使用的是BEFORE INSERT
觸發器,則可以在實際寫入之前修改插入的值。這應該不是很昂貴。如果需要尖端性能,請在C中編寫觸發器功能。
但我認爲視圖是最佳解決方案。您可以使用可更新的視圖,這樣您就不必更改應用程序代碼:
CREATE TABLE data(
id integer PRIMARY KEY,
factor1 integer NOT NULL,
factor2 integer NOT NULL
);
CREATE VIEW interface AS
SELECT id, factor1, factor2,
factor1 * factor2 AS product
FROM data;
test=> INSERT INTO interface VALUES (1, 6, 7), (2, 3, 14);
INSERT 0 2
test=> UPDATE interface SET factor1 = 7 WHERE id = 1;
UPDATE 1
test=> DELETE FROM interface WHERE id = 1;
DELETE 1
test=> SELECT * FROM interface;
┌────┬─────────┬─────────┬─────────┐
│ id │ factor1 │ factor2 │ product │
├────┼─────────┼─────────┼─────────┤
│ 2 │ 3 │ 14 │ 42 │
└────┴─────────┴─────────┴─────────┘
(1 row)
這就是我們提出的唯一策略。這個痛苦的部分是數據遷移,我們只是爲了獲得正確的表格和視圖而徘徊 – happybuddha
唯一的解決方案是計算函數值的觸發器。 –