Как я могу подвергнуть базу данных мерзавцу (управление версиями)?

Перейдите в «Настройки» -> «Редактор» -> «Общие» -> «Внешний вид» -> «Показать подсказки имени параметра» -> «Настроить ... -> Язык: Kotlin -> Параметры ->« Показать подсказки типа локальной переменной ».

Я думаю, вы можете сказать, что эта конфигурация функции немного скрыта в меню.

Configure parameter name hints

263
задан hasen 11 May 2009 в 09:57
поделиться

8 ответов

Take a database dump, and version control that instead. This way it is a flat text file.

Personally I suggest that you keep both a data dump, and a schema dump. This way using diff it becomes fairly easy to see what changed in the schema from revision to revision.

If you are making big changes, you should have a secondary database that you make the new schema changes to and not touch the old one since as you said you are making a branch.

134
ответ дан 23 November 2019 в 02:33
поделиться

Я думаю, что X-Istence на правильном пути, но есть еще несколько улучшений, которые вы можете внести в эту стратегию. Сначала используйте:

$pg_dump --schema ... 

, чтобы выгрузить таблицы, последовательности и т. Д. И поместить этот файл в систему контроля версий. Вы будете использовать это для разделения изменений совместимости между вашими ветвями.

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

$pg_dump --table=.. <or> --exclude-table=..

Это хорошая идея, потому что репо может стать действительно неуклюжим, когда ваша база данных достигает 100 МБ + при выполнении полного дампа данных. Лучше всего создать резервную копию более минимального набора данных, необходимого для тестирования вашего приложения. Если ваши данные по умолчанию очень большие, однако это может вызвать проблемы.

Если вам абсолютно необходимо разместить полные резервные копии в репозитории, подумайте о том, чтобы сделать это в ветке за пределами вашего исходного дерева. Хотя для этого лучше всего подойдет внешняя система резервного копирования с некоторой ссылкой на соответствующий svn rev.

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

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Если вам абсолютно необходимо разместить полные резервные копии в репо, подумайте о том, чтобы сделать это в ветке за пределами вашего исходного дерева. Хотя для этого лучше всего подойдет внешняя система резервного копирования с некоторой ссылкой на соответствующий svn rev.

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

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Если вам абсолютно необходимо разместить полные резервные копии в репо, подумайте о том, чтобы сделать это в ветке за пределами вашего исходного дерева. Хотя для этого лучше всего подойдет внешняя система резервного копирования с некоторой ссылкой на соответствующий svn rev.

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

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Хотя для этого лучше всего подойдет внешняя система резервного копирования с некоторой ссылкой на соответствующий svn rev.

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

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Хотя для этого лучше всего подойдет внешняя система резервного копирования с некоторой ссылкой на соответствующий svn rev.

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

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Вы всегда можете сжать их, чтобы сэкономить место перед регистрацией.

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

Вы всегда можете сжать их, чтобы сэкономить место перед регистрацией.

Наконец, взгляните на документацию по резервному копированию postgres , если вы еще этого не сделали. То, как вы комментируете резервное копирование «базы данных», а не дампа, заставляет меня задаться вопросом, думаете ли вы о резервных копиях на основе файловой системы (см. Раздел 23.2 для предупреждений).

1
ответ дан 23 November 2019 в 02:33
поделиться

