как подключиться к PostgreSQL DDL парсер? - PullRequest
3 голосов
/ 26 июля 2011

Сценарии DDL / SQL, использованные для создания моей базы данных PostgreSQL, находятся под контролем версий.Теоретически, любое изменение модели базы данных отслеживается в хранилище исходного кода.

На практике, однако, случается, что структура оперативной базы данных изменяется «на лету», и если какие-либо клиентские скрипты не могут вставить / выбрать / и т. Д. Данные, я отвечаю за исправление проблемы.

Мне очень помогло бы, если бы я мог провести быстрый тест, чтобы убедиться, что база данных по-прежнему соответствует сценариям создания в репозитории, т.е. все еще является «официальной» версией.

Я началиспользуя pgTAP для этой цели, и до сих пор это прекрасно работает.Однако всякий раз, когда в БД выполняется контролируемое, одобренное изменение, сценарии тестирования также должны изменяться.

Поэтому я подумал о создании сценариев тестирования автоматически.Одним общим подходом может быть

  1. запуск сценариев для создания метаданных БД
  2. доступа к БД на сервере
  3. использование этих метаданных для генерации тестового кода

Я бы предпочел не создавать БД, а вместо этого читать сценарии создания БД напрямую.Я попытался найти способ подключиться к анализатору DDL и получить какое-то представление метаданных, которое мог бы использовать, но до сих пор я многое узнал о внутренностях PostgreSQL, но не смог найти решения этой проблемы.

Может кто-нибудь придумает, как проанализировать DDL-скрипт PostgreSQL?

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Вот мой метод проверки соответствия действующей схемы базы данных определению схемы при управлении версиями: как часть подпрограммы «build» вашей схемы базы данных, установите временный экземпляр базы данных, загрузите во все сценарии создания схемы как это было задумано, затем запустите pg_dump -s и сравните его с дампом схемы вашей производственной базы данных. В зависимости от ваших конкретных обстоятельств вам может потребоваться немного набрать sed над конечным продуктом, чтобы получить точное соответствие, но обычно это возможно.

Вы можете полностью автоматизировать эту процедуру. Запустите «сборку» базы данных при проверке SCM (с помощью бота сборки, сервера непрерывной интеграции или аналогичного) и получите дампы из живого экземпляра с помощью задания cron. Конечно, таким образом вы будете получать оповещения каждый раз, когда кто-то проверяет изменение базы данных, поэтому вам придется немного подправить детали.

Там нет задействованного pgTAP. Я люблю pgTAP и использую его для модульного тестирования функций базы данных и тому подобного (также выполняется на сервере CI), но не для проверки свойств схемы, потому что описанная выше процедура делает это ненужным. (Кроме того, автоматическая генерация тестов из того, что они должны тестировать, выглядит немного неправильно).

2 голосов
/ 27 июля 2011

Здесь много метаданных базы данных, о которых нужно беспокоиться. Несколько лет я разбирался с соответствующими внутренними компонентами базы данных, и я бы не подумал, что проект, который вы считаете целесообразным построить, не тратя несколько человеко-месяцев времени на программирование, просто чтобы получить грубый инструмент альфа-качества, который обрабатывает некоторые конкретное подмножество изменений, о которых вы заботитесь. Если бы это было легко, не было бы давно (как в случае: люди хотели это в течение десятилетия) открытого элемента для встраивания триггеров DDL в базу данных, что именно то, что вы хотели бы иметь здесь.

На практике есть два популярных метода, которые люди используют для облегчения решения этого класса проблем:

  • Установите log_statement на 'ddl' и попытайтесь проанализировать изменения, которые он записывает.
  • Используйте pg_dump --schema-only , чтобы сделать регулярный снимок структуры базы данных. Поместите это под контроль версий и используйте изменения в его diff, чтобы найти информацию, которую вы ищете.

Собственно, взять любой из них и получить сценарии pgTAP, которые вы хотите напрямую, - это его собственная задача. Если внесенное изменение достаточно мало, вы можете до некоторой степени автоматизировать это. По крайней мере, вы начинаете с задачи разумного размера, чтобы подойти с этого угла.

...