Pull to refresh

Comments 2

Привет. Переводил пару проектов с oracle на postgresql. Сначала попробовал ora2pg, но в итоге оказалось проще написать свой мигратор (меньше 150 строк кода), который подключался к двум базам, затягивал пачками N строк из таблиц oracle и вставлял в postgres. Через промежуточную базу, т.к. в изменилась не только СУБД, но и структура данных, поэтому сначала конвертация из oracle в промежуточную postgres, затем из из промежуточной в целевую уже с учетом изменения структуры данных. Всех нюансов, почему ora2pg не зашел, сейчас уже не вспомню.

Что касается миграции pl/sql кода, то обратите внимание на такой момент - код типа select ... into ... в оракле при отсутствии данных выдает исключение no_data_found, а в postgresql не выдает. Лечится через "select ... into strict ...".

Отсутствие пакетов в postgres довольно неудобно. Пришлось использовать просто процедуры и функции и соглашение по наименованию вида "package_name__function_name". Есть еще вариант использовать в качестве "пакета" отдельную схему данных, тогда синтаксис будет прежним - "package_name.function_name", но остановились на первом варианте.

Зависимые представления. Если view2 берет данные из view1, нельзя просто так взять и через create or replace view добавить поле во view1, надо дропнуть view1 и зависимые объекты, затем заново создать их в правильном порядке. Это усложняет логику наката изменений в БД.

Спасибо за такое детальное уточнение!

Sign up to leave a comment.