Проверьте рефакторинг баз данных ( http://databaserefactoring.com/ ), чтобы узнать о множестве хороших методов для поддержки вашей базы данных в тандеме с изменениями кода.

Достаточно сказать, что вы задаете неправильные вопросы. Вместо того, чтобы помещать вашу базу данных в git, вы должны разложить свои изменения на небольшие проверяемые шаги, чтобы вы могли легко перенести / откатить изменения схемы.

Если вы хотите иметь полную восстанавливаемость, вам следует подумать об архивировании журналов postgres WAL и использовать PITR (восстановление на момент времени) для воспроизведения / пересылки транзакций до определенных заведомо исправных состояний.

47
ответ дан 23 November 2019 в 02:33
поделиться

Вы не можете сделать это без атомарности, и вы не можете получить атомарность без того же. с использованием pg_dump или файловой системы моментального снимка.

Мой экземпляр postgres находится на zfs, и я время от времени снимаю его. Это примерно мгновенно и последовательно.

которые я иногда снимаю. Это примерно мгновенно и последовательно.

которые я иногда снимаю. Это примерно мгновенно и последовательно.

2
ответ дан 23 November 2019 в 02:33
поделиться

Я начинаю думать об очень простом решении, не Не знаю, почему я не подумал об этом раньше !!

  • Дублируйте базу данных (и схему, и данные).
  • В ветке для новых-основных-изменений просто измените конфигурацию проекта на использовать новую базу данных дубликатов.

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

РЕДАКТИРОВАТЬ:

Под дублированием я подразумеваю создание другой базы данных с другим именем (например, my_db_2 ); не делать дамп или что-то в этом роде.

26
ответ дан 23 November 2019 в 02:33
поделиться

Очень распространенный способ кодирования сжатых данных RLE состоит в том, чтобы обозначить специальный байт как "DLE" (извините, я не помню, что этот термин означает), что означает "следующий - это счетчик, за которым следует байт".

Таким образом, необходимо кодировать только повторяющиеся последовательности. Обычно символ DLE выбирается таким образом, чтобы минимизировать вероятность того, что он будет происходить естественным образом в несжатых данных.

Для вашего первоначального примера давайте установим полную остановку (или точку) в качестве DLE, это будет кодировать ваш пример следующим образом:

AAABBAAABBCECE => 3A2B3A2B1C1E1C1E <-- your encoding
AAABBAAABBCECE => .3ABB.3ABBCECE   <-- my encoding

Вы бы закодировали последовательность, только если она действительно заканчивается как экономия пространства. Если ограничить длину последовательностей до 255, так что счет умещается в байт, последовательность, таким образом, занимает 3 байта, DLE, счет и байт для повторения. Вероятно, вы также не будете кодировать 3-байтовые последовательности, потому что декодирование этих последовательностей несет немного больше служебных данных, чем некодированная последовательность.

В вашем тривиальном примере сохранение не существует, но если вы попытаетесь сжать растровое изображение, содержащее снимок экрана в основном белой программы, такой как Блокнот, или браузер, то вы увидите реальную экономию пространства.

Если вы столкнетесь с символом DLE естественным образом, просто выдайте число 0, поскольку мы знаем, что никогда не будем кодировать последовательность 0-длины, то DLE, за которой следует 0-байт, означает, что вы декодируете его как один байт DLE.

-121--4378692-

Функциональность SQL Compare также доступна в виде библиотек и документирована как таковая. Я использовал эти диллы в консольном приложении, у меня не было проблем.

-121--2692016-

Используйте что-то вроде LiquiBase , чтобы сохранить контроль редакций файлов Liquibase. можно пометить изменения только для производства и иметь lb для обновления БД либо для производства, либо для разработки (или для любой желаемой схемы).

19
ответ дан 23 November 2019 в 02:33
поделиться

На этот вопрос в основном дан ответ, но я хотел бы дополнить ответ X-Istence и Dana the Sane небольшим предложением.

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

Благодаря этому у вас есть и преимущество контроля версий, и вы не тратите слишком много места.

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

1
ответ дан 23 November 2019 в 02:33
поделиться

Используйте инструмент вроде iBatis Migrations ( руководство , короткое обучающее видео ), которое позволяет вам управлять версиями изменения , которые вы вносите в базу данных на протяжении всего жизненного цикла проекта, а не сама база данных.

Это позволяет вам выборочно применять отдельные изменения к разным средам, вести журнал изменений, в котором указаны изменения в каких средах, создавать сценарии для применения изменений от A до N, откатывать изменения и т. Д.

0
ответ дан 23 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: