Комментарии 11
Скажите, а можно такую страшную конструкцию запуска контейнера:
docker run -it -e DATABASE_DRIVER='mysql' \

-p 8000:8000 dlevsha/compalex

Заменить на более короткую (например указать конфигурационный файл)?

Серьёзно, докер чтобы сравнить дампы баз? И elinks?!

Если Вы разработчик, то есть большая вероятность, что Docker у Вас уже установлен и Вам не составит труда запустить контейнер.


В начале статьи я дал ссылку на большой список приложений, которые можно использовать для сравнения схем DB без установки Docker.


Elinks приведен просто в качестве примера консольного броузера и не является частью данного приложения.

жаль, что он сравнивает только при старте.
Гораздо удобнее было бы задавать реквизиты подключения, а уже в интерфейсе (неоднократно) запускать процесс сравнения.
Пример использования:
Сисадмин (простите — девопс) настраивает стенд, а тестировщик/контент-менеджер занимается сверкой данных.

Когда Вы перезагрузите страничку в браузере — будет отражена "текущая ситуация". Т.е. описанный Вами кейс выполняется уже сейчас.

А добавить недостающие поля на dev можно? Чтобы кнопку нажал и оно само выполнило ALTER TABLE…

Технически это можно было бы сделать, но идеологически это не правильно.
Лучше использовать системы миграции, например Doctrine Migrations или Nasgrate

Вопрос касается Microsoft SQL Server:
иногда, прямого доступа к продуктовой БД нет. Есть ли возможность выгрузить структуру БД в отдельный(ые) файл(ы), а потом сравнить его(их) со структурой локальной БД?
При этом, чтобы был полный дамп, как в Management Studio, с проверками существования объектов БД, а также учитывались секции, файловые группы, скрипт создания БД со всеми опциями и самое главное, чтобы каждый объект сохранялся в отдельный файл (для удобства сохранения в систему контроля версий). Давно ищу такой функционал, но даже SSDT не умеет работать с файловыми группами. Может кто-то подскажет?

По поводу первой части вопроса, когда у Вас нет прямого доступа к DB, но есть доступ по SSH — см. спойлер в этой статье "Вариант с пробросом коннектов к DB через SSH".


Если Вы хотите сравнить дампы, то тогда наверное проще выгрузить целиком дампы как удаленной, так и локальной DB, и сравнить их просто с помощью DIFF, как обычные текстовые файлы.


По поводу сохранения объектов в локальные файлы: готового в Compalex функционала нет, поскольку он "не про это". Но Вы можете написать подобный функционал на известном Вам языке, используя запрос по выгрузке структуры, что то вроде:


SELECT 
    *
FROM
    [your database]..syscolumns sc,
    [your database]..systypes st,
    [your database]..sysobjects so
WHERE
    sc.id = so.id AND
    sc.xtype = st.xtype AND
    so.xtype = [type] AND 
    st.name <> 'sysname' 

Где [type]:


  • FUNCTIONS => 'TF'
  • TABLES => 'U'
  • VIEWS => 'V'
  • PROCEDURE => 'P'
С функциями, процедурами и представлениями так и делаю. А чтобы выгрузить структуру таблиц, нужно учесть очень много системных представлений, чтобы сделать дамп в точности, как это делает Management Studio. В вашем запросе не учитываются файловые группы, секции, индексы, а также опции сжатия. Я находил готовое решение на SQL, но его нужно дорабатывать. Я постараюсь реализовать выгрузку таблиц в своем приложении ImportExportDataSql, когда достаточно изучу все системные представления.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.