<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%3A_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL</id>
		<title>Импортозамещение: СУБД PostgreSQL - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%3A_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5:_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL&amp;action=history"/>
		<updated>2026-06-26T05:33:02Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5:_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL&amp;diff=43748&amp;oldid=prev</id>
		<title>KseniyaKirillova: Новая страница: «&lt;blockquote&gt;''Вячеслав Муравлев, наш&amp;nbsp;ведущий разраб…»</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5:_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL&amp;diff=43748&amp;oldid=prev"/>
				<updated>2015-09-21T12:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&lt;a href=&quot;/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D1%8F%D1%87%D0%B5%D1%81%D0%BB%D0%B0%D0%B2_%D0%9C%D1%83%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%B2_(%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8)&quot; title=&quot;Категория:Вячеслав Муравлев (Статьи)&quot;&gt;Вячеслав Муравлев&lt;/a&gt;, наш ведущий разраб…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;''[[:Категория:Вячеслав Муравлев (Статьи)|Вячеслав Муравлев]], наш&amp;amp;nbsp;ведущий разработчик, рассказал журналу [http://www.pcmag.ru/ PC Magazine] о&amp;amp;nbsp;специфике миграции ИТ-системы с&amp;amp;nbsp;СУБД&amp;amp;nbsp;Oracle на&amp;amp;nbsp;PostgreSQL. Как организовать работу с&amp;amp;nbsp;данными для&amp;amp;nbsp;облегчения процесса миграции? В&amp;amp;nbsp;чем преимущество использования автоматических тестов? И&amp;amp;nbsp;как&amp;amp;nbsp;оптимизация функционала влияет на&amp;amp;nbsp;производительность и&amp;amp;nbsp;нагрузку новой&amp;amp;nbsp;СУБД? Об&amp;amp;nbsp;этом&amp;amp;nbsp;— в&amp;amp;nbsp;материале [http://www.pcmag.ru/reviews/detail.php?ID=50090 «Импортозамещение: СУБД PostgreSQL»] на&amp;amp;nbsp;сайте и&amp;amp;nbsp;в&amp;amp;nbsp;бумажной версии издания.''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Я&amp;amp;nbsp;изложу взгляд на&amp;amp;nbsp;переход на&amp;amp;nbsp;новую&amp;amp;nbsp;СУБД с&amp;amp;nbsp;позиции разработчика ИТ-систем.&lt;br /&gt;
&lt;br /&gt;
Первое, что хочется отметить,&amp;amp;nbsp;— очень многое зависит от&amp;amp;nbsp;самой ИТ-системы и&amp;amp;nbsp;того окружения, в&amp;amp;nbsp;котором она работает. Какова продолжительность жизненного цикла системы, численный и&amp;amp;nbsp;качественный состав команды разработчиков, интенсивность доработки, сроки перехода, политика предприятия в&amp;amp;nbsp;отношении вывода текущей&amp;amp;nbsp;СУБД из&amp;amp;nbsp;эксплуатации, бюджет проекта&amp;amp;nbsp;— эти (и,&amp;amp;nbsp;возможно, не&amp;amp;nbsp;только эти) условия будут влиять на&amp;amp;nbsp;принимаемые в&amp;amp;nbsp;ходе миграции решения. Все&amp;amp;nbsp;дальнейшие умозаключения и&amp;amp;nbsp;рекомендации следует соотносить с&amp;amp;nbsp;ответами на&amp;amp;nbsp;эти вопросы.&lt;br /&gt;
&lt;br /&gt;
Первый шаг миграции&amp;amp;nbsp;— это проведение аудита ИТ-системы для&amp;amp;nbsp;ответа на&amp;amp;nbsp;следующие вопросы.&lt;br /&gt;
* Каким образом она работает с&amp;amp;nbsp;данными?&lt;br /&gt;
* Есть&amp;amp;nbsp;ли автоматические тесты&amp;amp;nbsp;— модульные и&amp;amp;nbsp;функциональные?&lt;br /&gt;
* Есть&amp;amp;nbsp;ли бизнес-логика в&amp;amp;nbsp;хранимых процедурах, триггерах?&lt;br /&gt;
* Используются&amp;amp;nbsp;ли специфические компоненты СУБД (например, Oracle&amp;amp;nbsp;AQ)?&lt;br /&gt;
* Каковы требования к&amp;amp;nbsp;производительности и&amp;amp;nbsp;нагрузке? Насколько возможно отклонение от&amp;amp;nbsp;текущих показателей?&lt;br /&gt;
&lt;br /&gt;
Далее рассмотрим возможные варианты ответов на&amp;amp;nbsp;эти&amp;amp;nbsp;вопросы.&lt;br /&gt;
&lt;br /&gt;
===Работа с&amp;amp;nbsp;данными===&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой является организация работы с&amp;amp;nbsp;данными через промежуточный слой доступа (Data Access Layer, DAL). Такой слой может быть построен на&amp;amp;nbsp;основе существующих технологий (например, ORM-средств) или&amp;amp;nbsp;разработан самостоятельно. При&amp;amp;nbsp;наличии такого слоя объем доработок ИТ-системы может существенно сократиться (в&amp;amp;nbsp;идеале, свестись к&amp;amp;nbsp;изменению настроек промежуточного слоя&amp;amp;nbsp;— указаний новых названий таблиц и&amp;amp;nbsp;схем, настройке генерации&amp;amp;nbsp;ID, замене типов данных&amp;amp;nbsp;СУБД). Если приложение использовало специфические возможности и&amp;amp;nbsp;расширения SQL-диалекта заменяемой&amp;amp;nbsp;СУБД, то&amp;amp;nbsp;наличие промежуточного слоя позволяет провести локальные замены таких конструкций без&amp;amp;nbsp;сквозных доработок всей системы.&lt;br /&gt;
&lt;br /&gt;
Если промежуточного слоя в&amp;amp;nbsp;системе нет, то&amp;amp;nbsp;можно предложить два варианта.&lt;br /&gt;
# Создать его. Это не&amp;amp;nbsp;дешево и&amp;amp;nbsp;не&amp;amp;nbsp;быстро, но&amp;amp;nbsp;позволит в&amp;amp;nbsp;будущем обезопасить систему от&amp;amp;nbsp;значительных переделок в&amp;amp;nbsp;аналогичных случаях. Это, скорее всего, благоприятно скажется на&amp;amp;nbsp;общей архитектуре системы (зависит, конечно, от&amp;amp;nbsp;архитектуры системы).&lt;br /&gt;
# Решать проблему «в&amp;amp;nbsp;лоб»: искать и&amp;amp;nbsp;заменять в&amp;amp;nbsp;системе специфичные запросы и&amp;amp;nbsp;конструкции, по&amp;amp;nbsp;возможности используя средства автоматизации типа&amp;amp;nbsp;find&amp;amp;nbsp;и&amp;amp;nbsp;sed.&lt;br /&gt;
&lt;br /&gt;
Какой вариант выбрать, однозначно сказать сложно&amp;amp;nbsp;— многое зависит от&amp;amp;nbsp;контекста ИТ-системы. Может оказаться, что&amp;amp;nbsp;стоимость обоих вариантов одинакова. Если переводимую систему планируется эксплуатировать в&amp;amp;nbsp;течение значительного срока, есть смысл вложиться в&amp;amp;nbsp;создание промежуточного слоя доступа.&lt;br /&gt;
&lt;br /&gt;
===Тесты===&lt;br /&gt;
&lt;br /&gt;
Покрытие существенной части ИТ-системы автоматическими тестами заметно облегчает миграцию (если, конечно, тестирование не&amp;amp;nbsp;проводится средствами&amp;amp;nbsp;СУБД). Прогнав полный набор тестов, можно узнать, какая часть ИТ-системы пострадала от&amp;amp;nbsp;перехода. При&amp;amp;nbsp;внесении исправлений в&amp;amp;nbsp;код появляется быстрая обратная связь. Если такого тестового набора&amp;amp;nbsp;нет, то&amp;amp;nbsp;возможны варианты:&lt;br /&gt;
1)	создать его;&lt;br /&gt;
2)	провести полное регрессионное тестирование вручную.&lt;br /&gt;
&lt;br /&gt;
Возможно, оба варианта окажутся одинаково дорогими и&amp;amp;nbsp;тогда создание тестов будет иметь смысл только для&amp;amp;nbsp;самих разработчиков ИТ-системы как&amp;amp;nbsp;инвестиция на&amp;amp;nbsp;будущее. Здесь на&amp;amp;nbsp;выбор будет влиять, опять-таки, контекст ИТ-системы.&lt;br /&gt;
&lt;br /&gt;
===Бизнес-логика&amp;amp;nbsp;в&amp;amp;nbsp;СУБД===&lt;br /&gt;
&lt;br /&gt;
====Хранимые процедуры====&lt;br /&gt;
&lt;br /&gt;
Если в&amp;amp;nbsp;ИТ-системе бизнес-логика (или&amp;amp;nbsp;ее&amp;amp;nbsp;часть) размещена в&amp;amp;nbsp;хранимых процедурах, то&amp;amp;nbsp;следует определиться: останется&amp;amp;nbsp;ли она там или&amp;amp;nbsp;будет перенесена на&amp;amp;nbsp;уровень сервера приложений. Если бизнес-логика остается на&amp;amp;nbsp;уровне&amp;amp;nbsp;СУБД, то&amp;amp;nbsp;возникают проблемы конверсии текущих процедур в&amp;amp;nbsp;формат новой&amp;amp;nbsp;СУБД и&amp;amp;nbsp;модификации вызовов этих процедур из&amp;amp;nbsp;кода системы. Здесь опять может сыграть положительную роль наличие промежуточного слоя для&amp;amp;nbsp;работы с&amp;amp;nbsp;СУБД, экранирующего особенности работы с&amp;amp;nbsp;процедурами от&amp;amp;nbsp;кода приложения.&lt;br /&gt;
&lt;br /&gt;
====Триггеры====&lt;br /&gt;
&lt;br /&gt;
С&amp;amp;nbsp;триггерами ситуация аналогичная. Если переносить логику триггеров на&amp;amp;nbsp;уровень сервера приложений, то&amp;amp;nbsp;потребуется создание некоего механизма событий для&amp;amp;nbsp;вызова этой логики.&lt;br /&gt;
&lt;br /&gt;
===Специфические компоненты&amp;amp;nbsp;СУБД===&lt;br /&gt;
&lt;br /&gt;
Тут особо конкретного сказать нечего: если в&amp;amp;nbsp;ИТ-системе использовались специфические возможности&amp;amp;nbsp;СУБД, то&amp;amp;nbsp;их&amp;amp;nbsp;надо либо переносить из&amp;amp;nbsp;СУБД на&amp;amp;nbsp;Open&amp;amp;nbsp;Source или&amp;amp;nbsp;коммерческие (в&amp;amp;nbsp;зависимости от&amp;amp;nbsp;ситуации) аналоги, либо реализовывать собственными силами средствами новой&amp;amp;nbsp;СУБД.&lt;br /&gt;
&lt;br /&gt;
===Требования к&amp;amp;nbsp;производительности и&amp;amp;nbsp;нагрузке===&lt;br /&gt;
&lt;br /&gt;
Тут надо учитывать (и&amp;amp;nbsp;доносить это до&amp;amp;nbsp;заказчика ИТ-системы), что какие-то части функционала, оптимизированные под&amp;amp;nbsp;текущую&amp;amp;nbsp;СУБД, могут «проседать» по&amp;amp;nbsp;производительности и&amp;amp;nbsp;нагрузке на&amp;amp;nbsp;новой&amp;amp;nbsp;СУБД. Пока компетенция по&amp;amp;nbsp;новой&amp;amp;nbsp;СУБД невысокая, это исправить не&amp;amp;nbsp;удастся, но&amp;amp;nbsp;со&amp;amp;nbsp;временем ситуация может выправиться. Такие части ИТ-системы могут быть выявлены заранее, либо при&amp;amp;nbsp;прогоне тестов (если они есть), либо при&amp;amp;nbsp;анализе кода на&amp;amp;nbsp;наличие специфических конструкций и&amp;amp;nbsp;тестировании их&amp;amp;nbsp;исполнения на&amp;amp;nbsp;текущей и&amp;amp;nbsp;целевой&amp;amp;nbsp;СУБД.&lt;br /&gt;
&lt;br /&gt;
===Пример перевода===&lt;br /&gt;
&lt;br /&gt;
В&amp;amp;nbsp;рамках изучения возможностей миграции на&amp;amp;nbsp;PostgreSQL компания CUSTIS провела пилотный проект по&amp;amp;nbsp;миграции одной ИТ-системы с&amp;amp;nbsp;Oracle на&amp;amp;nbsp;PostgreSQL. Система представляет расчетную back-office систему, построенную по&amp;amp;nbsp;принципу трехзвенной архитектуры. Большая часть бизнес-логики (основные расчеты) ИТ-системы находилась на&amp;amp;nbsp;уровне сервера приложений, часть логики (бухгалтерский учет)&amp;amp;nbsp;— в&amp;amp;nbsp;хранимых процедурах Oracle. При&amp;amp;nbsp;проектировании ИТ-системы в&amp;amp;nbsp;архитектуру изначально был заложен принцип доступа к&amp;amp;nbsp;данным через Data Access Layer (DAL). DAL был построен на&amp;amp;nbsp;основе технологии JPA поверх Hibernate. Также в&amp;amp;nbsp;ходе разработки ИТ-системы был создан богатый набор модульных тестов, что позволило оперативно выявлять места в&amp;amp;nbsp;коде с&amp;amp;nbsp;использованием специфических для&amp;amp;nbsp;Oracle конструкций.&lt;br /&gt;
&lt;br /&gt;
Поскольку сроки миграции были установлены небольшие, а&amp;amp;nbsp;перенос логики компонента учета на&amp;amp;nbsp;PostgreSQL занял&amp;amp;nbsp;бы значительное время, то&amp;amp;nbsp;решили сначала реализовать промежуточный вариант&amp;amp;nbsp;— гибридное хранение данных одновременно в&amp;amp;nbsp;Oracle и&amp;amp;nbsp;PostgreSQL. В&amp;amp;nbsp;Oracle осталась логика учета и&amp;amp;nbsp;необходимые для&amp;amp;nbsp;нее таблицы, а&amp;amp;nbsp;в&amp;amp;nbsp;PostgreSQL были смигрированы остальные данные приложения. Перенос учетной части на&amp;amp;nbsp;PostgreSQL запланировали на&amp;amp;nbsp;второй этап миграции.&lt;br /&gt;
&lt;br /&gt;
Для&amp;amp;nbsp;организации гибридного доступа было подготовлено решение на&amp;amp;nbsp;основе инструмента федерализации доступа к&amp;amp;nbsp;данным JBoss Teiid. Оно позволило обращаться к&amp;amp;nbsp;двум&amp;amp;nbsp;СУБД как&amp;amp;nbsp;к&amp;amp;nbsp;единой базе. Поскольку приложение работало через DAL, все эти тонкости для&amp;amp;nbsp;него были экранированы.&lt;br /&gt;
&lt;br /&gt;
Сами доработки ИТ-системы заняли около 2&amp;amp;nbsp;человеко-недель.&lt;br /&gt;
&lt;br /&gt;
===Выводы===&lt;br /&gt;
&lt;br /&gt;
Для&amp;amp;nbsp;тех ИТ-систем, команда разработки которых вела «здоровый образ жизни»: проектировала архитектуру, вкладывалась в тестирование&amp;amp;nbsp;и&amp;amp;nbsp;т.&amp;amp;nbsp;д.,&amp;amp;nbsp;— миграция пройдет менее затратно, нежели для&amp;amp;nbsp;ИТ-систем с&amp;amp;nbsp;ситуационной архитектурой или&amp;amp;nbsp;для&amp;amp;nbsp;систем, построенных на&amp;amp;nbsp;основе конкретной&amp;amp;nbsp;СУБД.&lt;br /&gt;
&lt;br /&gt;
Но, с&amp;amp;nbsp;другой стороны, миграция может дать хороший шанс для&amp;amp;nbsp;построения новой архитектуры и&amp;amp;nbsp;дальнейшего развития ИТ-системы. Нередки случаи, когда работы по&amp;amp;nbsp;перепроектированию признаются необходимыми, но&amp;amp;nbsp;откладываются «до&amp;amp;nbsp;лучших времен» или&amp;amp;nbsp;«до&amp;amp;nbsp;подходящего случая». Миграция на&amp;amp;nbsp;новую&amp;amp;nbsp;СУБД&amp;amp;nbsp;— это и&amp;amp;nbsp;есть подходящий случай (выделяются и&amp;amp;nbsp;время, и&amp;amp;nbsp;бюджет, организуется полное регрессионное тестирование), и&amp;amp;nbsp;при&amp;amp;nbsp;определенной расторопности и&amp;amp;nbsp;удачливости у&amp;amp;nbsp;команды ИТ-системы появляется возможность изменить ее&amp;amp;nbsp;(и&amp;amp;nbsp;свою) жизнь к&amp;amp;nbsp;лучшему.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вячеслав Муравлев (Статьи)]]&lt;br /&gt;
[[Категория:PC Magazine (Публикации)]]&lt;br /&gt;
[[Категория:2015 год (Статьи)]]&lt;br /&gt;
[[Категория:CustisWikiToLib]]&lt;/div&gt;</summary>
		<author><name>KseniyaKirillova</name></author>	</entry>

	</feed>