从oracle到postgres的虚拟列的集成

时间:2016-10-03 03:33:27

标签: oracle postgresql database-migration

从Oracle 11迁移到Postgres 9.5时,有哪些选项可以处理虚拟列 - 无需在应用程序中更改数据库相关代码(这意味着功能和视图不在图片中,并且触发器太昂贵了处理大数据集)?

存在类似的问题:Computed / calculated columns in PostgreSQL但解决方案对迁移方案没有帮助。

1 个答案:

答案 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)