从Oracle 11迁移到Postgres 9.5时,有哪些选项可以处理虚拟列 - 无需在应用程序中更改数据库相关代码(这意味着功能和视图不在图片中,并且触发器太昂贵了处理大数据集)?
存在类似的问题:Computed / calculated columns in PostgreSQL但解决方案对迁移方案没有帮助。
答案 0 :(得分:1)
如果使用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)