将虚拟列从oracle迁移到postgres
问题描述:
从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)
+0
这就是我们提出的唯一策略。这个痛苦的部分是数据迁移,我们只是为了获得正确的表格和视图而徘徊 – happybuddha
唯一的解决方案是计算函数值的触发器。 –