Перейдите в «Настройки» -> «Редактор» -> «Общие» -> «Внешний вид» -> «Показать подсказки имени параметра» -> «Настроить ... -> Язык: Kotlin -> Параметры ->« Показать подсказки типа локальной переменной ».
Я думаю, вы можете сказать, что эта конфигурация функции немного скрыта в меню.
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.
Я думаю, что 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 для предупреждений).
Проверьте рефакторинг баз данных ( http://databaserefactoring.com/ ), чтобы узнать о множестве хороших методов для поддержки вашей базы данных в тандеме с изменениями кода.
Достаточно сказать, что вы задаете неправильные вопросы. Вместо того, чтобы помещать вашу базу данных в git, вы должны разложить свои изменения на небольшие проверяемые шаги, чтобы вы могли легко перенести / откатить изменения схемы.
Если вы хотите иметь полную восстанавливаемость, вам следует подумать об архивировании журналов postgres WAL и использовать PITR (восстановление на момент времени) для воспроизведения / пересылки транзакций до определенных заведомо исправных состояний.
Вы не можете сделать это без атомарности, и вы не можете получить атомарность без того же. с использованием pg_dump или файловой системы моментального снимка.
Мой экземпляр postgres находится на zfs, и я время от времени снимаю его. Это примерно мгновенно и последовательно.
которые я иногда снимаю. Это примерно мгновенно и последовательно. которые я иногда снимаю. Это примерно мгновенно и последовательно.Я начинаю думать об очень простом решении, не Не знаю, почему я не подумал об этом раньше !!
Таким образом, я могу переключать ветви, не беспокоясь об изменениях схемы базы данных.
Под дублированием я подразумеваю создание другой базы данных с другим именем (например, my_db_2
); не делать дамп или что-то в этом роде.
Очень распространенный способ кодирования сжатых данных 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 для обновления БД либо для производства, либо для разработки (или для любой желаемой схемы).
На этот вопрос в основном дан ответ, но я хотел бы дополнить ответ X-Istence и Dana the Sane небольшим предложением.
Если вам нужен контроль версий с некоторой степенью детализации, скажем, ежедневно, вы можете связать текстовый дамп таблиц и схемы с помощью такого инструмента, как rdiff-backup , который выполняет инкрементное резервное копирование. Преимущество состоит в том, что вместо хранения моментальных снимков ежедневных резервных копий вы просто сохраняете различия с предыдущим днем.
Благодаря этому у вас есть и преимущество контроля версий, и вы не тратите слишком много места.
В любом случае использование git непосредственно для больших плоских файлов, которые очень часто меняются, не является хорошим решением. Если ваша база данных станет слишком большой, у git начнутся проблемы с управлением файлами.
Используйте инструмент вроде iBatis Migrations ( руководство , короткое обучающее видео ), которое позволяет вам управлять версиями изменения , которые вы вносите в базу данных на протяжении всего жизненного цикла проекта, а не сама база данных.
Это позволяет вам выборочно применять отдельные изменения к разным средам, вести журнал изменений, в котором указаны изменения в каких средах, создавать сценарии для применения изменений от A до N, откатывать изменения и т. Д.