当从Oracle 11迁移到Postgres 9.5时,人们有哪些选项来处理虚拟列-而不必更改应用程序中与数据库相关的代码(这意味着函数和视图不在考虑范围之内,而触发器在处理大型数据集时代价太高)?
存在一个类似的问题:Computed / calculated columns in PostgreSQL,但解决方案对迁移场景没有帮助。
发布于 2016-10-03 17:58:50
如果使用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)https://stackoverflow.com/questions/39824244
复制相似问题