Привет, народ.
Требуется тут сделать нестандарную самописную подсистему миграции в БД PostgreSQL 9.6 с учетом параноидальности начальства.
В стандартном виде миграция осуществляется по алгоритму: где-то хранится номер последнего обновления, и если есть новое обновление, то оно применяется поверх тех данных и структуры что есть в БД. При этом все система полагается на то, что если известна версия текущей структуры, то однозначно известна и сама структура, и эта структура правильная. И поэтому миграция применяется без реальной проверки структуры таблиц. И во всех разумных сценариях это работает.
Теперь рассмотрим параноидальный сценарий:
Предполагается, что в любой момент может появиться «тайный криворукий вредитель», который что-то сделает с таблицами в БД. С самими БД он ничего не сделает (не спрашивайте почему, никто этого не знает), а вот с таблицами - сделает. Поменяет тип столбца, переименует столбец или вовсе удалит, уберет индекс или еще что-то эдакое. Или вообще удалит таблицу.
Поэтому, в миграции надо автоматически проверять полную структуру таблиц, которая сформировалась в результате всех предыдущих миграций. И если структура неправильная, то удалять все данные, и прогонять все миграции заново с самой первой (да, вот такой странный подход).
Вопрос 1: как автоматически «вычислять» структуру таблиц, сформировавшуюся за все миграции, чтобы иметь возможность ее проверить?
Вопрос 2: как непосредственно проверить структуру таблиц на соответствие «вычисленной» на предыдущем шаге структуре?
Есть ли готовые SQL-команды или подходы для таких действий?
Используемые инструменты: C++, Qt. Никаких этих ваших яв, питонов, пхп и сторонних библиотек быть не должно.
PS: Я не прикалываюсь, я все это спрашиваю абсолютно серьезно.