2016-10-03 3 views
0

Какие параметры нужно иметь дело с виртуальными столбцами при переходе с Oracle 11 на Postgres 9.5 - без необходимости изменять код, связанный с базой данных в приложении (что означает, что функции и представления отсутствуют из-за изображения и триггеры слишком дороги, как работа с большими наборами данных)?Устранение виртуальных столбцов от oracle до postgres

Аналогичный вопрос существует: 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) 
+0

Это единственная стратегия, с которой мы столкнулись. Болезненная часть - это перенос данных, и мы просто обезумели, получив столы и взгляды вправо – happybuddha