LINUX.ORG.RU

Миграции: как в самой таблице хранить номер версии структуры таблицы?

 , , , ,


0

3

Для создания наколеночной системы миграции таблиц в PostgreSQL нужно мне где-то хранить номер версии структуры таблицы.

Существует ли способ где-то сохранить номер версии структуры таблицы в самой таблице?

То есть, не создавать в БД специальную таблицу, в которой будут храниться имена таблиц и их текущие версии структуры, а хранить номер версии в какой-то сопровождающей таблицу информации?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Ответ на: комментарий от exception13

Да, я немного не так прочел ОП. Привык что от ТС частенько дичь идет.

Само собой первым делом надо проверить а нет ли нужного в метаданных.

Если нет, то найти записвваемое место и писать туда.

mrjaggers
()

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

Нужно хранить версию состояния всей базы, и да, это в отдельной табличке делается.

lovesan ★★
()
Ответ на: комментарий от lovesan

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

exception13 ★★★★★
()
Последнее исправление: exception13 (всего исправлений: 3)
Ответ на: комментарий от cobold

show create table

Ты попутал PostgreSQL и MySQL.

считай от полученной строки хэш, вот тебе версия

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

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

А как ты будешь определять версию для таблиц, которых в базе ещё нет?

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

Кроме того, нет гарантии что Postgre 9.6 даст ту же структуру, а соответственно и хеш, что и какой-нибудь Postgre 14 на той же таблице или БД. И вот тогда будет очень весело обновлять систему.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Не, хеши от лукавого.

Просто если в версии 1 ты таблицу создаешь, в версии 2 удаляешь, а в версии 3 снова создаешь. То видя отсутствте таблицы ты не знаешь на каком ты шаге.

ya-betmen ★★★★★
()
Ответ на: комментарий от crutch_master

Попробуй сертифицировать liquidbase под Astra Linux, открыв все исходные коды и предоставив их в сертифицирующий орган, c комментариями на русском языке, конечно же, чтобы автоматически сгенерировать документацию по коду. Года через три, после всех итераций согласований, если это, конечно, у тебя получится, можешь приходить. Боюсь только что к тому моменту эта liquidbase сильно устареет, а ты будешь прохлождаться на улице, потому что функционал liquidbase нужен был еще вчера.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

я с liquidbase не работал, но если я правильно помню, это херня предлагающая писать ddl очередном универсальном вендор-агностичном языке. в этой части это не просто бесполезный инструмент, от него конкретный вред, так как эта сама по себе идея абстрагирования от вендора sql-бд несостоятельна и ущербна. кроме этой токсичной и вредной идеи про абстрагирование, что еще остается в типовом инструменте этого плана? вторая ущербная несостоятельная идея об «обратных миграциях», а так какие-нибудь косяки и кривизна. у меня критика к самому классу инструментов этого плана. за вычетом нестоятельных идей, то что там остается это 0,1% кода который Xintrea может и сам написать.

asdpm
()
Ответ на: комментарий от Xintrea

Я писал кастомный мигратор на основе вот этого проекта, примерно по тем же причинам.

Можно также взять, затащить в свою кодовую базу и сказать что это часть проекта, что собственно и будет правдой.

alex0x08 ★★★
()
Ответ на: комментарий от Xintrea

Ну т.е. тебя не смутило то что комментарий, как тебе выше посоветовали можно повесить на уже созданную таблицу, а тут проблема возникла вычислить хэш от пустой строки?

cobold ★★★★★
()
Ответ на: комментарий от cobold

Ну т.е. тебя не смутило то что комментарий, как тебе выше посоветовали можно повесить на уже созданную таблицу, а тут проблема возникла вычислить хэш от пустой строки?

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

Мало того, тебе еще хеш не скажет, после какого хеша он стоит и перед каким, потому что в нем нет этой информации.

Xintrea ★★★★★
() автор топика