MyTetra Share
Делитесь знаниями!
Как в PostgreSQL сохранить номер версии структуры базы данных или таблицы?
Время создания: 18.10.2023 15:24
Текстовые метки: postgresql, sql, номер версии, версия, таблица, база данных, БД, миграция
Раздел: Компьютер - Программирование - SQL - PostgreSQL
Запись: xintrea/mytetra_syncro/master/base/1697631878rl0c4sa5fp/text.html на raw.github.com

Миграция БД - это процесс изменения структуры и содержимого базы данных в ходе изменения и развития кода какого-либо проекта. В процессе доработки проекта, часто в БД появляются новые таблицы, удаляются устревшие. В таблицах появляются новые столбцы или переделываются на другой тип хранимых значений. Появляются новые индексные поля, и устанавливаются новые связи по ключу между таблицами. Чтобы все это менялось всместе с кодом программы, и придумана подсистема миграций. При необходимости, простейшую систему миграции можно написать самостоятельно.


Однако, при создании самопальной системы миграции БД, встает вопрос: где и как хранить актуальный номер версии базы данных и отдельной таблицы? Сохранять в файл? Создавать специальную таблицу? Нет, в PostgreSQL все гораздо проще, и для этих целей можно использовать комментарии.



Комментарий - это текстовая информация в виде одной строки, которая соответствует какому-либо объекту в движке базы данных. Таким объектом может быть практически что угодно в системе PostgreSQL, но главное, что комментарий можно добавлять к базам данных и к таблицам.



Ниже даны примеры добавления комментариев.



Как хранить версию таблицы ourtable:


COMMENT ON TABLE ourtable IS 'version 10';



Как хранить версию БД ourdatabase:


COMMENT ON DATABASE ourdatabase IS 'version 20';



Если есть простые и понятные команды установки версии, то наверно есть подобные команды получения версии? А вот и нет. Возможно, в будущем, такие команды появятся, но в PostgreSQL 9.6 их просто нет. И чтобы достать информацию о версии, надо выковыривать ее из системных таблиц.



Как получить версию таблицы ourtable:


SELECT obj_description(oid)

FROM pg_class

WHERE relkind='r' AND relname='ourtable';



Как получить версию БД ourdatabase:


SELECT pg_catalog.shobj_description(d.oid, 'pg_database') AS "Description"

FROM pg_catalog.pg_database d

WHERE datname = 'ourdatabase';



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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования